Hi,

If you specify wsdlLocation for jaxws:endpoint, then it will build servicemodel from wsdl, so that the xmlbinding you specified in wsdl should be picked up. Or you can explicitly specify xml bindingId for jaxws:endpoint, which should also work.

Freeman
On 2011-5-6, at 下午1:44, Sven Zethelius wrote:

I've, tried both the xformat and http, using the wsdl_first, both of which point to the XMLBindingFactory. The difference between the wsdl_first_xml_wrapped and what I'm trying is I'm using the Spring bean syntax (so I can inject the client) instead of the direct object invoke. The problem, as far as I can tell, is that the JaxWsProxyFactoryBeanDefinitionParser never sets the org.apache.cxf.jaxws.JaxWsClientFactoryBean.setBindingId(String), which causes the initialization to "default" to soap bindingId instead of looking it up from the BindingInfo. JaxWsServerFactoryBean initialization goes through WSDLServiceBuilder to build EndpointInfo/BindingInfo, while JaxWsClientFactoryBean doesn't, building it itself in AbstractWSDLBasedEndpointFactory, but relying on someone calling setBindingId first.

What I'm doing:
        <jaxws:client id="JMS_prototype.Client"
                xmlns:tns="urn:expedia:cc:samples:sampleservice:v2:contract"
serviceName="tns:SampleService" endpointName="tns:SampleServiceJMSBinding"
                address="jms://"
serviceClass ="expedia.cc.samples.sampleservice.v2.contract.SampleServicePortType">
                <jaxws:features>
                        <ref bean="JMSConfigFeature" />
                </jaxws:features>
        </jaxws:client>

Instead of the sample code:
       SampleService ss = new SampleService(wsdlURL, SERVICE_NAME);
SampleServicePortType port = ss.getSampleServiceJMSSOAPBinding();

I want it in bean definition, so that I can leverage the jaxws:features, and inject it into other bean definitions.



Wsdl:
xmlns:xformat="http://cxf.apache.org/bindings/xformat";
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/";
xmlns:jms="http://cxf.apache.org/transports/jms";

<wsdl:binding name="SampleServiceBinding" type="tns:SampleServicePortType">
<!-- xformat does not work -->
                <xformat:binding/>
                <wsdl:operation name="operationConcatenateStrings">
                        <wsdl:input>
                                <mime:content type="application/xml" />
                        </wsdl:input>
                </wsdl:operation>
<!-- soap works.  Commented out
                <soap:binding style="document"
                        transport="http://cxf.apache.org/transports/jms"; />
                <wsdl:operation name="operationConcatenateStrings">
                        <soap:operation 
soapAction="local://operationConcatenateStrings" />
                        <wsdl:input>
                                <mime:content type="application/xml" />
                        </wsdl:input>
                </wsdl:operation>
-->  
        </wsdl:binding>

        <wsdl:service name="SampleService">
                <wsdl:port name="SampleServiceJMS"
                        binding="tns:SampleServiceBinding">
                        <jms:address />
                </wsdl:port>
        </wsdl:service>

ClientImpl.invoke:
        chain.toString()
Chain org.apache.cxf.phase.PhaseInterceptorChain@22cf71b7. Current flow:
 setup [PolicyOutInterceptor]
pre-logical [HolderOutInterceptor, SwAOutInterceptor, WrapperClassOutInterceptor, SoapHeaderOutFilterInterceptor]
 post-logical [SoapPreProtocolOutInterceptor]
 prepare-send [MessageSenderInterceptor]
 pre-stream [AttachmentOutInterceptor, StaxOutInterceptor]
 write [SoapOutInterceptor]
 marshal [BareOutInterceptor]


ChainInitiationObserver.onMessage:
        phaseChain.toString()
Chain org.apache.cxf.phase.PhaseInterceptorChain@32e6e42e. Current flow:
 receive [PolicyInInterceptor, AttachmentInInterceptor]
 post-stream [StaxInInterceptor]
 post-protocol [JAXBAttachmentSchemaValidationHack]
unmarshal [URIMappingInterceptor, XMLMessageInInterceptor, DocLiteralInInterceptor]
 pre-logical [OneWayProcessorInterceptor]
 post-logical [WrapperClassInInterceptor]
 pre-invoke [HolderInInterceptor]
 invoke [ServiceInvokerInterceptor]
 post-invoke [OutgoingChainInterceptor]


-----Original Message-----
From: Freeman Fang [mailto:[email protected]]
Sent: Thursday, May 05, 2011 6:33 PM
To: [email protected]
Subject: Re: jaxws:client with non-soap binding?

Hi,

Do your wsdl follow the wsdl_first_xml_wrapped example we shipped with
kit? That's an example how to specify xmlbinding in wsdl.
More importantly, for the binding part, you should have
<xformat:binding />

Freeman


On 2011-5-6, at 上午1:24, Sven Zethelius wrote:

Is it possible to use the spring jaxws:client declaration with a non-
soap binding, like XMLBinding?

I'm using cxf 2.3.2, and even though the WSDL is using namespace 
"http://schemas.xmlsoap.org/wsdl/http/
" it's falling back to the default binding of soap binding.  This
causes it to not use the right protocol when talking to the service
created by spring declaration of jaxws:endpoint, since it is
initialized with XMLBinding, given the same WSDL.

Is this  a bug, or just not a supported configuration, or something
extra I have to set to specifically control the binding?


---------------------------------------------
Freeman Fang

FuseSource
Email:[email protected]
Web: fusesource.com
Twitter: freemanfang
Blog: http://freemanfang.blogspot.com
Connect at CamelOne May 24-26
The Open Source Integration Conference









---------------------------------------------
Freeman Fang

FuseSource
Email:[email protected]
Web: fusesource.com
Twitter: freemanfang
Blog: http://freemanfang.blogspot.com
Connect at CamelOne May 24-26
The Open Source Integration Conference








Reply via email to