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