I replied to the atmosphere list because this issue appears to be unrelated to cxf.
2015-07-29 20:08 GMT+02:00 Roberto Francescangeli <[email protected]>: > Hi Aki, > > this is the list of dependencies I am currently loading using maven: > +- org.eclipse.jetty:jetty-webapp:jar:8.1.15.v20140411:test > | \- org.eclipse.jetty:jetty-xml:jar:8.1.15.v20140411:test > +- org.eclipse.jetty:jetty-servlet:jar:8.1.15.v20140411:test > +- junit:junit:jar:4.11:test (scope not updated to compile) > +- junit-addons:junit-addons:jar:1.4:test > | \- xerces:xmlParserAPIs:jar:2.6.2:test > +- org.easytesting:fest-swing:jar:1.2.1:test > | +- org.easytesting:fest-assert:jar:1.2:test > | +- org.easytesting:fest-reflect:jar:1.2:test > | \- net.jcip:jcip-annotations:jar:1.0:test > +- org.easytesting:fest-swing-junit:jar:1.2.1:test > +- org.easytesting:fest-swing-junit-4.5:jar:1.2.1:test > +- org.easytesting:fest-util:jar:1.1.6:test > +- com.h2database:h2:jar:1.4.184:test > +- pl.pragmatists:JUnitParams:jar:0.5.0:test > +- org.mockito:mockito-core:jar:1.9.5:test > +- org.objenesis:objenesis:jar:2.1:test > +- org.powermock:powermock-api-mockito:jar:1.5.5:test > +- org.powermock:powermock-api-support:jar:1.5.5:test > +- org.powermock:powermock-classloading-base:jar:1.5.5:test > +- org.powermock:powermock-core:jar:1.5.5:test > +- org.powermock:powermock-module-junit4:jar:1.5.5:test > +- org.powermock:powermock-module-junit4-common:jar:1.5.5:test > +- org.powermock:powermock-module-junit4-legacy:jar:1.5.5:test > +- org.powermock:powermock-reflect:jar:1.5.5:test > +- org.hamcrest:hamcrest-core:jar:1.3:test > +- org.apache.derby:derby:jar:10.9.1.0:test > +- avalon-framework:avalon-framework-cvs:jar:20020806:compile > +- commons-csv:commons-csv:jar:bluebird:compile > +- commons-cli:commons-cli:jar:1.2:compile > +- commons-codec:commons-codec:jar:1.6:compile > +- commons-collections:commons-collections:jar:3.2.1:compile > +- commons-configuration:commons-configuration:jar:1.8:compile > +- commons-dbutils:commons-dbutils:jar:1.2:compile > +- org.apache.commons:commons-email:jar:1.3.1:compile > +- commons-fileupload:commons-fileupload:jar:1.2.1:compile > +- commons-httpclient:commons-httpclient:jar:3.1:compile > +- commons-io:commons-io:jar:2.0.1:compile > +- commons-lang:commons-lang:jar:2.6:compile > +- commons-logging:commons-logging:jar:1.1.1:compile > +- commons-pool:commons-pool:jar:1.6:compile > +- commons-validator:commons-validator:jar:1.3.0:compile > +- org.apache.httpcomponents:httpclient:jar:4.1.2:compile > +- org.apache.httpcomponents:httpcore:jar:4.1.2:compile > +- org.apache.httpcomponents:httpmime:jar:4.1.2:compile > +- org.apache.lucene:lucene-analyzers:jar:3.6.0:compile > +- org.apache.lucene:lucene-core:jar:3.6.0:compile > +- org.apache.lucene:lucene-spellchecker:jar:3.6.0:compile > +- org.bouncycastle:bcpkix-jdk15on:jar:1.47:compile > +- org.bouncycastle:bcprov-ext-jdk15on:jar:1.47:compile > +- org.freemarker:freemarker:jar:2.3.16:compile > +- com.sun:ldapbp:jar:1.0:compile > +- org.apache.cxf:cxf-core:jar:3.0.5:compile > | +- org.codehaus.woodstox:woodstox-core-asl:jar:4.4.1:compile > | | \- org.codehaus.woodstox:stax2-api:jar:3.1.4:compile > | \- org.apache.ws.xmlschema:xmlschema-core:jar:2.2.1:compile > +- org.apache.cxf:cxf-rt-ws-security:jar:3.0.5:compile > | +- org.apache.cxf:cxf-rt-bindings-soap:jar:3.0.5:compile > | | +- org.apache.cxf:cxf-rt-wsdl:jar:3.0.5:compile > | | | \- wsdl4j:wsdl4j:jar:1.6.3:compile > | | \- org.apache.cxf:cxf-rt-databinding-jaxb:jar:3.0.5:compile > | | +- com.sun.xml.bind:jaxb-impl:jar:2.2.11:compile > | | \- com.sun.xml.bind:jaxb-core:jar:2.2.11:compile > | +- org.apache.cxf:cxf-rt-security:jar:3.0.5:compile > | | \- org.apache.wss4j:wss4j-ws-security-common:jar:2.0.4:compile > | | +- org.apache.santuario:xmlsec:jar:2.0.4:compile > | | +- org.opensaml:opensaml:jar:2.6.1:compile > | | | \- org.opensaml:openws:jar:1.5.1:compile > | | | \- org.opensaml:xmltooling:jar:1.4.1:compile > | | +- org.jasypt:jasypt:jar:1.9.2:compile > | | \- > org.apache.geronimo.specs:geronimo-javamail_1.4_spec:jar:1.7.1:compile > | +- org.apache.wss4j:wss4j-ws-security-dom:jar:2.0.4:compile > | +- org.apache.wss4j:wss4j-policy:jar:2.0.4:compile > | | \- org.apache.neethi:neethi:jar:3.0.3:compile > | +- org.apache.wss4j:wss4j-ws-security-stax:jar:2.0.4:compile > | | \- org.apache.wss4j:wss4j-bindings:jar:2.0.4:compile > | \- org.apache.wss4j:wss4j-ws-security-policy-stax:jar:2.0.4:compile > +- org.apache.cxf:cxf-rt-transports-http:jar:3.0.5:compile > +- org.apache.cxf:cxf-rt-transports-http-jetty:jar:3.0.5:compile > | \- org.apache.geronimo.specs:geronimo-servlet_3.0_spec:jar:1.0:compile > +- org.apache.cxf:cxf-rt-transports-websocket:jar:3.0.5:compile > +- org.apache.cxf:cxf-rt-rs-client:jar:3.0.5:compile > | \- org.apache.cxf:cxf-rt-frontend-jaxrs:jar:3.0.5:compile > | \- javax.annotation:javax.annotation-api:jar:1.2:compile > +- org.atmosphere:atmosphere-annotations:jar:2.3.3:compile > | \- org.atmosphere:atmosphere-runtime:jar:2.3.3:compile > +- com.wordnik:swagger-jersey2-jaxrs_2.10:jar:1.3.12:compile > | +- com.wordnik:swagger-jaxrs_2.10:jar:1.3.12:compile > | | +- org.scala-lang:scala-library:jar:2.10.4:compile > | | +- com.wordnik:swagger-core_2.10:jar:1.3.12:compile > | | | +- > com.fasterxml.jackson.module:jackson-module-scala_2.10:jar:2.4.1:compile > | | | | +- org.scala-lang:scala-reflect:jar:2.10.4:compile > | | | | \- com.thoughtworks.paranamer:paranamer:jar:2.6:compile > | | | +- > com.fasterxml.jackson.module:jackson-module-jsonSchema:jar:2.4.1:compile > | | | +- org.json4s:json4s-ext_2.10:jar:3.2.11:compile > | | | | \- org.joda:joda-convert:jar:1.6:compile > | | | +- org.json4s:json4s-native_2.10:jar:3.2.11:compile > | | | | \- org.json4s:json4s-core_2.10:jar:3.2.11:compile > | | | | +- org.json4s:json4s-ast_2.10:jar:3.2.11:compile > | | | | \- org.scala-lang:scalap:jar:2.10.0:compile > | | | | \- org.scala-lang:scala-compiler:jar:2.10.0:compile > | | | \- org.json4s:json4s-jackson_2.10:jar:3.2.11:compile > | | \- org.reflections:reflections:jar:0.9.9:compile > | | \- com.google.code.findbugs:annotations:jar:2.0.1:compile > | +- > org.glassfish.jersey.containers:jersey-container-servlet-core:jar:2.1:compile > | | +- org.glassfish.hk2.external:javax.inject:jar:2.2.0-b10:compile > | | +- org.glassfish.jersey.core:jersey-server:jar:2.1:compile > | | | +- org.glassfish.jersey.core:jersey-client:jar:2.1:compile > | | | +- org.glassfish.hk2:hk2-api:jar:2.2.0-b10:compile > | | | | \- org.glassfish.hk2:hk2-utils:jar:2.2.0-b10:compile > | | | \- org.glassfish.hk2:hk2-locator:jar:2.2.0-b10:compile > | | | +- > org.glassfish.hk2.external:asm-all-repackaged:jar:2.2.0-b10:compile > | | | \- org.glassfish.hk2.external:cglib:jar:2.2.0-b10:compile > | | \- org.glassfish.jersey.core:jersey-common:jar:2.1:compile > | | \- org.glassfish.hk2:osgi-resource-locator:jar:1.0.1:compile > | \- org.glassfish.jersey.media:jersey-media-multipart:jar:2.1:compile > +- com.wordnik:swagger-annotations:jar:1.3.12:compile > +- org.codehaus.jettison:jettison:jar:1.3.1:compile > +- org.eclipse.jetty:jetty-continuation:jar:8.1.15.v20140411:compile > +- org.eclipse.jetty:jetty-http:jar:8.1.15.v20140411:compile > +- org.eclipse.jetty:jetty-io:jar:8.1.15.v20140411:compile > +- org.eclipse.jetty:jetty-security:jar:8.1.15.v20140411:compile > +- org.eclipse.jetty:jetty-server:jar:8.1.15.v20140411:compile > +- org.eclipse.jetty:jetty-util:jar:8.1.15.v20140411:compile > +- org.eclipse.jetty:jetty-jmx:jar:8.1.15.v20140411:compile > +- org.eclipse.jetty:jetty-websocket:jar:8.1.15.v20140411:compile > +- joda-time:joda-time:jar:1.6.2:compile > +- joda-time:joda-time-hibernate:jar:1.3:compile > +- javax.ws.rs:javax.ws.rs-api:jar:2.0.1:compile > +- javax.validation:validation-api:jar:1.1.0.Final:compile > +- net.java.dev.msv:msv-core:jar:2011.1:compile > | +- com.sun.msv.datatype.xsd:xsdlib:jar:2010.1:compile > | +- isorelax:isorelax:jar:20030108:compile > | \- relaxngDatatype:relaxngDatatype:jar:20020414:compile > +- com.lowagie:itext:jar:2.1.7:compile > +- com.lowagie:itext-rtf:jar:2.1.7:compile > +- org.apache.poi:poi:jar:3.9:compile > +- org.apache.poi:poi-ooxml:jar:3.9:compile > +- com.google.guava:guava:jar:18.0:compile > +- jfree:jcommon:jar:1.0.16:compile > +- org.swinglabs:swing-layout:jar:1.0.3:compile > +- com.google.inject:guice:jar:3.0:compile > | \- aopalliance:aopalliance:jar:1.0:compile > +- com.google.inject.extensions:guice-assistedinject:jar:3.0:compile > +- com.google.inject.extensions:guice-throwingproviders:jar:3.0:compile > +- com.google.inject.extensions:guice-grapher:jar:3.0:compile > | \- com.google.inject.extensions:guice-multibindings:jar:3.0:compile > +- com.google.inject.extensions:guice-servlet:jar:3.0:compile > +- javax.inject:javax.inject:jar:1:compile > +- antlr:antlr:jar:2.7.6:compile > +- com.mchange:c3p0:jar:0.9.2.1:compile > +- c3p0:c3p0-oracle-thin-extras:jar:0.9.0.2:compile > +- com.mchange:mchange-commons-java:jar:0.2.6.3:compile > +- cglib:cglib-nodep:jar:3.1:compile > +- javax.transaction:jta:jar:1.1:compile > +- org.hibernate:hibernate-core:jar:3.6.10.Final:compile > +- org.hibernate:hibernate-c3p0:jar:3.6.10.Final:compile > +- org.hibernate:hibernate-commons-annotations:jar:3.2.0.Final:compile > +- org.hibernate:hibernate-validator:jar:4.3.2.Final:compile > | \- org.jboss.logging:jboss-logging:jar:3.1.0.CR2:compile > +- > org.hibernate.javax.persistence:hibernate-jpa-2.0-api:jar:1.0.1.Final:compile > +- org.javassist:javassist:jar:3.17.1-GA:compile > +- com.fasterxml.jackson.core:jackson-annotations:jar:2.1.1:compile > +- com.fasterxml.jackson.core:jackson-core:jar:2.1.1:compile > +- com.fasterxml.jackson.core:jackson-databind:jar:2.1.1:compile > +- com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:jar:2.1.1:compile > | \- > com.fasterxml.jackson.module:jackson-module-jaxb-annotations:jar:2.1.1:compile > +- de.simplicit:vjdbc:jar:BLUEBIRD:compile > +- com.oracle:ojdbc6:jar:11.1.0.7.0:compile > +- postgresql:postgresql:jar:9.1-901.jdbc4:compile > +- jide:jide-common:jar:3.5.12:compile > +- jide:jide-grids:jar:3.5.12:compile > +- de.schlichtherle.truelicense:truelicense:jar:bluebird:compile > +- de.schlichtherle.truelicense:truelicense-xml:jar:bluebird:compile > +- log4j:log4j:jar:1.2.17:compile > +- org.slf4j:slf4j-api:jar:1.6.2:compile > +- org.slf4j:slf4j-log4j12:jar:1.6.2:compile > +- commons-math:commons-math:jar:1.2:compile > +- com.singularsys:jep-java:jar:3.4:compile > +- com.google.code.findbugs:jsr305:jar:1.3.9:compile > +- com.healthmarketscience.rmiio:rmiio:jar:2.0.0:compile > +- javax.mail:mail:jar:1.3.3_01:compile > +- org.liquibase:liquibase-core:jar:3.1.1:compile > +- org.springframework:spring-aop:jar:3.2.14.RELEASE:compile > +- org.springframework:spring-beans:jar:3.2.14.RELEASE:compile > +- org.springframework:spring-context:jar:3.2.14.RELEASE:compile > +- org.springframework:spring-core:jar:3.2.14.RELEASE:compile > +- org.springframework:spring-expression:jar:3.2.14.RELEASE:compile > +- org.springframework:spring-jdbc:jar:3.2.14.RELEASE:compile > +- org.springframework.ldap:spring-ldap:jar:all:1.3.1.RELEASE:compile > +- org.springframework:spring-tx:jar:3.2.14.RELEASE:compile > +- org.springframework:spring-web:jar:3.2.14.RELEASE:compile > +- > org.springframework.security:spring-security-web:jar:3.2.7.RELEASE:compile > | \- > org.springframework.security:spring-security-core:jar:3.2.7.RELEASE:compile > +- > org.springframework.security:spring-security-config:jar:3.2.7.RELEASE:runtime > +- xerces:xercesImpl:jar:2.9.1:compile > +- xalan:serializer:jar:2.7.1:compile > +- xml-apis:xml-apis:jar:1.3.04:compile > +- dom4j:dom4j:jar:1.6.1:compile > +- jaxen:jaxen:jar:1.1.1:compile > +- jide:jide-action:jar:3.5.12:provided > +- jide:jide-charts:jar:3.5.12:provided > +- jide:jide-components:jar:3.5.12:provided > +- jide:jide-dashboard:jar:3.5.12:provided > +- jide:jide-data:jar:3.5.12:provided > +- jide:jide-dialogs:jar:3.5.12:provided > +- jide:jide-diff:jar:3.5.12:provided > +- jide:jide-dock:jar:3.5.12:provided > +- jide:jide-editor:jar:3.5.12:provided > +- jide:jide-gantt:jar:3.5.12:provided > +- jide:jide-pivot:jar:3.5.12:provided > +- jide:jide-plaf:jar:3.5.12:provided > +- jide:jide-properties:jar:3.5.12:provided > +- jide:jide-rss:jar:3.5.12:provided > +- jide:jide-shortcut:jar:3.5.12:provided > +- jide:jide-treemap:jar:3.5.12:provided > +- jung:jung:jar:bluebird:provided > +- org.eclipse.jetty:jetty-distribution:tar.gz:8.1.15.v20140411:test > +- com.github.spullara.mustache.java:compiler:jar:0.8.13:provided > +- dk.brics.automaton:automaton:jar:1.11-8:compile > +- org.codehaus.castor:castor-core:jar:1.3.1:compile > +- org.codehaus.castor:castor-xml:jar:1.3.1:compile > +- org.apache.commons:commons-compress:jar:1.4.1:compile > +- org.apache.commons:commons-exec:jar:1.1:compile > +- org.apache.pdfbox:fontbox:jar:1.8.2:compile > +- com.jgoodies:forms:jar:1.1.0:compile > +- org.freehep:freehep-graphics2d:jar:2.2.1:compile > +- org.freehep:freehep-graphicsbase:jar:2.2.1:compile > +- org.freehep:freehep-graphicsio:jar:2.2.1:compile > +- org.freehep:freehep-graphicsio-emf:jar:2.2.1:compile > +- org.freehep:freehep-graphicsio-pdf:jar:2.2.1:compile > +- org.freehep:freehep-io:jar:2.2.2:compile > +- com.googlecode.jcamp-dx:jcamp-dx:jar:0.9.1:compile > +- org.apache.pdfbox:jempbox:jar:1.8.2:compile > +- org.json:json:jar:20070829:compile > +- com.googlecode.juniversalchardet:juniversalchardet:jar:1.0.3:compile > +- com.jgoodies:looks:jar:2.1.4:compile > +- org.apache.pdfbox:pdfbox:jar:1.8.2:compile > +- org.apache.poi:poi-scratchpad:jar:3.8:compile > +- regexp:regexp:jar:1.2:compile > +- com.sun.xml.messaging.saaj:saaj-impl:jar:1.3.19:compile > | \- org.jvnet.mimepull:mimepull:jar:1.7:compile > +- org.ccil.cowan.tagsoup:tagsoup:jar:1.2.1:compile > +- org.apache.tika:tika-core:jar:1.2:compile > +- org.apache.tika:tika-parsers:jar:1.2:compile > | \- asm:asm:jar:3.1:compile > +- org.apache.ws.commons.util:ws-commons-util:jar:1.0.2:compile > +- org.apache.xmlrpc:xmlrpc-client:jar:3.1.3:compile > +- org.apache.xmlrpc:xmlrpc-common:jar:3.1.3:compile > +- org.tukaani:xz:jar:1.0:compile > > > I tried using AtmosphereServlet and have that load my CXFServlet using the > atmosphere.xml approach but, not only I'm still getting the same NPE, also > my existing HTTP endpoints are not working anymore. > They don't receive requests anymore even though servlet filters work as > usual. > > 2015-07-29 13:53 GMT-04:00 Aki Yoshida <[email protected]>: > >> I saw you cross-posted your question to @atmosphere and I replied to >> the other message earlier. >> As I mentioned there, you need to distinguish the two distinct ways in >> using cxf and atmosphere together. >> One approach is to use the cxf's websocket transport that internally >> uses atmosphere to add websocket support to the normal cxf services >> (by just using its transport ID >> http://cxf.apache.org/transports/websocket or using ws[s] as the >> protocol name instead of http[s]. >> The samples/jax_rs/websocket in cxf uses this approach. >> >> The other approach is to place atmosphere explicitly in front of cxf's >> servlet so that the call gets handled by atmosphere and dispatched to >> cxf. >> One of the swaggersocket's cxf samples uses this approach. >> >> https://github.com/swagger-api/swagger-socket/tree/master/samples/swaggersocket-cxf-echo >> >> It appears to me that you are mixing these two approaches and that won't >> work. >> You should use the second approach in your case and verify which jars >> are referenced/used in your application. >> >> But I suspect your NPE problem probably has another reason and it has >> directly nothing to do with this mixup issue, though. >> >> 2015-07-29 18:37 GMT+02:00 Roberto Francescangeli >> <[email protected]>: >> > Hi all, >> > >> > I am trying to add websocket support to my existing REST application and >> I >> > would like to do it leveraging the Atmosphere framework API. >> > >> > My application currently runs inside a Jetty 8 standalone container and >> it >> > is deployed as an exploded WAR. >> > The application itself is RESTful and uses CXF 3.0.5 and Spring 3.2.14 to >> > configure all REST endpoints, providers, etc. >> > I also use Guice for dependency injection and GuiceServlet to add some >> > Guice-friendly servlet filters to my environment. >> > >> > In order to add support for websockets I tried several things but in the >> > end I always end up getting the same exception: >> > >> >> java.lang.NullPointerException >> >> at >> >> >> org.eclipse.jetty.websocket.WebSocketFactory.upgrade(WebSocketFactory.java:238) >> >> at >> >> >> org.eclipse.jetty.websocket.WebSocketFactory.acceptWebSocket(WebSocketFactory.java:396) >> >> at >> >> >> org.atmosphere.container.JettyWebSocketUtil.doService(JettyWebSocketUtil.java:62) >> >> at >> >> >> org.atmosphere.container.JettyAsyncSupportWithWebSocket.service(JettyAsyncSupportWithWebSocket.java:66) >> >> at >> >> >> org.atmosphere.cpr.AtmosphereFramework.doCometSupport(AtmosphereFramework.java:2262) >> >> at >> org.atmosphere.cpr.AtmosphereServlet.doPost(AtmosphereServlet.java:190) >> >> at >> org.atmosphere.cpr.AtmosphereServlet.doGet(AtmosphereServlet.java:176) >> >> at javax.servlet.http.HttpServlet.service(HttpServlet.java:735) >> >> at javax.servlet.http.HttpServlet.service(HttpServlet.java:848) >> >> at >> org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:684) >> >> at >> >> >> org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1496) >> >> at >> >> >> org.eclipse.jetty.servlets.UserAgentFilter.doFilter(UserAgentFilter.java:82) >> >> at org.eclipse.jetty.servlets.GzipFilter.doFilter(GzipFilter.java:294) >> >> at >> >> >> org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1484) >> >> at >> >> >> com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:66) >> >> at >> >> >> com.google.inject.servlet.ManagedFilterPipeline.dispatch(ManagedFilterPipeline.java:118) >> >> at com.google.inject.servlet.GuiceFilter.doFilter(GuiceFilter.java:113) >> >> at >> >> >> org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1476) >> >> at >> >> >> org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:501) >> >> at >> >> >> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137) >> >> at >> >> >> org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:557) >> >> at >> >> >> org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231) >> >> at >> >> >> org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1086) >> >> at >> >> >> org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:429) >> >> at >> >> >> org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193) >> >> at >> >> >> org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1020) >> >> at >> >> >> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135) >> >> at >> >> >> org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:255) >> >> at >> >> >> org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:154) >> >> at >> >> >> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116) >> >> at org.eclipse.jetty.server.Server.handle(Server.java:370) >> >> at >> >> >> org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:494) >> >> at >> >> >> org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:971) >> >> at >> >> >> org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:1033) >> >> at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:644) >> >> at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235) >> >> at >> >> >> org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82) >> >> at >> >> >> org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:696) >> >> at >> >> >> org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:53) >> >> at >> >> >> org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608) >> >> at >> >> >> org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543) >> >> at java.lang.Thread.run(Thread.java:745) >> > >> > >> > These are the things I tried: >> > >> > I added jetty-websocket, cxf-rt-transports-websocket, and >> > atmosphere-annotations to my maven dependencies >> > I added the ChatService to my services and configured it in the same way >> I >> > initialize the others using Spring >> > >> > Chat Service was modified like this because this is how we handle >> services >> > in our current application: >> > >> > @WebService >> >> @Path("/chat") >> >> @Produces("application/json") >> >> @AtmosphereService(broadcaster = DefaultBroadcaster.class) >> >> @ImplementedBy(ChatServiceImpl.class) >> >> public interface ChatService { >> >> @Suspend >> >> @GET >> >> public String connect(); >> >> @Broadcast(writeEntity = false) >> >> @POST >> >> public String broadcast(final String message); >> >> } >> >> >> >> public class ChatServiceImpl implements ChatService { >> >> >> >> @Override >> >> public String connect() { >> >> return ""; >> >> } >> >> @Override >> >> public String broadcast(final String message) { >> >> return message; >> >> } >> >> } >> > >> > >> > >> > >> > I modified my jaxrs.xml file to enable websocket transport in CXF over >> > /websocket/* endpoints >> > >> > <jaxrs:server id="websocketService" address="/websocket" >> >> transportId="http://cxf.apache.org/transports/websocket"> >> >> <jaxrs:serviceBeans> >> >> <ref bean="chatServiceImpl" /> <!-- Atmosphere example --> >> >> <ref bean="customerServiceImpl" /> <!-- CXF example --> >> >> </jaxrs:serviceBeans> >> >> <jaxrs:extensionMappings> >> >> <entry key="json" value="application/json" /> >> >> </jaxrs:extensionMappings> >> >> <jaxrs:providers> >> >> <ref bean="jsonProvider" /> >> >> <ref bean="jsonMappingExceptionMapperProvider" /> >> >> <ref bean="jsonParseExceptionMapperProvider" /> >> >> <ref bean="exceptionMapperProvider" /> >> >> </jaxrs:providers> >> >> </jaxrs:server> >> > >> > >> > >> > >> > I added the client HTML file + all the JS files needed on the root of my >> > exploded WAR directory and I opened the chat page from Chrome. >> > >> > This threw the NPE on >> > org.eclipse.jetty.websocket.WebSocketFactory.upgrade() you see above, >> > because the ThreadLocal AbstractHttpConnection is null. >> > >> > Then I tried to switch my CXFServlet in web.xml with the >> AtmosphereServlet >> > because I read that I need to run CXF over Atmosphere and not viceversa. >> > My web.xml file now looks like: >> > >> > <?xml version="1.0" encoding="ISO-8859-1"?> >> >> <web-app >> >> xmlns="http://java.sun.com/xml/ns/javaee" >> >> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >> >> xsi:schemaLocation="http://java.sun.com/xml/ns/javaee >> >> http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" >> >> metadata-complete="true" >> >> version="3.0"> >> >> <display-name>xxxx</display-name> >> >> <context-param> >> >> <param-name>contextConfigLocation</param-name> >> >> <param-value>classpath:/cxf/ws.xml</param-value> >> >> </context-param> >> >> <listener> >> >> >> <listener-class>org.atmosphere.cpr.SessionSupport</listener-class> >> >> </listener> >> >> <context-param> >> >> <param-name>org.atmosphere.cpr.sessionSupport</param-name> >> >> <param-value>true</param-value> >> >> </context-param> >> >> <!--<servlet>--> >> >> <!--<servlet-name>CXFServlet</servlet-name>--> >> >> >> >> >> <!--<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>--> >> >> <!--<load-on-startup>1</load-on-startup>--> >> >> <!--</servlet>--> >> >> <!--<servlet-mapping>--> >> >> <!--<servlet-name>CXFServlet</servlet-name>--> >> >> <!--<url-pattern>/api/*</url-pattern>--> >> >> <!--</servlet-mapping>--> >> >> <servlet> >> >> <servlet-name>AtmosphereServlet</servlet-name> >> >> >> <servlet-class>org.atmosphere.cpr.AtmosphereServlet</servlet-class> >> >> <init-param> >> >> >> >> <param-name>org.atmosphere.websocket.messageContentType</param-name> >> >> <param-value>application/json</param-value> >> >> </init-param> >> >> <init-param> >> >> <param-name>org.atmosphere.cpr.asyncSupport</param-name> >> >> >> >> >> <param-value>org.atmosphere.container.JettyAsyncSupportWithWebSocket</param-value> >> >> </init-param> >> >> <load-on-startup>1</load-on-startup> >> >> <async-supported>true</async-supported> >> >> </servlet> >> >> <servlet-mapping> >> >> <servlet-name>AtmosphereServlet</servlet-name> >> >> <url-pattern>/api/*</url-pattern> >> >> </servlet-mapping> >> >> <!--<filter>--> >> >> <!--<filter-name>AtmosphereFilter</filter-name>--> >> >> >> >> <!--<filter-class>org.atmosphere.cpr.AtmosphereFilter</filter-class>--> >> >> <!--</filter>--> >> >> <!--<filter-mapping>--> >> >> <!--<filter-name>AtmosphereFilter</filter-name>--> >> >> <!--<url-pattern>/api/*</url-pattern>--> >> >> <!--</filter-mapping>--> >> >> <filter> >> >> <filter-name>GuiceFilter</filter-name> >> >> >> <filter-class>com.google.inject.servlet.GuiceFilter</filter-class> >> >> </filter> >> >> <filter-mapping> >> >> <filter-name>GuiceFilter</filter-name> >> >> <url-pattern>/*</url-pattern> >> >> </filter-mapping> >> >> <filter> >> >> <filter-name>GzipFilter</filter-name> >> >> >> <filter-class>org.eclipse.jetty.servlets.GzipFilter</filter-class> >> >> <init-param> >> >> <param-name>mimeTypes</param-name> >> >> >> >> >> <param-value>text/html,text/plain,text/xml,application/xhtml+xml,text/css,application/javascript,application/json,application/octet-stream,application/x-javascript,image/svg+xml,image/png,image/gif,image/jpeg</param-value> >> >> </init-param> >> >> </filter> >> >> <filter-mapping> >> >> <filter-name>GzipFilter</filter-name> >> >> <url-pattern>/*</url-pattern> >> >> </filter-mapping> >> >> <!-- Force usage of prjzip mime type for downloads so IE will not >> >> think it's a .zip --> >> >> <mime-mapping> >> >> <extension>prjzip</extension> >> >> <mime-type>application/prjzip</mime-type> >> >> </mime-mapping> >> >> <!-- Do not display stack traces on 500 --> >> >> <error-page> >> >> <error-code>500</error-code> >> >> <location>/500.html</location> >> >> </error-page> >> >> <!-- >> >> Manage caching on static assets (which are the only assets >> served >> >> by the Jetty DefaultServlet) >> >> public: all static assets are non-user-specific and can be >> cached >> >> for all users equally >> >> max-age=0: all static assets must be revalidated with the >> server >> >> before they can be served >> >> --> >> >> <servlet> >> >> <servlet-name>default</servlet-name> >> >> >> >> <servlet-class>org.eclipse.jetty.servlet.DefaultServlet</servlet-class> >> >> <init-param> >> >> <param-name>cacheControl</param-name> >> >> <param-value>public, max-age=0</param-value> >> >> </init-param> >> >> </servlet> >> >> </web-app> >> > >> > >> > >> > >> > As you can see I also tried to use Atmosphere as a filter but that >> resulted >> > in the same NPE you see above. >> > My original CXFServlet appears commented out in the web.xml file above >> and >> > I replaced that with AtmosphereServlet. Then I created the atmosphere.xml >> > file under META-INF with the following content: >> > >> >> <atmosphere-handlers> >> >> <!-- CXF --> >> >> <atmosphere-handler support-session="false" >> >> context-root="/*" >> >> >> >> class-name="org.atmosphere.handler.ReflectorServletProcessor"> >> >> <property name="servletClassName" >> >> value="org.apache.cxf.transport.servlet.CXFServlet"/> >> >> </atmosphere-handler> >> >> </atmosphere-handlers> >> > >> > >> > Doing this loads all my services using Spring at the server startup but >> > then all my endpoints just don't work and return a 200 OK empty response >> to >> > all requests.. >> > Needless to say, the websocket endpoint is the only one responding to my >> > GET requests but it still throws the same NPE exception as it did the >> first >> > time. >> > >> > I tried also to switch between different asyncSupport classes in the >> > init-param of the Servlet but the result is still the NPE with both >> > *JettyAsyncSupportWithWebSocket* and *JettyAsync30SupportWithWebSocket*. >> > If I use Jetty7Comet then I get a Websocket not supported error and my >> > Chrome client doesn't fall back to long polling due to cross-origin >> > requests not possible for ws URLs... >> > >> > I also tried to disable all servlet filters but I still get the same >> error. >> > >> > Can you please help me understand how can I add a simple service to my >> > existing CXF setup? >> > >> > I also tested succesfully both the Atmosphere's rest-chat example and >> CXF's >> > distribution/src/main/release/samples/jax_rs/websocket example. They are >> > working as expected but I couldn't understand what is missing in my >> > configuration. >> > >> > Thanks a lot in advance! >> > >> > -- >> > Roberto Francescangeli >> > > > > -- > *Roberto Francescangeli*, Ph.D. > Sr SW Engineer @ Schrödinger, New York
