You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by "Adam Crume (JIRA)" <ax...@ws.apache.org> on 2007/03/28 16:29:25 UTC

[jira] Updated: (AXIS-1529) Bad namespaces in serialized beans in doc/literal

     [ https://issues.apache.org/jira/browse/AXIS-1529?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Adam Crume updated AXIS-1529:
-----------------------------

    Attachment: axis-patch2.txt

I'm very grateful for the patch that was supplied!  I'm not familiar enough with the Axis source code to fix the issue myself.  However, the patch had a couple of issues, so I attached a patch that should be applied after the first one to fix those issues.
1.  Bean property names were not always capitalized correctly.  See the Javadoc for java.beans.Introspector.decapitalize(String).  I modified the code to use org.apache.axis.utils.BeanUtils instead of doing it manually.
2.  There was a line in org.apache.axis.encoding.SerializationContext.serializeActual that was using == to compare strings.  I changed it to "".equals(blah).  I didn't see a bug caused by this, but I wanted to be proactive.


> Bad namespaces in serialized beans in doc/literal
> -------------------------------------------------
>
>                 Key: AXIS-1529
>                 URL: https://issues.apache.org/jira/browse/AXIS-1529
>             Project: Axis
>          Issue Type: Bug
>          Components: Serialization/Deserialization
>    Affects Versions: current (nightly)
>         Environment: win xp, jdk 1.4.2, jboss 3.2.5
>            Reporter: Tudor Teusan
>         Attachments: axis-patch.txt, axis-patch2.txt, axis-patched.jar
>
>
> 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.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: axis-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-dev-help@ws.apache.org