Owen Thomas wrote:
> 
> The concern is the repeated redeclaration of a namespace prefix
> (xmlns:ns1="...") for every tag (<ns1:string>) that appears in the
> output.
> 

Hi,
I'm also having similar namespace issues.

In my case, I'm using ServiceMix as a proxy presenting a search interface
via a HTTP Consumer SU, then generating stubs from a variety of backend
search web services and calling them through a HTTP Provider SU.

The problem I'm having is that the output sent to the backend search web
services through the provider is incompatible due to the addition of the
namespace prefixes.

For example, this is a working SOAP message that causes the seach service to
return results:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";
xmlns:urn="urn:Foo"> 
<soapenv:Header/> <soapenv:Body> <urn:searchSessionless>
<String_1>test</String_1> 
<arrayOfString_2><value>Dylan</value></arrayOfString_2>
<arrayOfString_3><value>Title</value></arrayOfString_3>
<arrayOfString_4><value>~</value></arrayOfString_4>
<arrayOfString_5><value>MediaUri</value></arrayOfString_5>
<int_6>1</int_6>
<int_7>5</int_7>
</urn:searchSessionless>
</soapenv:Body>
</soapenv:Envelope>


The SOAP message sent by the ServiceMix provider is:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";
xmlns:urn="urn:Foo"> 
<soapenv:Header/> <soapenv:Body> <searchSessionless xmlns="urn:Foo">
<String_1 xmlns="">test</String_1>
<ns2:arrayOfString_2
xmlns:ns2="urn:Foo"><value>dylan</value></ns2:arrayOfString_2>
<ns2:arrayOfString_3
xmlns:ns2="urn:Foo"><value>Title</value></ns2:arrayOfString_3>
<ns2:arrayOfString_4
xmlns:ns2="urn:Foo"><value>~</value></ns2:arrayOfString_4>
<ns2:arrayOfString_5
xmlns:ns2="urn:Foo"><value>MediaUri</value></ns2:arrayOfString_5>
<int_6 xmlns="">1</int_6>
<int_7 xmlns="">5</int_7>
</searchSessionless>
</soapenv:Body>
</soapenv:Envelope> 


The response given by the backend search service I'm calling is:

<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/";
xmlns:xsd="http://www.w3.org/2001/XMLSchema";
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xmlns:enc="http://schemas.xmlsoap.org/soap/encoding/"; xmlns:ns0="urn:Foo">
<env:Body> <env:Fault> 
<faultcode>env:Client</faultcode>
<faultstring>JAXRPCTIE01: caught exception while handling request:
unexpected element name: 
expected=arrayOfString_2, actual={urn:Foo}arrayOfString_2</faultstring>
</env:Fault>
</env:Body>
</env:Envelope>


I've contacted the people that wrote the service, and they say it's an issue
with the tools I'm using. Is there a difference of interpretation between
ServiceMix/XFire's idea of what the WSDL is defining and what the Sun tools
understands it to mean?


The WSDL for the service I'm trying to call is:

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns:tns="urn:Foo" xmlns:ns2="urn:Foo/arrays/java/lang"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema";
        xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"; name="ANON"
        targetNamespace="urn:Foo" xmlns="http://schemas.xmlsoap.org/wsdl/";>
        <types>
                <schema xmlns="http://www.w3.org/2001/XMLSchema";
                        xmlns:tns="urn:Foo/arrays/java/lang"
                        
xmlns:soap11-enc="http://schemas.xmlsoap.org/soap/encoding/";
                        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
                        xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/";
                        elementFormDefault="unqualified" 
attributeFormDefault="unqualified"
                        targetNamespace="urn:Foo/arrays/java/lang">
                        <complexType name="StringArrayArray">
                                <sequence>
                                        <element name="value" 
type="tns:StringArray"
                                                minOccurs="0" 
maxOccurs="unbounded" />
                                </sequence>
                        </complexType>
                        <complexType name="StringArray">
                                <sequence>
                                        <element name="value" type="string" 
nillable="true"
                                                minOccurs="0" 
maxOccurs="unbounded" />
                                </sequence>
                        </complexType>

                        <xsd:complexType name="valueArray">
                                <xsd:sequence>
                                        <xsd:element name="value" 
type="xsd:string"
                                                minOccurs="1" 
maxOccurs="unbounded" />
                                </xsd:sequence>
                        </xsd:complexType>
                </schema>
        </types>

        <message name="ANON_IF_searchSessionless">
                <part name="String_1" type="xsd:string" />
                <part name="arrayOfString_2" type="ns2:StringArray" />
                <part name="arrayOfString_3" type="ns2:StringArray" />
                <part name="arrayOfString_4" type="ns2:StringArray" />
                <part name="arrayOfString_5" type="ns2:StringArray" />
                <part name="int_6" type="xsd:int" />
                <part name="int_7" type="xsd:int" />
        </message>

        <message name="ANON_IF_searchSessionlessResponse">
                <part name="result" type="ns2:StringArrayArray" />
        </message>
        
        <portType name="ANON_IF">
                <operation name="searchSessionless"
                        parameterOrder="String_1 arrayOfString_2 
arrayOfString_3 arrayOfString_4 

arrayOfString_5 int_6 int_7">
                        <input message="tns:ANON_IF_searchSessionless" />
                        <output message="tns:ANON_IF_searchSessionlessResponse" 
/>
                </operation>
        </portType>

        <binding name="ANON_IFBinding" type="tns:ANON_IF">
                <soap:binding transport="http://schemas.xmlsoap.org/soap/http";
                        style="rpc" />
                <operation name="searchSessionless">
                        <soap:operation soapAction="" />
                        <input>
                                <soap:body use="literal" namespace="urn:Foo" />
                        </input>
                        <output>
                                <soap:body use="literal" namespace="urn:Foo" />
                        </output>
                </operation>
        </binding>
        
        <service name="ANON">
                <port name="ANON_IFPort" binding="tns:ANON_IFBinding">
                        <soap:address
                                location="http://anon:7080/ANON/ANON";
                                xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"; />
                </port>
        </service>
</definitions>

Does anyone have any idea why the SOAP messages are getting the prefixes
added to the types?

-- 
View this message in context: 
http://www.nabble.com/Apparent-namespace-problems.-tf3701288s12049.html#a10409118
Sent from the ServiceMix - User mailing list archive at Nabble.com.

Reply via email to