Endless loop then OutOfMemory Exception while parsing <xs:choice minOccurs="0"
maxOccurs="unbounded">
------------------------------------------------------------------------------------------------------
Key: AXIS2-5237
URL: https://issues.apache.org/jira/browse/AXIS2-5237
Project: Axis2
Issue Type: Bug
Components: client-api
Affects Versions: 1.6.1
Environment: XP, Java 6
Reporter: Joachim Unger
The WSDL:
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="http://carin-blg.de/"
xmlns:axis2="http://carin-blg.de/" xmlns:ns="http://carin-blg.de/xmlschema"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/">
<wsdl:types>
<xs:schema elementFormDefault="qualified"
targetNamespace="http://carin-blg.de/xmlschema"
xmlns="http://carin-blg.de/xmlschema"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- Attribute
==================================================== -->
<!-- Attribute name -->
<xs:simpleType name="t_name">
<xs:restriction base="xs:string">
<xs:pattern
value="[a-zA-Z0-9_üöäßÜÖÄ.-]+" />
</xs:restriction>
</xs:simpleType>
<!-- Attribute value -->
<xs:simpleType name="t_value">
<xs:restriction base="xs:string">
</xs:restriction>
</xs:simpleType>
<!-- Attribute type -->
<xs:simpleType name="t_type">
<xs:restriction base="xs:string">
<xs:enumeration value="integer" />
<xs:enumeration value="number" />
<xs:enumeration value="alpha" />
</xs:restriction>
</xs:simpleType>
<!-- typen komplexer Felder
==================================================== -->
<!-- Ein nicht veränderbarer Text -->
<xs:complexType name="t_text">
<xs:sequence>
<xs:element maxOccurs="1" minOccurs="0"
name="dummy" type="xs:string" />
</xs:sequence>
<xs:attribute name="n" type="t_name">
</xs:attribute>
</xs:complexType>
<!-- Ein veränderbarer Text -->
<xs:complexType name="t_textfield">
<xs:sequence>
<xs:element maxOccurs="1" minOccurs="0"
name="dummy" type="xs:string" />
</xs:sequence>
<xs:attribute name="n" type="t_name">
</xs:attribute>
</xs:complexType>
<!-- Ein veränderbares Feld eines Typs -->
<xs:complexType name="t_field">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="n"
type="t_name" use="required" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<!-- Ein veränderbarer Parameter -->
<xs:complexType name="t_parameter">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="n"
type="t_name" use="required" />
<xs:attribute name="val"
type="t_value" use="optional" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="t_requestparameter">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="name"
type="t_name" use="required" />
<xs:attribute name="val"
type="t_value" use="optional" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="t_login">
<xs:all>
<xs:element maxOccurs="1" minOccurs="1"
name="user" type="xs:string" />
<xs:element maxOccurs="1" minOccurs="1"
name="pwd" type="xs:string" />
</xs:all>
</xs:complexType>
<xs:complexType name="header">
<xs:all>
<xs:element maxOccurs="1" minOccurs="1"
name="timestamp" type="xs:dateTime" />
<xs:element maxOccurs="1" minOccurs="0"
name="listmessageid" type="listmessageid" />
<xs:element maxOccurs="1" minOccurs="0"
name="user" type="xs:string" />
<xs:element maxOccurs="1" minOccurs="0"
name="pwd" type="xs:string" />
<xs:element maxOccurs="1" minOccurs="1"
name="address" type="xs:string" />
</xs:all>
</xs:complexType>
<xs:complexType name="listmessageid">
<xs:sequence>
<xs:element maxOccurs="unbounded"
minOccurs="1" name="messageid" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="t_group">
<xs:choice minOccurs="1" maxOccurs="unbounded">
<xs:element minOccurs="1"
maxOccurs="unbounded" name="f" type="t_field" />
<xs:element minOccurs="1"
maxOccurs="unbounded" name="tf" type="t_textfield" />
<xs:element minOccurs="1"
maxOccurs="unbounded" name="t" type="t_text" />
<xs:element minOccurs="1"
maxOccurs="unbounded" name="p" type="t_parameter" />
</xs:choice>
</xs:complexType>
<xs:complexType name="result">
<xs:all>
<xs:element minOccurs="0"
name="errorcode" type="xs:string" />
<xs:element minOccurs="0"
name="errortext" type="xs:string" />
</xs:all>
</xs:complexType>
<xs:element name="request">
<xs:complexType>
<xs:sequence maxOccurs="1"
minOccurs="1">
<xs:element minOccurs="1"
maxOccurs="1" name="header" type="header" />
<xs:element minOccurs="1"
maxOccurs="1" name="operation" type="xs:string" />
<xs:sequence minOccurs="0"
maxOccurs="1">
<xs:element
minOccurs="1" maxOccurs="unbounded" name="parameter" type="t_requestparameter"
/>
</xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="response">
<xs:complexType>
<xs:sequence minOccurs="1"
maxOccurs="1">
<xs:element minOccurs="1"
name="header" type="header" />
<xs:element minOccurs="1"
maxOccurs="1" name="operation" type="xs:string" />
<xs:choice minOccurs="0"
maxOccurs="unbounded">
<xs:element
minOccurs="0" maxOccurs="unbounded" name="f" type="t_field" />
<xs:element
minOccurs="0" maxOccurs="unbounded" name="tf" type="t_textfield" />
<xs:element
minOccurs="0" maxOccurs="unbounded" name="t" type="t_text" />
<xs:element
minOccurs="0" maxOccurs="unbounded" name="p" type="t_parameter" />
<xs:element
minOccurs="0" maxOccurs="unbounded" name="g" type="t_group" />
</xs:choice>
<xs:element minOccurs="0"
maxOccurs="1" name="result" type="result" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
</wsdl:types>
<wsdl:message name="request">
<wsdl:part name="part1" element="ns:request">
</wsdl:part>
</wsdl:message>
<wsdl:message name="response">
<wsdl:part name="part2" element="ns:response">
</wsdl:part>
</wsdl:message>
<wsdl:portType name="TrafficLightServicePortType">
<wsdl:operation name="call">
<wsdl:input message="axis2:request">
</wsdl:input>
<wsdl:output message="axis2:response">
</wsdl:output>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="TrafficLightServiceSOAP11Binding"
type="axis2:TrafficLightServicePortType">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="call">
<soap:operation soapAction="call" style="document" />
<wsdl:input>
<soap:body use="literal"
namespace="http://carin-blg.de/" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal"
namespace="http://carin-blg.de/" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:binding name="TrafficLightServiceSOAP12Binding"
type="axis2:TrafficLightServicePortType">
<soap12:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="call">
<soap12:operation soapAction="call" style="document" />
<wsdl:input>
<soap12:body use="literal"
namespace="http://carin-blg.de/" />
</wsdl:input>
<wsdl:output>
<soap12:body use="literal"
namespace="http://carin-blg.de/" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="TrafficLightService">
<wsdl:port name="TrafficLightServiceSOAP12port"
binding="axis2:TrafficLightServiceSOAP12Binding">
<soap:address
location="http://localhost:9080/axis2/services/TrafficLightService" />
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
The generated Stub (Part):
...
} // End of if for expected property start
element
else{
// A start element we are not expecting
indicates an invalid parameter was passed
throw new
org.apache.axis2.databinding.ADBException("Unexpected subelement " +
reader.getName());
}
while (!reader.isStartElement() &&
!reader.isEndElement()) reader.next();
try{
if (reader.isStartElement() ){
// Process the array and step past its
final element's end.
list3.add(ResponseChoice_type0.Factory.parse(reader));
//loop until we find a
start element that is not part of this array
boolean loopDone3 =
false;
while(!loopDone3){
// Step to next
element event.
while
(!reader.isStartElement() && !reader.isEndElement())
reader.next();
if
(reader.isEndElement()){
//two
continuous end elements means we are exiting the xml structure
loopDone3 =
true;
} else {
list3.add(ResponseChoice_type0.Factory.parse(reader));
}
}
// call the converter
utility to convert and set the array
object.setResponseChoice_type0((ResponseChoice_type0[])
org.apache.axis2.databinding.utils.ConverterUtil.convertToArray(
ResponseChoice_type0.class,
list3));
} // End of if for expected property start
element
else {
}
} catch (java.lang.Exception e) {}
while (!reader.isStartElement() &&
!reader.isEndElement()) reader.next();
if (reader.isStartElement() && new
javax.xml.namespace.QName("http://carin-blg.de/xmlschema","result").equals(reader.getName())){
object.setResult(Result.Factory.parse(reader));
reader.next();
} // End of if for expected property start
element
else {
....
The line
list3.add(ResponseChoice_type0.Factory.parse(reader));
loops indefinte end leads to OutOfMemoryException.
TCPMon inspected Result:
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: application/soap+xml;
action="http://carin-blg.de/TrafficLightServicePortType/callResponse";charset=UTF-8
Transfer-Encoding: chunked
Date: Thu, 02 Feb 2012 17:38:18 GMT
229
<?xml version='1.0' encoding='UTF-8'?>
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
<soapenv:Body>
<ns1:response xmlns:ns1="http://carin-blg.de/xmlschema">
<ns1:header>
<ns1:timestamp>2012-02-02T18:38:18.032+01:00</ns1:timestamp>
<ns1:listmessageid>
<ns1:messageid>2012-02-02T18:38:16.595+0100</ns1:messageid>
</ns1:listmessageid>
<ns1:address>10.10.20.10</ns1:address>
</ns1:header>
<ns1:operation>function</ns1:operation>
<ns1:result>
<ns1:errorcode>0</ns1:errorcode>
<ns1:errortext>No Error</ns1:errortext>
</ns1:result>
</ns1:response>
22
</soapenv:Body>
</soapenv:Envelope>0
Stack Trace:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Unknown Source)
at java.util.Arrays.copyOf(Unknown Source)
at java.util.ArrayList.ensureCapacity(Unknown Source)
at java.util.ArrayList.add(Unknown Source)
at
client.adb.TrafficLightServiceStub$Response$Factory.parse(TrafficLightServiceStub.java:1072)
at
client.adb.TrafficLightServiceStub.fromOM(TrafficLightServiceStub.java:10111)
at
client.adb.TrafficLightServiceStub.call(TrafficLightServiceStub.java:193)
at client.adb.ADBClient.call(ADBClient.java:39)
at client.adb.ADBClient.main(ADBClient.java:10)
Environment: XP, AXIS2 1.6.1, Tomcat 7
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]