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>


Reply via email to