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