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"); >> } >> } >> } >> >> } > > >
