Did it work? Would you mind sharing your code? Thanks.
Jian.Wu wrote: > > Hi Dan, > > Thanks a lot! > > Jian > > On Tue, Jul 29, 2008 at 5:34 AM, Daniel Kulp <[email protected]> wrote: >> >> Right. That would do it. Since Jetty subclasses the same stuff as the >> ClientOnly stuff, it would also replace the client only stuff with it's >> version. >> >> Dan >> >> >> On Jul 29, 2008, at 2:50 AM, jian wu wrote: >> >>> Hi Dan, >>> >>> It seems that I just need change my cxf-extension-commons-http.xml >>> to depends on "JettyHTTPTransportFactory" instead and my simple >>> CommonsHTTPClientConduit prototype was called finally. It would be >>> great that you can confirm that is the right way to inject HTTP Conduit >>> into CXF Client. >>> >>> Thanks a lot for your help! >>> >>> Jian >>> >>> >>> On Mon, Jul 28, 2008 at 11:24 PM, jian wu <[email protected]> wrote: >>>> >>>> Hi Dan, >>>> >>>> Just want to add that cxf-extension-http-jetty.xml in cxf-2.1.1.jar >>>> has a similar >>>> configuration as: >>>> ===================================================== >>>> <beans xmlns="http://www.springframework.org/schema/beans" >>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >>>> xmlns:foo="http://cxf.apache.org/configuration/foo" >>>> xsi:schemaLocation=" >>>> http://www.springframework.org/schema/beans >>>> http://www.springframework.org/schema/beans/spring-beans.xsd"> >>>> >>>> <import resource="classpath:META-INF/cxf/cxf-extension-http.xml" >>>> /> >>>> >>>> <bean >>>> class="org.apache.cxf.transport.http_jetty.JettyHTTPTransportFactory" >>>> >>>> id="org.apache.cxf.transport.http_jetty.JettyHTTPTransportFactory" >>>> lazy-init="false" >>>> >>>> >>>> depends-on="org.apache.cxf.transport.http.ClientOnlyHTTPTransportFactory"> >>>> <property name="bus" ref="cxf"/> >>>> <property name="transportIds"> >>>> <list> >>>> <value>http://schemas.xmlsoap.org/soap/http</value> >>>> <value>http://schemas.xmlsoap.org/wsdl/http/</value> >>>> <value>http://schemas.xmlsoap.org/wsdl/soap/http</value> >>>> >>>> <value>http://www.w3.org/2003/05/soap/bindings/HTTP/</value> >>>> >>>> <value>http://cxf.apache.org/transports/http/configuration</value> >>>> <value>http://cxf.apache.org/bindings/xformat</value> >>>> </list> >>>> </property> >>>> </bean> >>>> >>>> </beans> >>>> ============================================================= >>>> >>>> Thanks a lot! >>>> >>>> Jian >>>> >>>> On Mon, Jul 28, 2008 at 11:04 PM, jian wu <[email protected]> >>>> wrote: >>>>> >>>>> Hi Dan, >>>>> >>>>> I just went to some code debugging, it seems like that: >>>>> AbstractConduitSelector.getSelectedConduit(), which is called by >>>>> UpfrontConduitSelector.selectConduit(), returns >>>>> JettyHTTPTransportFactory >>>>> for "http://schemas.xmlsoap.org/soap/http", it'll initiate >>>>> HTTPConduit, >>>>> >>>>> I just quickly searched cxf configuration file, I'm not sure that the >>>>> following configuration in bus-extensions.xml in cxf-2.1.1.jar is >>>>> related to this: >>>>> ================================================== >>>>> <extension >>>>> class="org.apache.cxf.transport.http_jetty.JettyHTTPTransportFactory" >>>>> deferred="true"> >>>>> <namespace>http://schemas.xmlsoap.org/wsdl/soap/http</namespace> >>>>> <namespace>http://schemas.xmlsoap.org/soap/http</namespace> >>>>> <namespace>http://www.w3.org/2003/05/soap/bindings/HTTP/</namespace> >>>>> <namespace>http://schemas.xmlsoap.org/wsdl/http/</namespace> >>>>> >>>>> >>>>> <namespace>http://cxf.apache.org/transports/http/configuration</namespace> >>>>> <namespace>http://cxf.apache.org/bindings/xformat</namespace> >>>>> </extension> >>>>> ================================================== >>>>> >>>>> Any suggestion or tip to resolve this would be really appreciated. >>>>> >>>>> Thanks a lot for your help! >>>>> >>>>> Jian >>>>> >>>>> >>>>> On Mon, Jul 28, 2008 at 12:58 PM, jian wu <[email protected]> >>>>> wrote: >>>>>> >>>>>> Hi Dan, >>>>>> >>>>>>> The ClientOnly factory should register first (since you depend on >>>>>>> it), >>>>>>> then yours >>>>>>> should get called and register. (You have a @PostConstruct method, >>>>>>> right?) >>>>>> >>>>>> The following is my code snippet for PostConstruct: >>>>>> ============================================================= >>>>>> @PostConstruct >>>>>> public void registerWithBindingManager() { >>>>>> // ... >>>>>> ConduitInitiatorManager cim = >>>>>> bus.getExtension(ConduitInitiatorManager.class); >>>>>> if (null != cim && null != activationNamespaces) { >>>>>> for (String ns : activationNamespaces) { >>>>>> try { >>>>>> ConduitInitiator initor = cim.getConduitInitiator( ns ); >>>>>> if ( initor != null ) { >>>>>> System.out.println( "For " + ns + ", " + >>>>>> initor.getClass().getName() ); >>>>>> cim.deregisterConduitInitiator( ns ); >>>>>> } else { >>>>>> System.out.println( "For " + ns + ", null" ); >>>>>> } >>>>>> } catch (BusException e) { >>>>>> e.printStackTrace(); >>>>>> } >>>>>> >>>>>> cim.registerConduitInitiator(ns, this); >>>>>> } >>>>>> >>>>>> System.out.println(); >>>>>> System.out.println( "Checking ConduitInitiator Mapping:" ); >>>>>> >>>>>> for (String ns : activationNamespaces) { >>>>>> try { >>>>>> ConduitInitiator initor = cim.getConduitInitiator( ns ); >>>>>> if ( initor != null ) { >>>>>> System.out.println( "For " + ns + ", " + >>>>>> initor.getClass().getName() ); >>>>>> } else { >>>>>> System.out.println( "For " + ns + ", null" ); >>>>>> } >>>>>> } catch (BusException e) { >>>>>> e.printStackTrace(); >>>>>> } >>>>>> } >>>>>> } >>>>>> >>>>>> initHttpClient(); >>>>>> >>>>>> if ( this.httpClientInitialized.get() ) { >>>>>> System.out.println( "Commons HttpClient Initialized" ); >>>>>> } else { >>>>>> System.out.println( "Commons HttpClient Failed to initialize" ); >>>>>> } >>>>>> //... >>>>>> } >>>>>> ========================================================= >>>>>> with output: >>>>>> >>>>>> ========================================================= >>>>>> For http://schemas.xmlsoap.org/soap/http, >>>>>> org.apache.cxf.transport.http.ClientOnlyHTTPTransportFactory >>>>>> For http://schemas.xmlsoap.org/wsdl/http/, >>>>>> org.apache.cxf.transport.http.ClientOnlyHTTPTransportFactory >>>>>> For http://schemas.xmlsoap.org/wsdl/soap/http, >>>>>> org.apache.cxf.transport.http.ClientOnlyHTTPTransportFactory >>>>>> For http://www.w3.org/2003/05/soap/bindings/HTTP/, >>>>>> org.apache.cxf.transport.http.ClientOnlyHTTPTransportFactory >>>>>> For http://cxf.apache.org/transports/http/configuration, >>>>>> org.apache.cxf.transport.http.ClientOnlyHTTPTransportFactory >>>>>> For http://cxf.apache.org/bindings/xformat, >>>>>> org.apache.cxf.transport.http.ClientOnlyHTTPTransportFactory >>>>>> >>>>>> Checking ConduitInitiator Mapping: >>>>>> For http://schemas.xmlsoap.org/soap/http, >>>>>> org.apache.cxf.transport.http.CommonsHTTPClientTransportFactory >>>>>> For http://schemas.xmlsoap.org/wsdl/http/, >>>>>> org.apache.cxf.transport.http.CommonsHTTPClientTransportFactory >>>>>> For http://schemas.xmlsoap.org/wsdl/soap/http, >>>>>> org.apache.cxf.transport.http.CommonsHTTPClientTransportFactory >>>>>> For http://www.w3.org/2003/05/soap/bindings/HTTP/, >>>>>> org.apache.cxf.transport.http.CommonsHTTPClientTransportFactory >>>>>> For http://cxf.apache.org/transports/http/configuration, >>>>>> org.apache.cxf.transport.http.CommonsHTTPClientTransportFactory >>>>>> For http://cxf.apache.org/bindings/xformat, >>>>>> org.apache.cxf.transport.http.CommonsHTTPClientTransportFactory >>>>>> Commons HttpClient Initialized >>>>>> ================================================== >>>>>> >>>>>> But, I can see my Client still is still using HTTPConduit. Is it too >>>>>> later >>>>>> or any other configuration point or name >>>>>> "org.apache.cxf.transport.http.ClientOnlyHTTPTransportFactory" is >>>>>> referenced? so far I can only make it work by renaming them as >>>>>> ClientOnlyHTTPTransportFactory and delete the original one from >>>>>> cxf-2.1.1.jar. >>>>>> >>>>>>> I guess my suggestion would be to put breakpoints in the Conduit >>>>>>> manager stuff >>>>>>> to see what is registered. >>>>>> >>>>>> I'll try to do it. >>>>>> >>>>>> Thanks a lot for your help! >>>>>> >>>>>> Jian >>>>>> >>>>>> >>>>>> On Mon, Jul 28, 2008 at 6:48 AM, Daniel Kulp <[email protected]> >>>>>> wrote: >>>>>>> >>>>>>> Not really sure. That all looks completely correct. The >>>>>>> ClientOnly >>>>>>> factory should register first (since you depend on it), then yours >>>>>>> should >>>>>>> get called and register. (You have a @PostConstruct method, >>>>>>> right?) >>>>>>> I >>>>>>> guess my suggestion would be to put breakpoints in the Conduit >>>>>>> manager >>>>>>> stuff >>>>>>> to see what is registered. >>>>>>> >>>>>>> Dan >>>>>>> >>>>>>> >>>>>>> On Jul 26, 2008, at 4:35 AM, jian wu wrote: >>>>>>> >>>>>>>> Hi Dan and Ulhas, >>>>>>>> >>>>>>>> Thanks a lot for answering my previous message! >>>>>>>> >>>>>>>> I tried to create a simple CommonsHttpClientTransportFactory with a >>>>>>>> simple >>>>>>>> CommonsHttpClientConduit, and I tried to follow the suggestion Dan >>>>>>>> gave >>>>>>>> at: >>>>>>>> >>>>>>>> >>>>>>>> http://www.nabble.com/Using-HTTPClient-as-a-transport-td14715325.html#a16815394 >>>>>>>> >>>>>>>> I created a simple cxf-extension-commons-http.xml as: >>>>>>>> =================================================== >>>>>>>> <import resource="classpath:META-INF/cxf/cxf-extension-http.xml" /> >>>>>>>> <bean >>>>>>>> >>>>>>>> class="org.apache.cxf.transport.http.CommonsHTTPClientTransportFactory" >>>>>>>> >>>>>>>> id="org.apache.cxf.transport.http.CommonsHTTPClientTransportFactory" >>>>>>>> lazy-init="false" >>>>>>>> >>>>>>>> >>>>>>>> depends-on="org.apache.cxf.transport.http.ClientOnlyHTTPTransportFactory"> >>>>>>>> <property name="bus" ref="cxf"/> >>>>>>>> <property name="transportIds"> >>>>>>>> <list> >>>>>>>> <value>http://schemas.xmlsoap.org/soap/http</value> >>>>>>>> <value>http://schemas.xmlsoap.org/wsdl/http/</value> >>>>>>>> <value>http://schemas.xmlsoap.org/wsdl/soap/http</value> >>>>>>>> <value>http://www.w3.org/2003/05/soap/bindings/HTTP/</value> >>>>>>>> <value>http://cxf.apache.org/transports/http/configuration</value> >>>>>>>> <value>http://cxf.apache.org/bindings/xformat</value> >>>>>>>> </list> >>>>>>>> </property> >>>>>>>> </bean> >>>>>>>> ==================================================== >>>>>>>> >>>>>>>> I created a simple WSDL2Java generated client, and I can see my >>>>>>>> client logging output as: >>>>>>>> ==================================================== >>>>>>>> Jul 26, 2008 12:28:11 AM >>>>>>>> org.springframework.beans.factory.xml.XmlBeanDefinitionReader >>>>>>>> loadBeanDefinitions >>>>>>>> INFO: Loading XML bean definitions from class path resource >>>>>>>> [META-INF/cxf/cxf.xml] >>>>>>>> Jul 26, 2008 12:28:12 AM >>>>>>>> org.springframework.beans.factory.xml.XmlBeanDefinitionReader >>>>>>>> loadBeanDefinitions >>>>>>>> INFO: Loading XML bean definitions from class path resource >>>>>>>> [META-INF/cxf/cxf-extension-commons-http.xml] >>>>>>>> Jul 26, 2008 12:28:12 AM >>>>>>>> org.springframework.beans.factory.xml.XmlBeanDefinitionReader >>>>>>>> loadBeanDefinitions >>>>>>>> INFO: Loading XML bean definitions from class path resource >>>>>>>> [META-INF/cxf/cxf-extension-http.xml] >>>>>>>> Jul 26, 2008 12:28:12 AM >>>>>>>> org.springframework.beans.factory.xml.XmlBeanDefinitionReader >>>>>>>> loadBeanDefinitions >>>>>>>> INFO: Loading XML bean definitions from class path resource >>>>>>>> [META-INF/cxf/cxf-extension-object-binding.xml] >>>>>>>> ==================================================== >>>>>>>> >>>>>>>> Also, from my registerWithBindingManager() method, I tried to >>>>>>>> ensure >>>>>>>> that the following namespaces are registered with the new >>>>>>>> CommonsHTTPClientTransportFactory as: >>>>>>>> ==================================================== >>>>>>>> For http://schemas.xmlsoap.org/soap/http, >>>>>>>> org.apache.cxf.transport.http.CommonsHTTPClientTransportFactory >>>>>>>> For http://schemas.xmlsoap.org/wsdl/http/, >>>>>>>> org.apache.cxf.transport.http.CommonsHTTPClientTransportFactory >>>>>>>> For http://schemas.xmlsoap.org/wsdl/soap/http, >>>>>>>> org.apache.cxf.transport.http.CommonsHTTPClientTransportFactory >>>>>>>> For http://www.w3.org/2003/05/soap/bindings/HTTP/, >>>>>>>> org.apache.cxf.transport.http.CommonsHTTPClientTransportFactory >>>>>>>> For http://cxf.apache.org/transports/http/configuration, >>>>>>>> org.apache.cxf.transport.http.CommonsHTTPClientTransportFactory >>>>>>>> For http://cxf.apache.org/bindings/xformat, >>>>>>>> org.apache.cxf.transport.http.CommonsHTTPClientTransportFactory >>>>>>>> =================================================== >>>>>>>> >>>>>>>> But, my client still uses the HTTPConduit as the following code >>>>>>>> snippet >>>>>>>> ================================================== >>>>>>>> Client client = ClientProxy.getClient( port ); >>>>>>>> >>>>>>>> System.out.println( client.getConduit().getClass().getSimpleName() >>>>>>>> ); >>>>>>>> System.out.println( >>>>>>>> client.getConduitSelector().getClass().getSimpleName() >>>>>>>> ); >>>>>>>> System.out.println( >>>>>>>> client.getEndpoint().getEndpointInfo().getTransportId() ); >>>>>>>> ================================================== >>>>>>>> with output: >>>>>>>> >>>>>>>> HTTPConduit >>>>>>>> UpfrontConduitSelector >>>>>>>> http://schemas.xmlsoap.org/soap/http >>>>>>>> >>>>>>>> Is there any extra configuration steps required to let CXF Client >>>>>>>> use >>>>>>>> my CommonsHttpClientConduit? >>>>>>>> >>>>>>>> I really appreciate any tip and suggestion from your guys. >>>>>>>> >>>>>>>> Thanks a lot for your help! >>>>>>>> >>>>>>>> Jian >>>>>>> >>>>>>> --- >>>>>>> Daniel Kulp >>>>>>> [email protected] >>>>>>> http://www.dankulp.com/blog >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>> >>>>> >>>> >> >> --- >> Daniel Kulp >> [email protected] >> http://www.dankulp.com/blog >> >> >> >> >> > > -- View this message in context: http://www.nabble.com/Need-Help%3A-How-to-configure-CXF-Client-use-a-CommonsHttpClientTransportFactory-tp18664583p21617180.html Sent from the cxf-user mailing list archive at Nabble.com.
