Paul Robinson [
http://community.jboss.org/people/paul.robinson] created the discussion
"Module Dependency for supporting external Handler"
To view the discussion, visit:
http://community.jboss.org/message/629328#629328
--------------------------------------------------------------
Hello,
I'm trying to configure module dependencies for a JAX-WS Web service. The complication
seems to come from the fact that the service uses a Handler that lives inside a dependency
rather than the same deployment archive as the Web service. The problem is appearing in
the TXBridge and XTS demos in the JBossTS project. I would ask someone on the Transactions
team to fix this, but unfortunately that is me ;-)
In more detail this is what we have:
The application (txbridge-demo-service.jar) that I am deploying depends on org.jboss.xts,
which is where the handler that is specified in the handler chain lives. The Web service
only uses JAX-WS annotations (rather than CXF) so I have the following dependencies
specified in the manifest.mf of the txbridge-demo-service.jar:
{code}
Dependencies: javax.xml.ws.api, org.jboss.xts, org.jboss.ws.cxf.jbossws-cxf-client
services export
{code}
The module "org.jboss.xts" has the following module.xml, which includes
dependencies to JBossWS:
{code:xml}
<module xmlns="urn:jboss:module:1.0" name="org.jboss.xts">
<resources>
<resource-root path="jbossxts-4.15.3.Final.jar"/>
<resource-root path="jbossxts-api-4.15.3.Final.jar"/>
<resource-root path="jbosstxbridge-4.15.3.Final.jar"/>
<!-- Insert resources here -->
</resources>
<dependencies>
<module name="javax.transaction.api"/>
<module name="javax.resource.api" />
<module name="system"/>
<module name="org.jboss.jts"/>
<module name="org.jboss.ws.api" services="export"/>
<module name="org.jboss.ws.jaxws-client"
services="export"/>
<module name="org.jboss.ws.cxf.jbossws-cxf-client"
services="export"/>
<module name="org.jboss.logging"/>
<module name="javax.xml.soap.api"/>
<module name="javax.xml.ws.api"/>
<module name="javax.xml.stream.api"/>
<!-- this is needed to get javax.xml.namespace.QName but it would be better if
it were exposed on its own -->
<module name="javax.api"/>
<!-- this is needed because our endpoints are not in a normal deployment and we
need to be able
to resolve the javax.jws.WebService annotation attached to them. presumably an
endpoint
found in a deployment gets this package auto-added to its module loader
-->
<module name="javax.jws.api"/>
<!-- this is needed to ensure @Resource annotations on the JaxWS endpoint
classes are in the
classloader scope-->
<module name="javax.annotation.api"/>
<!-- this is needed to ensure the JaxWS endpoint classes canb refer to
HttpServletRequest etc -->
<module name="javax.servlet.api"/>
</dependencies>
</module>
{code}
When I deploy my application I get the following stack trace:
{code}
10:14:55,883 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-8) MSC00001: Failed
to start service jboss.deployment.unit."txbridge-demo-service.jar".INSTALL:
org.jboss.msc.service.StartException in service
jboss.deployment.unit."txbridge-demo-service.jar".INSTALL: Failed to process
phase INSTALL of deployment "txbridge-demo-service.jar"
at
org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:121)
[jboss-as-server-7.1.0.Alpha2-SNAPSHOT.jar:7.1.0.Alpha2-SNAPSHOT]
at
org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1824)
[jboss-msc-1.0.1.GA.jar:1.0.1.GA]
at
org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1759)
[jboss-msc-1.0.1.GA.jar:1.0.1.GA]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
[:1.6.0_22]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
[:1.6.0_22]
at java.lang.Thread.run(Thread.java:679) [:1.6.0_22]
Caused by: javax.xml.ws.WebServiceException: javax.xml.ws.WebServiceException: Failed to
instantiate handler
at org.apache.cxf.jaxws.EndpointImpl.doPublish(EndpointImpl.java:350)
at org.jboss.wsf.stack.cxf.deployment.EndpointImpl.doPublish(EndpointImpl.java:88)
at org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:239)
at org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:509)
at
org.jboss.wsf.stack.cxf.configuration.NonSpringBusHolder.configure(NonSpringBusHolder.java:116)
at
org.jboss.wsf.stack.cxf.deployment.aspect.BusDeploymentAspect.startDeploymentBus(BusDeploymentAspect.java:109)
at
org.jboss.wsf.stack.cxf.deployment.aspect.BusDeploymentAspect.start(BusDeploymentAspect.java:132)
at
org.jboss.as.webservices.deployers.AspectDeploymentProcessor.internalDeploy(AspectDeploymentProcessor.java:79)
at
org.jboss.as.webservices.deployers.TCCLDeploymentProcessor.deploy(TCCLDeploymentProcessor.java:42)
at
org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:115)
[jboss-as-server-7.1.0.Alpha2-SNAPSHOT.jar:7.1.0.Alpha2-SNAPSHOT]
... 5 more
Caused by: javax.xml.ws.WebServiceException: Failed to instantiate handler
at
org.apache.cxf.jaxws.handler.HandlerChainBuilder.buildHandlerChain(HandlerChainBuilder.java:131)
at
org.apache.cxf.jaxws.handler.AnnotationHandlerChainBuilder.processHandlerElement(AnnotationHandlerChainBuilder.java:267)
at
org.apache.cxf.jaxws.handler.AnnotationHandlerChainBuilder.processHandlerChainElement(AnnotationHandlerChainBuilder.java:167)
at
org.apache.cxf.jaxws.handler.AnnotationHandlerChainBuilder.buildHandlerChainFromClass(AnnotationHandlerChainBuilder.java:120)
at
org.apache.cxf.jaxws.handler.AnnotationHandlerChainBuilder.buildHandlerChainFromClass(AnnotationHandlerChainBuilder.java:284)
at
org.apache.cxf.jaxws.JaxWsServerFactoryBean.buildHandlerChain(JaxWsServerFactoryBean.java:237)
at
org.apache.cxf.jaxws.JaxWsServerFactoryBean.initializeResourcesAndHandlerChain(JaxWsServerFactoryBean.java:216)
at
org.apache.cxf.jaxws.JaxWsServerFactoryBean.create(JaxWsServerFactoryBean.java:203)
at org.apache.cxf.jaxws.EndpointImpl.getServer(EndpointImpl.java:433)
at org.apache.cxf.jaxws.EndpointImpl.doPublish(EndpointImpl.java:322)
... 14 more
Caused by: java.lang.ClassCastException: class
org.jboss.jbossts.txbridge.inbound.JaxWSTxInboundBridgeHandler
at java.lang.Class.asSubclass(Class.java:3039) [:1.6.0_22]
at
org.apache.cxf.jaxws.handler.HandlerChainBuilder.buildHandlerChain(HandlerChainBuilder.java:121)
... 23 more
{code}
The ClassCastException refers to
org.jboss.jbossts.txbridge.inbound.JaxWSTxInboundBridgeHandler which is the handler that
lives in the org.jboss.xts module. I think the problem is that when JBossWS creates the
endpoint it does not have JaxWSTxInboundBridgeHandler in it's Classloader as JBossWS
does not depend on org.jboss.xts (which of course it shouldn't as org.jboss.xts
depends on JBossWS). However, the application does depend on org.jboss.xts, which I
don't think is of any help to JBossWS.
Is my reasoning about what is wrong correct and can anyone suggest how I can fix this?
Many thanks,
Paul Robinson.
--------------------------------------------------------------
Reply to this message by going to Community
[
http://community.jboss.org/message/629328#629328]
Start a new discussion in JBoss Web Services at Community
[
http://community.jboss.org/choose-container!input.jspa?contentType=1&...]