[
https://issues.apache.org/jira/browse/AXIS2-5237?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13996412#comment-13996412
]
Sergei Angelov commented on AXIS2-5237:
---------------------------------------
not nice "feature". I've got similar issue. Server crashed and jvm have to be
killed. I identified that the issue occurs if the choice in request does not
contain any of defined elements or if there choice in choice like
<choice><choice><element1/><element2/></choice><choice><element3/><element4/></choice>
and the second choice is filled (ex. element3) . So the parsing for first
choice will be endless. I do not know why for the choice the loop is created
in code, since choice expects just one element. I could fix it in the generated
code directly. But now I have to look how to fix it in template. It’s a bit
nightmare for me.
> 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 was sent by Atlassian JIRA
(v6.2#6252)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]