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 bu...@apache.org on 2003/03/22 01:43:40 UTC
DO NOT REPLY [Bug 18242] New: -
Document Literal WSDL Processing - maxOccurs="unbounded"
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=18242>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND
INSERTED IN THE BUG DATABASE.
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=18242
Document Literal WSDL Processing - maxOccurs="unbounded"
Summary: Document Literal WSDL Processing - maxOccurs="unbounded"
Product: Axis
Version: current (nightly)
Platform: Other
OS/Version: Other
Status: NEW
Severity: Normal
Priority: Other
Component: WSDL processing
AssignedTo: axis-dev@ws.apache.org
ReportedBy: mike_herrick@mentor.com
Axis creates methods like:
public void setNameofComplexType(int i, samples.pubsub.Message value) {
this.message[i] = value;
}
for elements that reference complexTypes and set maxOccurs"unbounded".
If this method is used, at runtime, a NullPointer is generated because
internally, the array (this.message[]) is not dimensioned.
I am attaching a WSDL, an example of one of the classes in question and a basic
impl of the web service that attempts to use this method.
## WSDL ##
<?xml version="1.0" encoding="UTF-8"?>
<definitions name="PubSubService"
targetNamespace="http://soapinterop.org/WSDLInteropTestDocLit"
xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:SOAP-
ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns="http://soapinterop.org/WSDLInteropTestDocLit"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsd1="http://soapinterop.org/xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<types>
<schema targetNamespace="http://soapinterop.org/xsd"
xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
elementFormDefault="qualified">
<complexType name="Message">
<sequence>
<element name="Id" type="xsd:int"/>
<element name="Text" type="xsd:string"/>
</sequence>
</complexType>
<complexType name="MessageAttribute">
<sequence>
<element name="Key" type="xsd:string"/>
<element name="Value" type="xsd:string"/>
</sequence>
</complexType>
<complexType name="PubSubStructure">
<sequence>
<element name="TopicName" type="xsd:string"/>
<element name="MessageAttribute" type="xsd1:MessageAttribute"
maxOccurs="unbounded"/>
<element name="Payload" type="xsd:string"/>
</sequence>
</complexType>
<complexType name="CmdResponse">
<sequence>
<element name="CmdStatus" type="xsd:int"/>
<element name="Message" type="xsd1:Message" maxOccurs="unbounded"/>
</sequence>
</complexType>
<!-- mjh start -->
<element name="PubSubStructure" type="xsd1:PubSubStructure"/>
<element name="CmdResponse" type="xsd1:CmdResponse"/>
<!-- mjh stop -->
</schema>
</types>
<!-- mjh start -->
<message name="pubSub">
<part element="xsd1:PubSubStructure" name="a"/>
</message>
<message name="pubSubResponse">
<part element="xsd1:CmdResponse" name="result"/>
</message>
<!-- mjh stop -->
<portType name="PubSubServicePortType">
<!-- mjh start -->
<operation name="publishEvent">
<input message="tns:pubSub" name="pubSub"/>
<output message="tns:pubSubResponse" name="pubSubResponse"/>
</operation>
<!-- mjh stop -->
</portType>
<binding name="PubSubServicePortBinding" type="tns:PubSubServicePortType">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>
<!-- mjh start -->
<operation name="publishEvent">
<soap:operation soapAction="http://soapinterop.org/" style="document"/>
<input name="pubSub">
<soap:body namespace="http://soapinterop.org/WSDLInteropTestDocLit"
use="literal"/>
</input>
<output name="pubSubResponse">
<soap:body namespace="http://soapinterop.org/WSDLInteropTestDocLit"
use="literal"/>
</output>
</operation>
<!-- mjh stop -->
</binding>
<service name="PubSubService">
<port binding="tns:PubSubServicePortBinding" name="PubSubService">
<soap:address
location="http://mssoapinterop.org/stkv3/wsdl/interopTestDocLit.wsdl"/>
</port>
</service>
</definitions>
## Axis Generated Class ##
/**
* CmdResponse.java
*
* This file was auto-generated from WSDL
* by the Apache Axis WSDL2Java emitter.
*/
package samples.pubsub;
public class CmdResponse implements java.io.Serializable {
private java.lang.String cmdStatus;
private samples.pubsub.Message[] message; // ##### < -- The problem
public CmdResponse() {
}
public java.lang.String getCmdStatus() {
return cmdStatus;
}
public void setCmdStatus(java.lang.String cmdStatus) {
this.cmdStatus = cmdStatus;
}
public samples.pubsub.Message[] getMessage() {
return message;
}
public void setMessage(samples.pubsub.Message[] message) {
this.message = message;
}
public samples.pubsub.Message getMessage(int i) {
return message[i];
}
public void setMessage(int i, samples.pubsub.Message value) {
this.message[i] = value;
}
private java.lang.Object __equalsCalc = null;
public synchronized boolean equals(java.lang.Object obj) {
if (!(obj instanceof CmdResponse)) return false;
CmdResponse other = (CmdResponse) obj;
if (obj == null) return false;
if (this == obj) return true;
if (__equalsCalc != null) {
return (__equalsCalc == obj);
}
__equalsCalc = obj;
boolean _equals;
_equals = true &&
((this.cmdStatus==null && other.getCmdStatus()==null) ||
(this.cmdStatus!=null &&
this.cmdStatus.equals(other.getCmdStatus()))) &&
((this.message==null && other.getMessage()==null) ||
(this.message!=null &&
java.util.Arrays.equals(this.message, other.getMessage())));
__equalsCalc = null;
return _equals;
}
private boolean __hashCodeCalc = false;
public synchronized int hashCode() {
if (__hashCodeCalc) {
return 0;
}
__hashCodeCalc = true;
int _hashCode = 1;
if (getCmdStatus() != null) {
_hashCode += getCmdStatus().hashCode();
}
if (getMessage() != null) {
for (int i=0;
i<java.lang.reflect.Array.getLength(getMessage());
i++) {
java.lang.Object obj = java.lang.reflect.Array.get(getMessage
(), i);
if (obj != null &&
!obj.getClass().isArray()) {
_hashCode += obj.hashCode();
}
}
}
__hashCodeCalc = false;
return _hashCode;
}
// Type metadata
private static org.apache.axis.description.TypeDesc typeDesc =
new org.apache.axis.description.TypeDesc(CmdResponse.class);
static {
typeDesc.setXmlType(new javax.xml.namespace.QName
("http://soapinterop.org/xsd", "CmdResponse"));
org.apache.axis.description.ElementDesc elemField = new
org.apache.axis.description.ElementDesc();
elemField.setFieldName("cmdStatus");
elemField.setXmlName(new javax.xml.namespace.QName
("http://soapinterop.org/xsd", "CmdStatus"));
elemField.setXmlType(new javax.xml.namespace.QName
("http://www.w3.org/2001/XMLSchema", "string"));
typeDesc.addFieldDesc(elemField);
elemField = new org.apache.axis.description.ElementDesc();
elemField.setFieldName("message");
elemField.setXmlName(new javax.xml.namespace.QName
("http://soapinterop.org/xsd", "Message"));
elemField.setXmlType(new javax.xml.namespace.QName
("http://soapinterop.org/xsd", "Message"));
typeDesc.addFieldDesc(elemField);
}
/**
* Return type metadata object
*/
public static org.apache.axis.description.TypeDesc getTypeDesc() {
return typeDesc;
}
/**
* Get Custom Serializer
*/
public static org.apache.axis.encoding.Serializer getSerializer(
java.lang.String mechType,
java.lang.Class _javaType,
javax.xml.namespace.QName _xmlType) {
return
new org.apache.axis.encoding.ser.BeanSerializer(
_javaType, _xmlType, typeDesc);
}
/**
* Get Custom Deserializer
*/
public static org.apache.axis.encoding.Deserializer getDeserializer(
java.lang.String mechType,
java.lang.Class _javaType,
javax.xml.namespace.QName _xmlType) {
return
new org.apache.axis.encoding.ser.BeanDeserializer(
_javaType, _xmlType, typeDesc);
}
}
## Basic Web Service Impl ##
/**
* PubSubServicePortBindingImpl.java
*
* This file was auto-generated from WSDL
* by the Apache Axis WSDL2Java emitter.
*/
package samples.pubsub;
public class PubSubServicePortBindingImpl implements
samples.pubsub.PubSubServicePortType{
public samples.pubsub.CmdResponse publishEvent
(samples.pubsub.PubSubStructure a) throws java.rmi.RemoteException {
System.out.println("the PubSubStructure"+a);
CmdResponse resp = new CmdResponse();
resp.setCmdStatus("2");
Message msg1 = new Message();
msg1.setId(1001);
msg1.setText("You did not specify the topic name");
resp.setMessage(0, msg1); // ##### < --- Where it chokes
Message msg2 = new Message();
msg2.setId(2002);
msg2.setText("You did not specify any XML");
resp.setMessage(1, msg2);
return resp;
}
}