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 > > > > >
