On Fri, 2016-05-06 at 08:49 -0700, Andreas Schaefer Sr. wrote: > 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.
I for one did not. Robert > > - Andy > > > On May 5, 2016, at 5:06 AM, Robert Munteanu <romb...@apache.org> > > 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%3 > > > aroo > > > t/var/discovery/impl/clusterInstances/2c6fc55d-ef6c-42be-b9ec- > > > e90febf7e6de/lastHeartbeat</D:href><dcr:eventtype><dcr:propertych > > > ange > > > d/></dcr:eventtype><dcr:eventuserid>admin</dcr:eventuserid> > > > <http://localhost:4502/crx/server/crx.default/jcr%3aroot/var/disc > > > over > > > 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/clusterInstanc > > > es/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.getResp > > > onse > > > BodyAsDocument(DavMethodBase.java:130) > > > at > > > org.apache.jackrabbit.webdav.client.methods.DavMethodBase.getRoot > > > Elem > > > ent(DavMethodBase.java:150) > > > at > > > org.apache.jackrabbit.webdav.client.methods.PollMethod.processRes > > > pons > > > eBody(PollMethod.java:101) > > > at > > > org.apache.commons.httpclient.HttpMethodBase.readResponse(HttpMet > > > hodB > > > ase.java:1749) > > > at > > > org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBa > > > se.j > > > ava:1098) > > > at > > > org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry > > > (Htt > > > pMethodDirector.java:398) > > > at > > > org.apache.commons.httpclient.HttpMethodDirector.executeMethod(Ht > > > tpMe > > > 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(Reposito > > > rySe > > > rviceImpl.java:2378) > > > at > > > org.apache.jackrabbit.spi2dav.RepositoryServiceImpl.getEvents(Rep > > > osit > > > 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.creat > > > eSAX > > > ParseException(ErrorHandlerWrapper.java:203) > > > at > > > com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatal > > > Erro > > > r(ErrorHandlerWrapper.java:177) > > > at > > > com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportEr > > > ror( > > > XMLErrorReporter.java:441) > > > at > > > com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportEr > > > ror( > > > XMLErrorReporter.java:368) > > > at > > > com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportEr > > > ror( > > > 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.XMLDocumentFragmentScanne > > > rImp > > > l$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java: > > > 2786 > > > ) > > > at > > > com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.ne > > > xt(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.XMLDocumentFragmentScanne > > > rImp > > > l.scanDocument(XMLDocumentFragmentScannerImpl.java:510) > > > at > > > com.sun.org.apache.xerces.internal.parsers.XML11Configuration.par > > > se(X > > > ML11Configuration.java:848) > > > at > > > com.sun.org.apache.xerces.internal.parsers.XML11Configuration.par > > > se(X > > > ML11Configuration.java:777) > > > at > > > com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLPar > > > ser. > > > java:141) > > > at > > > com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMPar > > > ser. > > > 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.ja > > > va:1 > > > 27) > > > at > > > org.apache.jackrabbit.webdav.client.methods.DavMethodBase.getResp > > > onse > > > 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/ser > > > ver" > > > ; > > > public static final String URL = "http://localhost:4502/crx/s > > > erve > > > 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().addEve > > > ntLi > > > 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"); > > > } > > > } > > > } > > > > > > } > > > > > > >