After I wrote the mail I realized that this is a Jackrabbit issue. Will post it 
there.

What surprises me is the fact that nobody ran into this beforehand even though 
there is a Camel JCR Endpoint that facilitates that. Did you ever use something 
like RMI, JCA to connect to a remote JCR repository. I cannot find any 
documentation that works with Sling or AEM.

- Andy

> On May 5, 2016, at 5:06 AM, Robert Munteanu <[email protected]> wrote:
> 
> Hi,
> 
> On Mon, 2016-05-02 at 13:16 -0700, Andreas Schaefer Sr. wrote:
>> Hi
>> 
>> I am trying to listen for node creation events and use WebDav
>> connection:
>> 
>> session.getWorkspace().getObservationManager().addEventListener()
>> 
>> Unfortunately I cannot make this work neither in AEM 6.1 nor in Sling
>> 8.
> 
> Looking at the SlingDavExServlet code I don't see any XML manipulation,
> so this should be reported to the Jackrabbit project.
> 
> Thanks,
> 
> Robert
> 
>> 
>> What I see is that I get a DavException: (200) OK which is cause by
>> XML parsing error.
>> 
>> Looking at the content that is returned from the SlingDavExServlet is
>> containing “<jcr:primaryType/>” which is not defined in the XML
>> header as namespace and therefore the parsing fails (see
>> DavMethodBase.getResponseBodyAsDocument()).
>> 
>> This is the content I receive from the server:
>> 
>> [                Change Polling] content                        DEBUG
>> << "<dcr:eventdiscovery xmlns:dcr="http://www.day.com/jcr/webdav/1.0
>> <http://www.day.com/jcr/webdav/1.0>"><dcr:eventbundle><dcr:event><D:h
>> ref
>> xmlns:D="DAV:">http://localhost:4502/crx/server/crx.default/jcr%3aroo
>> t/var/discovery/impl/clusterInstances/2c6fc55d-ef6c-42be-b9ec-
>> e90febf7e6de/lastHeartbeat</D:href><dcr:eventtype><dcr:propertychange
>> d/></dcr:eventtype><dcr:eventuserid>admin</dcr:eventuserid>
>> <http://localhost:4502/crx/server/crx.default/jcr%3aroot/var/discover
>> y/impl/clusterInstances/2c6fc55d-ef6c-42be-b9ec-
>> e90febf7e6de/lastHeartbeat%3C/D:href%3E%3Cdcr:eventtype%3E%3Cdcr:prop
>> ertychanged/%3E%3C/dcr:eventtype%3E%3Cdcr:eventuserid%3Eadmin%3C/dcr:
>> eventuserid%3E><dcr:eventuserdata/><dcr:eventdate>1462220040858</dcr:
>> eventdate><dcr:eventidentifier>/var/discovery/impl/clusterInstances/2
>> c6fc55d-ef6c-42be-b9ec-
>> e90febf7e6de</dcr:eventidentifier><dcr:eventinfo><jcr:primaryType>sli
>> ng:Folder</jcr:primaryType><beforeValue>2016-05-02T13:13:30.856-
>> 07:00</beforeValue><afterValue>2016-05-02T13:14:00.858-
>> 07:00</afterValue></dcr:eventinfo></dcr:event></dcr:eventbundle></dcr
>> :eventdiscovery>”
>> 
>> This is an exception I see:
>> 
>> java.io.IOException: XML parsing error
>>      at
>> org.apache.jackrabbit.webdav.client.methods.DavMethodBase.getResponse
>> BodyAsDocument(DavMethodBase.java:130)
>>      at
>> org.apache.jackrabbit.webdav.client.methods.DavMethodBase.getRootElem
>> ent(DavMethodBase.java:150)
>>      at
>> org.apache.jackrabbit.webdav.client.methods.PollMethod.processRespons
>> eBody(PollMethod.java:101)
>>      at
>> org.apache.commons.httpclient.HttpMethodBase.readResponse(HttpMethodB
>> ase.java:1749)
>>      at
>> org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.j
>> ava:1098)
>>      at
>> org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(Htt
>> pMethodDirector.java:398)
>>      at
>> org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMe
>> thodDirector.java:171)
>>      at
>> org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.jav
>> a:397)
>>      at
>> org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.jav
>> a:323)
>>      at
>> org.apache.jackrabbit.spi2dav.RepositoryServiceImpl.poll(RepositorySe
>> rviceImpl.java:2378)
>>      at
>> org.apache.jackrabbit.spi2dav.RepositoryServiceImpl.getEvents(Reposit
>> oryServiceImpl.java:2179)
>>      at
>> org.apache.jackrabbit.jcr2spi.WorkspaceManager$ChangePolling.run(Work
>> spaceManager.java:1240)
>>      at java.lang.Thread.run(Thread.java:745)
>> Caused by: org.xml.sax.SAXParseException; lineNumber: 1;
>> columnNumber: 628; The prefix "jcr" for element "jcr:primaryType" is
>> not bound.
>>      at
>> com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAX
>> ParseException(ErrorHandlerWrapper.java:203)
>>      at
>> com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalErro
>> r(ErrorHandlerWrapper.java:177)
>>      at
>> com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(
>> XMLErrorReporter.java:441)
>>      at
>> com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(
>> XMLErrorReporter.java:368)
>>      at
>> com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(
>> XMLErrorReporter.java:325)
>>      at
>> com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scan
>> StartElement(XMLNSDocumentScannerImpl.java:289)
>>      at
>> com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImp
>> l$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2786
>> )
>>      at
>> com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(X
>> MLDocumentScannerImpl.java:606)
>>      at
>> com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next
>> (XMLNSDocumentScannerImpl.java:117)
>>      at
>> com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImp
>> l.scanDocument(XMLDocumentFragmentScannerImpl.java:510)
>>      at
>> com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(X
>> ML11Configuration.java:848)
>>      at
>> com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(X
>> ML11Configuration.java:777)
>>      at
>> com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.
>> java:141)
>>      at
>> com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.
>> java:243)
>>      at
>> com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Doc
>> umentBuilderImpl.java:348)
>>      at
>> javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:121)
>>      at
>> org.apache.jackrabbit.webdav.xml.DomUtil.parseDocument(DomUtil.java:1
>> 27)
>>      at
>> org.apache.jackrabbit.webdav.client.methods.DavMethodBase.getResponse
>> BodyAsDocument(DavMethodBase.java:121)
>>      ... 12 more
>> 
>> 
>> I use Jackrabbit 2.10.0 to connect to the server.
>> 
>> This is my test code:
>> 
>> import org.apache.jackrabbit.commons.JcrUtils;
>> import org.slf4j.Logger;
>> import org.slf4j.LoggerFactory;
>> 
>> import javax.jcr.LoginException;
>> import javax.jcr.NoSuchWorkspaceException;
>> import javax.jcr.Node;
>> import javax.jcr.Repository;
>> import javax.jcr.RepositoryException;
>> import javax.jcr.Session;
>> import javax.jcr.SimpleCredentials;
>> import javax.jcr.observation.EventIterator;
>> import javax.jcr.observation.EventListener;
>> 
>> public class TestCamelMain {
>> 
>>     private final Logger LOG =
>> LoggerFactory.getLogger(TestCamelMain.class);
>> 
>> //    public static final String URL = "http://localhost:8080/server";
>> ;
>>     public static final String URL = "http://localhost:4502/crx/serve
>> r";
>> //    public static final String URL = "http://localhost:4502/crx/rep
>> ository";
>>     public static final String user = "admin";
>>     public static final String path = "/etc/framemaker/inbox";
>>     private static final String WORKSPACE = "crx.default";
>> //    private static final String WORKSPACE = "default";
>> 
>>     private TestCamelMain main;
>>  
>>     public static void main(String[] args) throws Exception {
>>         TestCamelMain example = new TestCamelMain();
>>         example.boot();
>>     }
>>  
>>     public void boot() throws Exception {
>>         Session session = null;
>>         try
>>         {
>>             LOG.info("Getting repository.");
>>             final Repository repository =
>> JcrUtils.getRepository(URL);
>> 
>>             LOG.info("Getting Session.");
>>             session = repository.login(
>>                 new SimpleCredentials(user, user.toCharArray()),
>>                 WORKSPACE);
>> 
>>             LOG.info("Getting parent node.");
>>             Node parent = session.getNode(path);
>>             if (null == parent)
>>             {
>>                 LOG.error("Node not found at {}", path);
>>                 return;
>>             }
>> 
>>              String[] uuid = null;
>> //           String uuids = getJcrEndpoint().getUuids();
>> //
>> //           if (uuids != null) {
>> //               uuids = uuids.trim();
>> //
>> //               if (!"".equals(uuids)) {
>> //                   uuid = uuids.split(",");
>> //               }
>> //           }
>> 
>>              String[] nodeTypeName = null;
>> //           String nodeTypeNames =
>> getJcrEndpoint().getNodeTypeNames();
>> //
>> //           if (nodeTypeNames != null) {
>> //               nodeTypeNames = nodeTypeNames.trim();
>> //
>> //               if (!"".equals(nodeTypeNames)) {
>> //                   nodeTypeName = nodeTypeNames.split(",");
>> //               }
>> //           }
>> 
>>             session.getWorkspace().getObservationManager().addEventLi
>> stener(
>>                 new MyEventListener(),
>>                 3,
>>                 path,
>>                 true,
>>                 uuid,
>>                 nodeTypeName,
>>                 false
>>             );
>> 
>>             Thread.sleep(3600 * 1000);
>>         } catch (LoginException e)
>>         {
>>             LOG.error("Cannot login.", e);
>>         } catch (NoSuchWorkspaceException e)
>>         {
>>             LOG.error("No such workspace.", e);
>>         } catch (RepositoryException e)
>>         {
>>             LOG.error("Cannot connect to repository.", e);
>>         } finally {
>>             if (null != session) {
>>                 session.logout();
>>                 LOG.info("Closing session.");
>>             }
>>         }
>>     }
>> 
>>     public class MyEventListener
>>         implements EventListener
>>     {
>> 
>>         @Override
>>         public void onEvent(EventIterator events) {
>>             if(events != null) {
>>                 while(events.hasNext()) {
>>                     LOG.info("Got Event: " + events.next());
>>                 }
>>             } else {
>>                 LOG.info("Events Iterator is null");
>>             }
>>         }
>>     }
>> 
>> }
> 
> 
> 

Reply via email to