Thanks, that worked. I had, incorrectly, assumed it was taking that information from the annotations on the service class.
Thanks for your help. Sven -----Original Message----- From: Freeman Fang [mailto:[email protected]] Sent: Thursday, May 05, 2011 10:57 PM To: [email protected] Subject: Re: jaxws:client with non-soap binding? 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
