Hi Dan,
Thanks a lot!
Jian
On Tue, Jul 29, 2008 at 5:34 AM, Daniel Kulp <dkulp@apache.org> 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 <hellojianwu@gmail.com> 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 <hellojianwu@gmail.com> 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 <hellojianwu@gmail.com> 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 <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>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>
> ---
> Daniel Kulp
> dkulp@apache.org
>
http://www.dankulp.com/blog>
>
>
>
>