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

Reply via email to