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 "Mario Hercog (JIRA)" <ji...@apache.org> on 2013/01/29 11:51:14 UTC

[jira] [Commented] (AXIS2-5473) System hangs (cpu 100%) after sending a corrupt soap message

    [ https://issues.apache.org/jira/browse/AXIS2-5473?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13565277#comment-13565277 ] 

Mario Hercog commented on AXIS2-5473:
-------------------------------------

Problem is in the adb (default databinding method) generated part of the code.

public static <Type> parse(javax.xml.stream.XMLStreamReader reader) method generates the following endless loop:
while(!reader.isEndElement()) {
  if (reader.isStartElement() ){
    if (reader.isStartElement() && new javax.xml.namespace.QName("URI","choice1").equals(reader.getName())){
      reader.next();
    }  // End of if for expected property start element
    else if (reader.isStartElement() && new javax.xml.namespace.QName("URI","choice2").equals(reader.getName())){
      reader.next();
    }  // End of if for expected property start element
  } else {
    reader.next();
  }
}  // end of while loop

                
> System hangs (cpu 100%) after sending a corrupt soap message
> ------------------------------------------------------------
>
>                 Key: AXIS2-5473
>                 URL: https://issues.apache.org/jira/browse/AXIS2-5473
>             Project: Axis2
>          Issue Type: Bug
>    Affects Versions: 1.6.1, 1.6.2
>         Environment: Tomcat 7.0.6
> Java 6.0.27
> Windows 7 (and unix too)
>            Reporter: Robert van Dijk
>            Priority: Critical
>         Attachments: SomeServiceHANG.aar, SomeService.wsdl
>
>
> If I sent (using soapui) an invalid soap message, the cpu usage goes up to 100%. There's no response. After stopping the webserver, the cpu usage goes back to normal.
>  
> There are some choice fields and an optional field in the request. If I mess up one specific closing tag (example: see corrupt soap message below), the problem occurs.
> It's easy to "trigger" this problem.
> - Generate code from wsdl
> - Produce an aar file (no skeleton implementation needed)
> - Deploy the aar (for example locally on your PC)
> - Use soapui for the invalid soap message
> - Windows task manager shows the performance
> Corrupt soap message
> **********************************************************************************************************************************************************
> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v1="http://www.abc.com/Search/v1.0/">
>    <soapenv:Header/>
>    <soapenv:Body>
>       <v1:GetSearchByCriteriaRequest>
>          <UserId>a</UserId>
>          <SearchCriteria>
>             <byMerchantId>
>                <Next>
>                   <TerminalId>b</TerminalId>
>                   <IdentityId>c</IdentityId>
>                </Next>
>             </byMerchantId>
>                                                                                    <-- correct posistion </SearchCriteria> tag
>          <Amount>d</Amount>
>          </SearchCriteria>                                              <-- wrong position </SearchCriteria> tag
>       </v1:GetSearchByCriteriaRequest>
>    </soapenv:Body>
> </soapenv:Envelope>
> WSDL
> **********************************************************************************************************************************************************
> <?xml version="1.0" encoding="UTF-8"?>
> <definitions name="Search" targetNamespace="http://www.abc.com/Search/v1.0/"
> 	xmlns:tns="http://www.abc.com/Search/v1.0/" xmlns:xs="http://www.w3.org/2001/XMLSchema"
> 	xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
> 	xmlns="http://schemas.xmlsoap.org/wsdl/">
> 	<wsdl:types>
> 		<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
> 			targetNamespace="http://www.abc.com/Search/v1.0/">
> 			<xs:simpleType name="TerminalIdType">
> 				<xs:restriction base="xs:string">
> 					<xs:minLength value="1" />
> 					<xs:maxLength value="2" />
> 				</xs:restriction>
> 			</xs:simpleType>
> 			<xs:simpleType name="MerchantIdType">
> 				<xs:restriction base="xs:string">
> 					<xs:minLength value="1" />
> 					<xs:maxLength value="2" />
> 				</xs:restriction>
> 			</xs:simpleType>
> 			<xs:simpleType name="ItemType">
> 				<xs:restriction base="xs:string">
> 					<xs:minLength value="1" />
> 					<xs:maxLength value="2" />
> 				</xs:restriction>
> 			</xs:simpleType>
> 			<xs:simpleType name="AmountType">
> 				<xs:restriction base="xs:string">
> 					<xs:minLength value="1" />
> 					<xs:maxLength value="2" />
> 				</xs:restriction>
> 			</xs:simpleType>
> 			<xs:simpleType name="UserIdType">
> 				<xs:restriction base="xs:string">
> 					<xs:minLength value="1" />
> 					<xs:maxLength value="2" />
> 				</xs:restriction>
> 			</xs:simpleType>
> 			<xs:complexType name="ErrorCodeType">
> 				<xs:sequence>
> 					<xs:element name="ErrCd" type="xs:string" />
> 					<xs:element name="ErrDesc" type="xs:string" />
> 					<xs:element name="ErrDetail" type="xs:string" minOccurs="0" />
> 				</xs:sequence>
> 			</xs:complexType>
> 			<xs:complexType name="SearchDataType">
> 				<xs:sequence>
> 					<xs:element name="TerminalId" type="tns:TerminalIdType" />
> 					<xs:element name="IdentityId" type="tns:ItemType" />
> 				</xs:sequence>
> 			</xs:complexType>
> 			<xs:complexType name="ActionDataType">
> 				<xs:sequence>
> 					<xs:element name="TerminalId" type="tns:TerminalIdType" />
> 					<xs:element name="IdentityId" type="tns:ItemType" />
> 				</xs:sequence>
> 			</xs:complexType>
> 			<xs:complexType name="ContractIdKeyType">
> 				<xs:sequence>
> 					<xs:element name="TerminalId" type="tns:TerminalIdType" />
> 					<xs:element name="IdentityId" type="tns:ItemType" />
> 				</xs:sequence>
> 			</xs:complexType>
> 			<xs:complexType name="ActionKeyType">
> 				<xs:sequence>
> 					<xs:element name="TerminalId" type="tns:TerminalIdType" />
> 					<xs:element name="IdentityId" type="tns:ItemType" />
> 				</xs:sequence>
> 			</xs:complexType>
> 			<xs:complexType name="MerchantIdKeyType">
> 				<xs:sequence>
> 					<xs:element name="MerchantId" type="tns:MerchantIdType" />
> 				</xs:sequence>
> 			</xs:complexType>
> 			<xs:complexType name="GetSearchByCriteriaRequestType">
> 				<xs:sequence>
> 					<xs:element name="UserId" type="tns:UserIdType" />
> 					<xs:element name="SearchCriteria">
> 						<xs:complexType>
> 							<xs:choice>
> 								<xs:element name="byMerchantId">
> 									<xs:complexType>
> 										<xs:choice>
> 											<xs:element name="First" type="tns:MerchantIdKeyType" />
> 											<xs:element name="Next" type="tns:ActionKeyType" />
> 										</xs:choice>
> 									</xs:complexType>
> 								</xs:element>
> 								<xs:element name="byContractId">
> 									<xs:complexType>
> 										<xs:choice>
> 											<xs:element name="First" type="tns:ContractIdKeyType" />
> 											<xs:element name="Next" type="tns:ActionKeyType" />
> 										</xs:choice>
> 									</xs:complexType>
> 								</xs:element>
> 							</xs:choice>
> 						</xs:complexType>
> 					</xs:element>
> 					<xs:element name="Amount" minOccurs="0" maxOccurs="1"
> 						type="tns:AmountType" />
> 				</xs:sequence>
> 			</xs:complexType>
> 			<xs:complexType name="GetSearchByCriteriaResponseType">
> 				<xs:sequence>
> 					<xs:choice>
> 						<xs:element name="ActionData" type="tns:ActionDataType"
> 							minOccurs="0" maxOccurs="unbounded" />
> 						<xs:element name="Err" type="tns:ErrorCodeType" />
> 					</xs:choice>
> 				</xs:sequence>
> 			</xs:complexType>
> 			<xs:complexType name="ActionDataResultType">
> 				<xs:sequence>
> 					<xs:element name="ActionData" type="tns:ActionDataType" />
> 				</xs:sequence>
> 			</xs:complexType>
> 			<xs:element name="GetSearchByCriteriaRequest"
> 				type="tns:GetSearchByCriteriaRequestType" />
> 			<xs:element name="GetSearchByCriteriaResponse"
> 				type="tns:GetSearchByCriteriaResponseType" />
> 		</xsd:schema>
> 	</wsdl:types>
> 	<wsdl:message name="GetSearchByCriteriaRequest">
> 		<wsdl:part name="GetSearchByCriteriaRequest" element="tns:GetSearchByCriteriaRequest" />
> 	</wsdl:message>
> 	<wsdl:message name="GetSearchByCriteriaResponse">
> 		<wsdl:part name="GetSearchByCriteriaResponse"
> 			element="tns:GetSearchByCriteriaResponse" />
> 	</wsdl:message>
> 	<wsdl:portType name="SearchPortType">
> 		<wsdl:operation name="GetSearchByCriteria">
> 			<wsdl:input message="tns:GetSearchByCriteriaRequest" />
> 			<wsdl:output message="tns:GetSearchByCriteriaResponse" />
> 		</wsdl:operation>
> 	</wsdl:portType>
> 	<wsdl:binding name="SearchBinding" type="tns:SearchPortType">
> 		<soap:binding style="document"
> 			transport="http://schemas.xmlsoap.org/soap/http" />
> 		<wsdl:operation name="GetSearchByCriteria">
> 			<soap:operation
> 				soapAction="http://www.abc.com/Search/v1.0/GetSearchByCriteria" />
> 			<wsdl:input>
> 				<soap:body use="literal" />
> 			</wsdl:input>
> 			<wsdl:output>
> 				<soap:body use="literal" />
> 			</wsdl:output>
> 		</wsdl:operation>
> 	</wsdl:binding>
> 	<wsdl:service name="SomeService">
> 		<wsdl:port name="SearchPortType" binding="tns:SearchBinding">
> 			<soap:address location="http://somewhere.on.the.web" />
> 		</wsdl:port>
> 	</wsdl:service>
> </definitions>
> **********************************************************************************************************************************************************

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

---------------------------------------------------------------------
To unsubscribe, e-mail: java-dev-unsubscribe@axis.apache.org
For additional commands, e-mail: java-dev-help@axis.apache.org