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