[
https://issues.apache.org/jira/browse/AXIS-2250?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12833718#action_12833718
]
Ragulan commented on AXIS-2250:
-------------------------------
We have fixed this issue by the following fix:
Modifed the code to get the childNodeName of the NodeList from the
server-config.wsdd as follows:
My Sample Code:
server-config.wsdd:
<typeMapping
xmlns:ns="java:service"
qname="ns:subPackage" // decides the childNode name of the NodeList
type="java:service.Package"
serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
/>
<arrayMapping
xmlns:ns="java:service"
qname="ns:packages"
type="java:service.Package[]"
serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
/>
Wsdl:
<wsdl:types>
<schema targetNamespace="java:service" xmlns="http://www.w3.org/2001/XMLSchema">
<import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
<complexType name="service">
<sequence>
//element name is the parentNode's Name of the NodeList (this
name is from java class) and type is from wsdd file
<element name="packages" nillable="true"
type="tns1:packages"/>
</sequence>
</complexType>
<complexType name="packages">
<complexContent>
<restriction base="soapenc:Array">
//arrayType is from wsdd file
<attribute ref="soapenc:arrayType"
wsdl:arrayType="tns1:subPackage[]"/>
</restriction>
</complexContent>
</complexType>
<complexType name="subPackage"> // element name is the childNode's Name in the
NodeList (this name is from wsdd file)
<sequence>
// element name is the inner node of the childNode (this name
is from java class)
<element name="packageName" nillable="true"
type="soapenc:string"/>
</sequence>
</complexType>
</schema>
</wsdl:types>
Response:
<firstMethodReturn xmlns:ns2="java:service" xsi:type="ns2:service">
<packages xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xsi:type="soapenc:Array" soapenc:arrayType="ns2:subPackage[2]">
<subPackage xsi:type="ns2:subPackage">
<packageName xsi:type="soapenc:string">First</packageName>
</subPackage>
<subPackage xsi:type="ns2:subPackage">
<packageName xsi:type="soapenc:string">Second</packageName>
</subPackage>
</packages>
</firstMethodReturn>
Changes Needs to be done:
1) Change the qname in the typeMapping of the childNode of the NodeList. This
qname is used as the childNode's Name in the NodeList.
for e.g:
In the above sample .wsdd file, i ve changed the qname in the
typeMapping as qname="ns:subPackage".
So, the childNode's Name in the NodeList will be "subPackage".
2) In org.apache.axis.encoding.ser.ArraySerializer Class, include the below
code marked in blue.
if (!maxOccursUsage) {
serializeAttr = null; // since we are putting them here
context.startElement(name, attributes);
if (itemQName != null)
elementName = itemQName;
else if(componentQName != null)
elementName = componentQName;
else
elementName = new QName(name.getNamespaceURI(),
componentTypeQName.getLocalPart());
}
> AXIS array serialization: Incorrect element names of items in a list
> --------------------------------------------------------------------
>
> Key: AXIS-2250
> URL: https://issues.apache.org/jira/browse/AXIS-2250
> Project: Axis
> Issue Type: Bug
> Components: Serialization/Deserialization
> Affects Versions: current (nightly)
> Environment: plattform: i386, OS: WinXP Pro, Java: 1.4.2_06
> Reporter: Denis Schlesinger
> Priority: Critical
> Attachments: beans.zip, Post.zip
>
>
> -Web Service deployed as "wrapped/literal"
> The web service returns a custom bean style class which has an array of
> another custom bean style class as a member.
> In the WSDL-file the array of the custom type is being described correctly:
> <complexType name="ArrayOf_tns1_EntityTypeBean">
> <sequence>
> <element maxOccurs="unbounded" minOccurs="0" name="item"
> type="tns1:EntityTypeBean"/>
> </sequence>
> </complexType>
> But when the Java object is being serialized during runtime the array is
> being transfered to a list whose member elements DO NOT have the name "item"
> as expected from the WSDL-file. All members of the list have the same name as
> the list itself:
> <entities>
> <entities>
> ...
> </entities>
> <entities>
> ...
> </entities>
> <entities>
> ...
> </entities>
> </entities>
> But this is expected:
> <entities>
> <item>
> ...
> </item>
> <item>
> ...
> </item>
> <item>
> ...
> </item>
> </entities>
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.