[ http://issues.apache.org/jira/browse/AXIS-1529?page=all ]

Per Salomonsson updated AXIS-1529:
----------------------------------

    Attachment: axis-patch.txt

I have attached a patch (and a patched lib) compatible with 1.4.0 
release/branch.
The problem we had was when using document/literal wrapped complex types were 
not serialized correctly (missing namespaces). I have also included a fix for 
using arrays. them "item" tag is now used (to match the xml schema in the WSDL 
file), and with the correct namespace. The array-fix is taken more or less from 
another bugreport that was reported here at JIRA.

Please let me know if it works for you to.
Here is how we have used it:

1. Write the java classes that should represent the web service interface - 
including your java beans.
2. generate deploy/undeploy wsdd's using ant task "axis-wsdl2java" 
(DOCUMENT/LITERAL WRAPPED)
3. startup the server and publish the services.

The patch has only been used/tested with axis on the serverside, on the client 
side we have used 2 other client implementations to test/verify.


> Bad namespaces in serialized beans in doc/literal
> -------------------------------------------------
>
>          Key: AXIS-1529
>          URL: http://issues.apache.org/jira/browse/AXIS-1529
>      Project: Apache Axis
>         Type: Bug

>   Components: Serialization/Deserialization
>     Versions: current (nightly)
>  Environment: win xp, jdk 1.4.2, jboss 3.2.5
>     Reporter: Tudor Teusan
>  Attachments: axis-patch.txt
>
> It seems that AXIS (latest CVS) doesn't serialize properly complex
> objects (beans) when in doc/literal.
> 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" ( left out for 
> brevity).
> 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 and the types section in the auto-generated wsdl 
> 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 
> specified 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.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to