Guillaume,

Using the HttpSoapConnector (from v1055 svn.codehaus.org) to communicate
with a different web service, I now get the following response (Execution
is: SoapClient -> HttpSoapConnector -> SaajComponent -> WebService): 

<?xml version='1.0' encoding='UTF-8'?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/";
xmlns:xsd="http://www.w3.org/2001/XMLSchema";
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
    <soap:Body>
        <e:Envelope xmlns:e="http://schemas.xmlsoap.org/soap/envelope/";
xmlns:d="http://www.w3.org/2001/XMLSchema";
xmlns:i="http://www.w3.org/2001/XMLSchema-instance";
xmlns:wn0="http://idoox.com/interface";
xmlns:wn1="http://systinet.com/soap-jta/";
xmlns:wn2="http://systinet.com/wsdl/com/cexp/ws/test/";>
            <e:Body>
                <wn2:getPersonResponse
xmlns:wn2="http://systinet.com/wsdl/com/cexp/ws/test/";>
                    <wn2:response i:type="wn2:Person">
                        <wn2:description i:type="d:string">Desktop
customizer</wn2:description>
                        <wn2:firstName
i:type="d:string">Jonathan</wn2:firstName><wn2:lastName
i:type="d:string">Edwards</wn2:lastName>
                    </wn2:response>
                </wn2:getPersonResponse>
            </e:Body>
        </e:Envelope>
    </soap:Body>
</soap:Envelope>

As you can see, the output from the SaajComponent is being re-wrapped by the
HttpSoapConnector in another SoapEnvelope. Is this the expected behavior?

/jonathan

> -----Original Message-----
> From: Guillaume Nodet [mailto:[EMAIL PROTECTED]
> Sent: Monday, December 19, 2005 1:34 PM
> To: [email protected]
> Subject: Re: [servicemix-user] Problems invoking a web 
> service with SOAP
> 
> 
> You should try using the HttpSoapConnector instead of the 
> HttpConnector 
> + XSLT transformer.
> The HttpSoapConnector uses a DOM representation to extract 
> the element 
> in the Body tag, so
> there should be no parsing errors.
> 
> Cheers,
> Guillaume Nodet
> 
> [EMAIL PROTECTED] wrote:
> 
> >Help!
> >
> >I have run in to a slight problem with an exchange that I 
> have set up within
> >ServiceMix. The set up is as follows:
> >
> >Soap Client -> HttpConnector -> ChainedComponent -> (XSLT to 
> remove SOAP
> >body -> SaajComponent -> SOAP Web Service)
> >
> >This operation is synchronous, and works on simple XML where 
> there are no
> >complex namespaces in the XML. Ths following request, 
> however, does not
> >function as expected:
> >
> ><?xml version="1.0" encoding="UTF-8"?>.
> ><e:Envelope xmlns:e="http://schemas.xmlsoap.org/soap/envelope/";
> >xmlns:d="http://www.w3.org/2001/XMLSchema";
> >xmlns:i="http://www.w3.org/2001/XMLSchema-instance";
> >xmlns:wn0="http://systinet.com/xsd/SchemaTypes/";
> >xmlns:wn1="http://systinet.com/wsdl/com/cexp/coe/bob/ws/customer/";
> >xmlns:wn2="http://systinet.com/soap-jta/";
> >xmlns:wn3="http://systinet.com/wsdl/com/cexp/coe/bob/services
> /order/pojo/">
> >  <e:Body>
> >    <wn1:getCustomerInfo>
> >      <wn1:userId i:type="d:string">akayali</wn1:userId>
> >    </wn1:getCustomerInfo>
> >  </e:Body>
> ></e:Envelope>
> >
> >As you can see, there is an implicit namespace reference 
> within the "i:type"
> >field, that is "string" has the namespace "d" associated 
> with it. The simple
> >XSLT body extraction does not capture any of the namespace 
> information, as
> >it is located within the Envelope declaration. The Saaj 
> components tries to
> >deal with this, and does a noble job, that results in this XML:
> >
> ><SOAP-ENV:Envelope
> >xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/";>
> >  <SOAP-ENV:Header/>
> >  <SOAP-ENV:Body>
> >    <wn1:getCustomerInfo
> >xmlns:wn1="http://systinet.com/wsdl/com/cexp/coe/bob/ws/customer/";>.
> >      <wn1:userId xmlns:i="http://www.w3.org/2001/XMLSchema-instance";
> >i:type="d:string">akayali</wn1:userId>.
> >    </wn1:getCustomerInfo>
> >  </SOAP-ENV:Body>
> ></SOAP-ENV:Envelope> 
> >
> >As you can see, the Saaj component determines that the 
> namespace "i" must be
> >declared, but because "d" is implied only within the value 
> for the type
> >field, the Saaj component does not declare it (I assume that 
> it does not
> >introspect the value fields at all). Because "d" is not 
> present in the SOAP
> >request that is passed to the SOAP web service, the service throws an
> >exception while trying to deserialize/parse.
> >
> >I thought that I could work around this, and utilize the 
> HttpSoapConnector
> >and HttpSoapInvoker components, but I fear that these will 
> suffer from the
> >same issues. Moreover, I don't think that the 
> HttpSoapInvoker is setting up
> >the Http header information correctly for a Soap service 
> invocation (there
> >is no SoapAction specified at all, and the content-type is 
> text/html),
> >resulting in a 400 response. Is this the expected behavior of
> >HttpSoapInvoker?
> >
> >I am thinking about writing a custom XSL to extract the 
> namespaces from the
> >incoming message and place them in the first node of the 
> body, but I am not
> >sure if this is feasible with XSL (that is, can you access 
> the namespace in
> >XSL and treat it like any other attribute?).
> >
> >Any help is welcome, including other components within 
> ServiceMix that might
> >work.
> >
> >regards,
> >/jonathan
> >
> >
> >
> >
> >  
> >
> 

Reply via email to