More precisely it doesn't handle as it should a SOAP body with multiple namespaces, as shown in the following exemple :
(I've come upon this problem trying to return a tree structure from a web service)
The service is a TreeProvider defined as
---
class TreeProvider {
private Node root;
... public Node getTree(){ return root; }
...
}
---
Node being a very simple bean with two attributes : id and name.
---
class Node {
private String id, name;
public string getName(){ return name; }
...
}
---Node and TreeProvider are in 2 different packages "com.knowesis.ws.TreeProvider" and "com.knowesis.tree.Node" (which I've left out for readability).
In the constructor of TreeProvider the root node is initilized as id="root", name="root".
The deploy.wsdd is :
---
...
<service name="TreeProvider" style="document" use="literal"> <namespace>urn:AthanorWS:ws</namespace> <parameter name="className" value="com.knowesis.ws.TreeProvider"/>
<parameter name="allowedMethods" value="getTree"/>
<beanMapping xmlns:data="urn:AthanorWS:data" qname="data:Node" languageSpecificType="java:com.knowesis.tree.Node"/>
</service> ... ---
the service gets deployed ok (in a jboss 3.2.5 environment, but that's less important)
and the types section in the wsdl (auto-generated by AXIS) looks like this :
---
...
<wsdl:types>
<schema elementFormDefault="qualified"
targetNamespace="urn:AthanorWS:data"
xmlns="http://www.w3.org/2001/XMLSchema">
<complexType name="Node">
<sequence>
<element name="id" nillable="*true*" type="xsd:string" />
<element name="name" nillable="*true*" type="xsd:string" />
</sequence>
</complexType>
</schema>
<schema elementFormDefault="qualified"
targetNamespace="urn:AthanorWS:ws"
xmlns="http://www.w3.org/2001/XMLSchema"> <import namespace="urn:AthanorWS:data" />
<element name="getTreeReturn" type="tns1:Node" />
</schema>
</wsdl:types>
...
---notice the the two namespaces (and this is how it should be) and the elementFormDefault="qualified" for the two schemas.
A getTree() invocation results in :
---
...
<soapenv:Body>
<getTreeReturn xmlns="urn:AthanorWS:ws">
<id>root</id>
<name>root</name>
</getTreeReturn>
</soapenv:Body>
...
---The contents of the generated body is not valid with respect to the wsdl schemas.
"id" and "root" elements are in the same namespace as "getTreeReturn" (urn:AthanorWS:ws) instead of being in their own "urn:AthanorWS:data" namespace :
<getTreeReturn xmlns="urn:AthanorWS:ws"> <id xmlns="urn:AthanorWS:data">root</id> <name xmlns="urn:AthanorWS:data">root</name> </getTreeReturn>
As a direct consequence a generated .Net client simply refuses to deserialize the response and always returns an empty answer.
Am I doing something awfully wrong or is this a (known) bug in AXIS ?
