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 ax...@ws.apache.org on 2004/10/08 07:39:52 UTC
[jira] Commented: (AXIS-1437) Wrong behavior on
The following comment has been added to this issue:
Author: Matthias Germann
Created: Thu, 7 Oct 2004 10:37 PM
Body:
I'm having the same problem with AXIS 1.2 RC1.
---------------------------------------------------------------------
View this comment:
http://issues.apache.org/jira/browse/AXIS-1437?page=comments#action_53825
---------------------------------------------------------------------
View the issue:
http://issues.apache.org/jira/browse/AXIS-1437
Here is an overview of the issue:
---------------------------------------------------------------------
Key: AXIS-1437
Summary: Wrong behavior on <xsd:choice>
Type: Bug
Status: Unassigned
Priority: Major
Project: Axis
Components:
Serialization/Deserialization
Versions:
1.1
Assignee:
Reporter: easyproglife
Created: Wed, 7 Jul 2004 1:39 AM
Updated: Thu, 7 Oct 2004 10:37 PM
Environment: Win2000/PC/JDK1.4
Description:
I see Axis client wrong behavior on serializing a message built from schema with xsd:choice.
I have XML schema with <xsd:choice>:
<xsd:complexType name="getSubscriberRequest">
<xsd:choice minOccurs="0">
<xsd:element name="customerID" type="cc:customer"/>
<xsd:element name="phoneNumber" type="cc:serviceDetails"/>
<xsd:element name="status" type="cc:serviceStatusEnum"/>
<xsd:element name="phoneType" type="cc:phoneTypeEnum"/>
</xsd:choice>
</xsd:complexType>
(The business logic idea is to request some data according to one and only one parameter (i.e. status, phoneNumber, etc.)).
In the client code, I do the following:
GetSubscriberRequest req = new GetSubscriberRequest();
req.setPhoneNumber(new ServiceDetails("9412345678"));
GetSubscriberResponse res = stub.getSubscriber(req);
The XML message over the wire is:
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<getSubscriberRequest xmlns="http://www.xxx.com/yyy">
<customerID xsi:nil="true"/>
<phoneNumber>941234567</phoneNumber>
<status xsi:nil="true"/>
<phoneType xsi:nil="true"/>
</getSubscriberRequest>
</soapenv:Body>
</soapenv:Envelope>
I am using Castor at the server side, and it fails on validation:
ValidationException: The element 'phoneNumber' cannot exist at the same time that element 'customerID' also exists.;
- location of error: XPATH: getSubscriberRequest
Castor behavior seems ok to me, since xsd:choice by definition should allow ONLY ONE ELEMENT of its subelements.
The wrong behavior, for my opinion, is in Axis. It produces elements with xsi:nil="true" (in xsd:choice) instead of not generating them at all.
Looking at the source code, I see that org.apache.axis.encoding.SerializationContext.serialize() (line 115) get 6 parameters. The one before the last one is "sendNull". If it is false, the Axis behavior would be perfect for my situation!
The problem is the all the built-it serializers (i.e. BeanSerializer, line 238) sends hard-coded "true" for this parameter, hence force Axis to generate an empty element with xsi:nil="true", that is invalid and cause Castor validation to fail.
For my opinion, there should be a configurable parameter the controls the behavior of "sendNull" parameter in SerializationContext.
I think that on xsd:choice, the default behavior must be to ommit the null elements at all!
---------------------------------------------------------------------
JIRA INFORMATION:
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
If you want more information on JIRA, or have a bug to report see:
http://www.atlassian.com/software/jira