cxf-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "jian wu" <hellojia...@gmail.com>
Subject Re: Need Help: How to configure CXF Client use a CommonsHttpClientTransportFactory
Date Mon, 28 Jul 2008 19:58:55 GMT
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 <dkulp@apache.org> 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
> dkulp@apache.org
> http://www.dankulp.com/blog
>
>
>
>
>

Mime
View raw message