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&containerType=14&container=2044]

_______________________________________________
jboss-user mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to