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