HTTP conduit configuration for de-coupeld end-points
karypid Oct 22, 2009 5:10 AMHi,
I have a rather simple (I hope) problem trying to setup a WS-RM client as follows:
I need a separate connection to be used for the incoming traffic (de-coupled endpoint) towards the client (the CXF configuration to do this is explained here: http://cxf.apache.org/docs/configuration-of-runtime-constructed-objects.html).
My problem is this:
While creating the client proxy, CXF also tries to create the endpoint for receiving replies. Unfortunately it uses Jetty (as it is not aware that it is running in JBoss) and I get a ClassNotFoundException (see log below and notice how the HTTPConduit class tries to initialize and HTTP engine using Jetty).
11:45:57,875 INFO [ReflectionServiceFactoryBean] Creating Service {http://messaging.cmr/}AsyncMessagingService from WSDL: http://localhost:8001/wls-cxf.wsrm.recipient-war/services/AsyncMessagingService?wsdl 11:45:58,343 INFO [HTTPConduit] creating decoupled endpoint: http://localhost:9999/decoupled_endpoint 11:45:58,359 ERROR [[DebugServlet]] Servlet.service() for servlet DebugServlet threw exception java.lang.ClassNotFoundException: org.mortbay.jetty.Connector from BaseClassLoader@1816fb6{VFSClassLoaderPolicy@cd429b{... at org.jboss.classloader.spi.base.BaseClassLoader.loadClass(BaseClassLoader.java:448) at java.lang.ClassLoader.loadClass(ClassLoader.java:252) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320) at org.apache.cxf.transport.http_jetty.JettyHTTPServerEngineFactory.createJettyHTTPServerEngine(JettyHTTPServerEngineFactory.java:217) at org.apache.cxf.transport.http_jetty.JettyHTTPDestination.retrieveEngine(JettyHTTPDestination.java:114) at org.apache.cxf.transport.http_jetty.JettyHTTPDestination.finalizeConfig(JettyHTTPDestination.java:142) at org.apache.cxf.transport.http_jetty.JettyHTTPTransportFactory.createDestination(JettyHTTPTransportFactory.java:123) at org.apache.cxf.transport.http_jetty.JettyHTTPTransportFactory.getDestination(JettyHTTPTransportFactory.java:103) at org.apache.cxf.transport.http.HTTPConduit.getDestination(HTTPConduit.java:966) at org.apache.cxf.transport.http.HTTPConduit.setUpDecoupledDestination(HTTPConduit.java:943) at org.apache.cxf.transport.http.HTTPConduit.getBackChannel(HTTPConduit.java:747)
How can I configure CXF to delegate this task to JBoss? For example, to have JAX-WS web services published on JBoss, you need to configure an invoker from the JBoss integration layer:
<jaxws:endpoint id='AsyncMessaging' address='http://localhost:7180/jboss-cxf.wsrm.recipient/AsyncMessagingService' implementor='svc.impl.messaging.AsyncMessagingServiceImpl'> <jaxws:invoker> <bean class='org.jboss.wsf.stack.cxf.InvokerJSE' /> </jaxws:invoker>
I hope somebody can point me in the right direction? My jbossws-cxf.xml currenty looks like this:
<cxf:bus> <cxf:features> <cxf:logging /> <wsa:addressing /> <wsrm-mgr:reliableMessaging> <wsrm-policy:RMAssertion> <wsrm-policy:BaseRetransmissionInterval Milliseconds="4000" /> <wsrm-policy:AcknowledgementInterval Milliseconds="2000" /> </wsrm-policy:RMAssertion> <wsrm-mgr:destinationPolicy> <wsrm-mgr:acksPolicy intraMessageThreshold="0" /> </wsrm-mgr:destinationPolicy> </wsrm-mgr:reliableMessaging> </cxf:features> </cxf:bus> <http:conduit name="{http://messaging.cmr/}AsyncMessagingImplPort.http-conduit"> <http:client DecoupledEndpoint="http://localhost:9999/decoupled_endpoint" /> </http:conduit>