[ 
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]

Reply via email to