Morning Freeman, I tried to modify my SOAP message, but it didn't work : i still get the same error. I also tried to call the web service with this enveloppe and a standalone client : i got a "wrong parameter error".
I think my SOAP message is correct : i tried to generate it from the RAD 7 web service test and it was the same one. Plus, my business method has one parameter (a string) and a complex type as return type. As i'm totally new to servicemix, so there is probably something i don't understand. What i want to do : SOAP message <--> Servicemix cxf bc <---> SOAP message <-->Websphere Application Server Considering the debug log, what i think it's going on : SOAP message <--> Servicemix cxf bc <---> JBI message <-->Websphere Application Server So, i don't think WAS support JBI message... and that could explain my error (i no longer think it's a soap verion problem). http://localhost:9080/PROTOServiceMixWeb/services/ProtoBean = thrid party web service URL. http://localhost:8092/ProtoBeanService/ = servicemix web service. I only want to call my web service, but i want to call it using a servicemix URL. Thanks again for your help, Best Regards, Florent. Freeman Fang wrote: > > Hi Florent, > > This problem has nothing to do with soap version. > > The problem is that your hard code soap request message is not correct. > > According to the schema in wsdl you append, it should be something like > > <env:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" > xmlns:en > v="http://schemas.xmlsoap.org/soap/envelope/" > xmlns:xsd="http://www.w3.org/2001/ > XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > xmlns:tns="http > ://ejb.proto.mycompany.com"><env:Body><tns:getProtoDTO> > <date>your date</date> > <dble>your dble</dble> > <integ>your integ</integ> > <liste>your liste</liste> > </tns:getPr > otoDTO></env:Body></env:Envelope> > > You shouldn't use > <tns:getProtoDTO>something</tns:getProtoDTO> directly without element tag > defined in the schema. > For some complex schema, write soap message yourself is not so easy, so we > prefer to use some soap tool kit to generate soap message for you, may be > you can try to use apache cxf, basically generate code stub from the > wsdl, and what you need do is just write client invoke code as normal java > operation invoke and cxf will genearate soap message for you. > > Would you please try it again? > > Best Regards > > Freeman > > > > > Florent wrote: >> Hi Freeman, >> >> Indeed, http://localhost:9080/PROTOServiceMixWeb/services/ProtoBean use >> soap >> 1.1. >> But i don't know which soap version >> http://localhost:8092/ProtoBeanService/ >> is using... >> >> The third party webservice is hosted by Websphere Application Server 6.1. >> >> I don't really know what cxf is doing to the message, is it possible to >> log/trace it? >> >> I enabled debug log and added interceptors in my xbean.xml, here is the >> output : >> >> INFO: Inbound Message >> -------------------------------------- >> Encoding: utf-8 >> Headers: {Content-Length=[353], User-Agent=[IBM WebServices/1.0], >> Host=[ITEM-509 >> 73:8092], connection=[Keep-Alive], Date=[Mon, 26 Nov 2007 08:59:47 GMT], >> SOAPAct >> ion=[], Pragma=[no-cache], content-type=[text/xml; charset=utf-8], >> Cache-Control >> =[no-cache], Accept=[application/soap+xml,multipart/related,text/*]} >> Message: >> <env:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" >> xmlns:en >> v="http://schemas.xmlsoap.org/soap/envelope/" >> xmlns:xsd="http://www.w3.org/2001/ >> XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >> xmlns:tns="http >> ://ejb.proto.mycompany.com"><env:Body><tns:getProtoDTO>ddd</tns:getPr >> otoDTO></env:Body></env:Envelope> >> -------------------------------------- >> DEBUG - CxfBcComponent - Created correlation id: >> ID:172.16.180.193-1167b1f58b2-4:1 >> DEBUG - DeliveryChannelImpl - SendSync >> ID:172.16.180.193-1167b1f58b2-4:1 in DeliveryChannel{servicemix-cxf-bc} >> DEBUG - SedaFlow - Called Flow send >> DEBUG - DeliveryChannelImpl - Waiting for exchange >> ID:172.16.180.193-1167b1f58b2-4:1 (1d7a7b3) to be answered in >> DeliveryChannel{servicemix-cxf-bc} from sendSync >> DEBUG - SedaQueue - >> [EMAIL PROTECTED] dequeued >> exchange: InOut[ >> id: ID:172.16.180.193-1167b1f58b2-4:1 >> status: Active >> role: provider >> interface: {http://ejb.proto.mycompany.com}ProtoBean >> service: {http://ejb.proto.mycompany.com}ProtoBeanService >> endpoint: ProtoBean >> operation: {http://ejb.proto.mycompany.com}getProtoDTO >> in: <?xml version="1.0" encoding="UTF-8"?><jbi:message >> xmlns:jbi="http://java. >> sun.com/xml/ns/jbi/wsdl-11-wrapper" >> xmlns:msg="http://ejb.proto.mycompany.com" name= >> "getProtoDTORequest" type="msg:getProtoDTORequest" >> version="1.0"><jbi:part><tns: >> getProtoDTO xmlns:tns="http://ejb.proto.mycompany.com">ddd</tns:getPr >> otoDTO></jbi:part></jbi:message> >> ] >> DEBUG - CxfBcComponent - Received exchange: status: >> Active, >> role: provider >> DEBUG - CxfBcComponent - Retrieved correlation id: >> ID:172.16.180.193-1167b1f58b2-4:1 >> DEBUG - DeliveryChannelImpl - Send >> ID:172.16.180.193-1167b1f58b2-4:1in DeliveryChannel{servicemix-cxf-bc} >> DEBUG - SedaFlow - Called Flow send >> DEBUG - SedaQueue - >> [EMAIL PROTECTED] dequeued >> exchange: InOut[ >> id: ID:172.16.180.193-1167b1f58b2-4:1 >> status: Active >> role: consumer >> interface: {http://ejb.proto.mycompany.com}ProtoBean >> service: {http://ejb.proto.mycompany.com}ProtoBeanService >> endpoint: ProtoBean >> operation: {http://ejb.proto.mycompany.com}getProtoDTO >> in: <?xml version="1.0" encoding="UTF-8"?><jbi:message >> xmlns:jbi="http://java. >> sun.com/xml/ns/jbi/wsdl-11-wrapper" >> xmlns:msg="http://ejb.proto.mycompany.com" name= >> "getProtoDTORequest" type="msg:getProtoDTORequest" >> version="1.0"><jbi:part><tns: >> getProtoDTO xmlns:tns="http://ejb.proto.mycompany.com">ddd</tns:getPr >> otoDTO></jbi:part></jbi:message> >> out: null >> ] >> DEBUG - DeliveryChannelImpl - Notifying exchange >> ID:172.16.180.193-1167b1f58b2-4:1(1d7a7b3) in >> DeliveryChannel{servicemix-cxf-bc} from processInboundSynchronousExchange >> DEBUG - DeliveryChannelImpl - Notified: >> ID:172.16.180.193-1167b1f58b2-4:1(1d7a7b3) in >> DeliveryChannel{servicemix-cxf-bc} from sendSync >> 26 nov. 2007 09:59:48 >> org.apache.cxf.interceptor.LoggingOutInterceptor$LoggingCallback onClose >> INFO: Outbound Message >> -------------------------------------- >> <soap:Envelope >> xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body >> /></soap:Envelope> >> -------------------------------------- >> DEBUG - DeliveryChannelImpl - Send >> ID:172.16.180.193-1167b1f58b2-4:1 >> in DeliveryChannel{servicemix-cxf-bc} >> DEBUG - SedaFlow - Called Flow send >> DEBUG - SedaQueue - >> [EMAIL PROTECTED] dequeued >> exchange: InOut[ >> id: ID:172.16.180.193-1167b1f58b2-4:1 >> status: Done >> role: provider >> interface: {http://ejb.proto.mycompany.com}ProtoBean >> service: {http://ejb.proto.mycompany.com}ProtoBeanService >> endpoint: ProtoBean >> operation: {http://ejb.proto.mycompany.com}getProtoDTO >> in: <?xml version="1.0" encoding="UTF-8"?><jbi:message >> xmlns:jbi="http://java. >> sun.com/xml/ns/jbi/wsdl-11-wrapper" >> xmlns:msg="http://ejb.proto.mycompany.com" name= >> "getProtoDTORequest" type="msg:getProtoDTORequest" >> version="1.0"><jbi:part><tns: >> getProtoDTO xmlns:tns="http://ejb.proto.mycompany.com">ddd</tns:getPr >> otoDTO></jbi:part></jbi:message> >> out: null >> ] >> DEBUG - CxfBcComponent - Received exchange: status: Done, >> role:provider >> DEBUG - CxfBcComponent - Retrieved correlation id: >> ID:172.16.180.193-1167b1f58b2-4:1 >> javax.jbi.messaging.MessagingException: Out not supported >> at >> org.apache.servicemix.jbi.messaging.MessageExchangeImpl.setMessage(MessageExchangeImpl.java:357) >> at >> org.apache.servicemix.cxfbc.CxfBcProviderMessageObserver.onMessage(CxfBcProviderMessageObserver.java:125) >> at >> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:1932) >> at >> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1790) >> at >> org.apache.servicemix.cxfbc.CxfBcProvider.process(CxfBcProvider.java:166) >> at >> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:538) >> at >> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:490) >> at >> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46) >> at >> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:610) >> at >> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:170) >> at >> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:167) >> at >> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134) >> at >> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650) >> at >> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675) >> at java.lang.Thread.run(Thread.java:595) >> >> >> >> Here is my wsdl used by servicemix (the one used by the AS is the same >> one, >> except the service location) : >> >> <?xml version="1.0" encoding="UTF-8"?> >> <wsdl:definitions targetNamespace="http://ejb.proto.mycompany.com" >> xmlns:impl="http://ejb.proto.mycompany.com" >> xmlns:intf="http://ejb.proto.mycompany.com" >> xmlns:tns2="http://dto.proto.mycompany.com" >> xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" >> xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" >> xmlns:wsi="http://ws-i.org/profiles/basic/1.1/xsd" >> xmlns:xsd="http://www.w3.org/2001/XMLSchema"> >> <wsdl:types> >> <schema targetNamespace="http://ejb.proto.mycompany.com" >> xmlns="http://www.w3.org/2001/XMLSchema" >> xmlns:tns2="http://dto.proto.mycompany.com" >> xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" >> xmlns:xsd="http://www.w3.org/2001/XMLSchema"> >> <import namespace="http://dto.proto.mycompany.com" /> >> <element name="getProtoDTOResponse"> >> <complexType> >> <sequence> >> <element >> name="getProtoDTOReturn" >> nillable="true" >> type="tns2:ProtoDTO" /> >> </sequence> >> </complexType> >> </element> >> <element name="getProtoDTO"> >> <complexType> >> <sequence> >> <element name="param" >> nillable="true" >> type="xsd:string" /> >> </sequence> >> </complexType> >> </element> >> <complexType name="ArrayOf_xsd_nillable_string"> >> <sequence> >> <element maxOccurs="unbounded" >> minOccurs="0" >> name="string" nillable="true" >> type="xsd:string" /> >> </sequence> >> </complexType> >> </schema> >> <schema targetNamespace="http://dto.proto.mycompany.com" >> xmlns="http://www.w3.org/2001/XMLSchema" >> xmlns:intf="http://ejb.proto.mycompany.com" >> xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" >> xmlns:xsd="http://www.w3.org/2001/XMLSchema"> >> <import namespace="http://ejb.proto.mycompany.com" /> >> <complexType name="ProtoDTO"> >> <sequence> >> <element name="date" nillable="true" >> type="xsd:dateTime" /> >> <element name="dble" nillable="true" >> type="xsd:double" /> >> <element name="integ" type="xsd:int" /> >> <element name="liste" nillable="true" >> >> type="impl:ArrayOf_xsd_nillable_string" /> >> </sequence> >> </complexType> >> </schema> >> </wsdl:types> >> >> <wsdl:message name="getProtoDTORequest"> >> <wsdl:part element="intf:getProtoDTO" name="parameters" /> >> >> </wsdl:message> >> >> <wsdl:message name="getProtoDTOResponse"> >> <wsdl:part element="intf:getProtoDTOResponse" name="parameters" >> /> >> >> </wsdl:message> >> >> <wsdl:portType name="ProtoBean"> >> <wsdl:operation name="getProtoDTO"> >> <wsdl:input message="intf:getProtoDTORequest" >> name="getProtoDTORequest" /> >> >> <wsdl:output message="intf:getProtoDTOResponse" >> name="getProtoDTOResponse" /> >> >> </wsdl:operation> >> >> </wsdl:portType> >> >> <wsdl:binding name="ProtoBeanSoapBinding" type="intf:ProtoBean"> >> >> <wsdlsoap:binding style="document" >> transport="http://schemas.xmlsoap.org/soap/http" /> >> >> <wsdl:operation name="getProtoDTO"> >> <wsdlsoap:operation soapAction="getProtoDTO" /> >> >> <wsdl:input name="getProtoDTORequest"> >> <wsdlsoap:body use="literal" /> >> >> </wsdl:input> >> >> <wsdl:output name="getProtoDTOResponse"> >> <wsdlsoap:body use="literal" /> >> >> </wsdl:output> >> >> </wsdl:operation> >> >> </wsdl:binding> >> >> <wsdl:service name="ProtoBeanService"> >> <wsdl:port binding="intf:ProtoBeanSoapBinding" >> name="ProtoBean"> >> <wsdlsoap:address >> >> location="http://localhost:8092/ProtoBeanService/" /> >> >> </wsdl:port> >> >> </wsdl:service> >> >> </wsdl:definitions> >> >> Thanks in advance, >> Florent. >> >> >> Freeman Fang-2 wrote: >> >>> Hi Florent, >>> Do you mean >>> http://localhost:9080/PROTOServiceMixWeb/services/ProtoBean use >>> soap1.1 and http://localhost:8092/ProtoBeanService/ use soap 1.2? >>> Which soap toolkit are the third party webservice using? >>> Would you please append the wsdl used for two webservices? >>> >>> Best Regards >>> >>> Freeman >>> >>> >>> Florent wrote: >>> >>>> If i use the following code to access to my web service, it works fine >>>> : >>>> >>>> String endpoint = >>>> "http://localhost:9080/PROTOServiceMixWeb/services/ProtoBean"; >>>> >>>> String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + >>>> "<env:Envelope >>>> xmlns:env=\"http://schemas.xmlsoap.org/soap/envelope/\" >>>> " + >>>> >>>> "xmlns:tns=\"http://ejb.proto.mycompany.com\">" + >>>> "<env:Body>" + >>>> "<tns:getProtoDTO>" + >>>> >>>> "<tns:getProtoDTORequest>0</tns:getProtoDTORequest>" + >>>> "</tns:getProtoDTO>" + >>>> "</env:Body>" + >>>> "</env:Envelope>"; >>>> >>>> MessageFactory mf = MessageFactory.newInstance(); >>>> SOAPMessage smsg = mf.createMessage(new MimeHeaders(), new >>>> ByteArrayInputStream(xml.getBytes())); >>>> >>>> SOAPConnection conn = >>>> SOAPConnectionFactory.newInstance().createConnection(); >>>> SOAPMessage response = conn.call(smsg, url); >>>> >>>> SOAPEnvelope env = response.getSOAPPart().getEnvelope(); >>>> >>>> >>>> If i try to call the fellowing url : >>>> http://localhost:8092/ProtoBeanService/ >>>> i get an error : No SOAPAction header (Application server log)... >>>> That's >>>> why >>>> i was wondering about the soap version. >>>> >>>> I get the following error in servicemix log : >>>> >>>> javax.jbi.messaging.MessagingException: Out not supported >>>> at >>>> org.apache.servicemix.jbi.messaging.MessageExchangeImpl.setMessage(MessageExchangeImpl.java:357) >>>> at >>>> org.apache.servicemix.cxfbc.CxfBcProviderMessageObserver.onMessage(CxfBcProviderMessageObserver.java:125) >>>> at >>>> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:1932) >>>> at >>>> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1790) >>>> at >>>> org.apache.servicemix.cxfbc.CxfBcProvider.process(CxfBcProvider.java:166) >>>> at >>>> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:538) >>>> at >>>> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:490) >>>> at >>>> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46) >>>> at >>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:610) >>>> at >>>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:170) >>>> at >>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:167) >>>> at >>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134) >>>> at >>>> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650) >>>> at >>>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675) >>>> at java.lang.Thread.run(Thread.java:595) >>>> >>>> >>>> Any idea? >>>> >>>> Thank you in advance, >>>> Florent. >>>> >>>> >>>> >>>> Freeman Fang wrote: >>>> >>>> >>>>> Hi, >>>>> >>>>> You needn't specify it in cxf bc endpint configuration. Cxf bc should >>>>> support both of it by default. >>>>> Cxf bc will parse the wsdl you provided and create service model >>>>> accordingly, extract soap version from your wsdl binding part. >>>>> >>>>> Best Regards >>>>> >>>>> Freeman >>>>> >>>>> >>>>> Florent wrote: >>>>> >>>>> >>>>>> Hello, >>>>>> >>>>>> I'm trying to expose a third party webservice to the bus, using cxf. >>>>>> >>>>>> I'd like to know if i can set the soap version. For example, when i >>>>>> was >>>>>> using service-http, there was a SoapVersion attribute, but i didn't >>>>>> find >>>>>> one >>>>>> for the servicemix-cxf-bc-3.2-schema. >>>>>> >>>>>> Is soap 1.1 or 1.2 used? >>>>>> >>>>>> Here is my xbean.xml : >>>>>> >>>>>> <?xml version="1.0" encoding="UTF-8"?> >>>>>> <beans xmlns:cxfbc="http://servicemix.apache.org/cxfbc/1.0" >>>>>> xmlns:ns1="http://ejb.proto.mycompany.com"> >>>>>> >>>>>> <cxfbc:consumer >>>>>> wsdl="classpath:ProtoBean.wsdl" >>>>>> endpoint="ProtoBeanPort" >>>>>> targetEndpoint="ProtoBean" >>>>>> targetService="ns1:ProtoBeanService" >>>>>> targetInterface="ns1:ProtoBean" >>>>>> > >>>>>> </cxfbc:consumer> >>>>>> >>>>>> <cxfbc:provider >>>>>> wsdl="classpath:ProtoBean.wsdl" >>>>>> >>>>>> locationURI="http://localhost:9080/PROTOServiceMixWeb/services/ProtoBean" >>>>>> >>>>>> service="ns1:ProtoBeanService" >>>>>> endpoint="ProtoBean" >>>>>> interfaceName="ns1:ProtoBean" >>>>>> > >>>>>> </cxfbc:provider> >>>>>> >>>>>> </beans> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>> >>>>> >>>> >>>> >>> >> >> > > -- View this message in context: http://www.nabble.com/servicemix-cxf-bc---soapVersion-attribute-tf4860627s12049.html#a13967081 Sent from the ServiceMix - User mailing list archive at Nabble.com.
