I am trying to run slightly modified version of Account web service sample.
The difference in the sample I am running is, input to the service is
DataObject
The snapshot of Tuscancy code I have corresponds to the tag
java-stable-20060304.

AxiomHelper.toDataObject((TypeHelper typeHelper, OMElement omElement)
function hangs at
omElement.serialize(pos). Problem seems to be the size of the DataObject in
the SOAP Body.

Thread dump

 "WebContainer : 0" (TID:0x147EAD00, sys_thread_t:0x1442C034, state:CW,
native ID:0x000001D8) prio=5
      at java/lang/Object.wait(Native Method)
      at java/lang/Object.wait(Object.java:231(Compiled Code))
      at java/io/PipedInputStream.awaitSpace(PipedInputStream.java:226)
      at java/io/PipedInputStream.receive(PipedInputStream.java:183)
      at java/io/PipedOutputStream.write(PipedOutputStream.java:146)
      at sun/nio/cs/StreamEncoder$ConverterSE.implFlushBuffer(
StreamEncoder.java:283(Compiled Code))
      at sun/nio/cs/StreamEncoder$ConverterSE.implFlush(StreamEncoder.java
:289)
      at sun/nio/cs/StreamEncoder.flush(StreamEncoder.java:200)
      at java/io/OutputStreamWriter.flush(OutputStreamWriter.java:236)
      at com/ctc/wstx/sw/BaseStreamWriter.flushStream(BaseStreamWriter.java
:1351)
      at com/ctc/wstx/sw/BaseStreamWriter.safeFlushStream(
BaseStreamWriter.java:1358)
      at com/ctc/wstx/sw/BaseStreamWriter.flush(BaseStreamWriter.java:309)
      at org/apache/axis2/om/impl/OMOutputImpl.flush(OMOutputImpl.java:78)
      at org/apache/axis2/om/impl/llom/OMNodeImpl.serialize(OMNodeImpl.java
:298)
      at org/apache/axis2/om/impl/llom/OMNodeImpl.serialize(OMNodeImpl.java
:338)
      at org/apache/tuscany/binding/axis2/util/AxiomHelper.toDataObject(
AxiomHelper.java:146)


Here is the  WSDL

<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/";
                 xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/";
                 xmlns:tns="http://www.bigbank.com/Account/";
                 xmlns:xsd="http://www.w3.org/2001/XMLSchema";
                 xmlns:account="http://www.bigbank.com/Account/";
                 targetNamespace="http://www.bigbank.com/Account/";
                 name="AccountService">

<wsdl:types>
  <xsd:schema targetNamespace="http://www.bigbank.com/Account/";
               xmlns:account="http://www.bigbank.com/Account/";
               xmlns:xsd="http://www.w3.org/2001/XMLSchema";
        xmlns:sdojava="commonj.sdo/java"
 sdojava:package="org.apache.tuscany.samples.bigbank.account">

   <xsd:element name="invalidRequestFault">
       <xsd:complexType>
               <xsd:sequence>
                   <xsd:element name="message" type="xsd:string"/>
               </xsd:sequence>
       </xsd:complexType>
   </xsd:element>

   <xsd:element name="getAccountReport">
       <xsd:complexType>
           <xsd:sequence>
               <xsd:element name="customerID"
type="account:AccountReport"/>
           </xsd:sequence>
       </xsd:complexType>
   </xsd:element>
   <xsd:element name="getAccountReportResponse">
       <xsd:complexType>
           <xsd:sequence>
               <xsd:element name="accountReport"
type="account:AccountReport"/>
           </xsd:sequence>
       </xsd:complexType>
   </xsd:element>

   <xsd:complexType name="AccountReport">
       <xsd:sequence>
           <xsd:element name="accountSummaries"
type="account:AccountSummary" maxOccurs="unbounded"/>
       </xsd:sequence>
   </xsd:complexType>

   <xsd:complexType name="AccountSummary">
     <xsd:sequence>
       <xsd:element name="accountType" type="xsd:string"/>
       <xsd:element name="accountNumber" type="xsd:string"/>
       <xsd:element name="balance" type="xsd:float"/>
     </xsd:sequence>
   </xsd:complexType>
 </xsd:schema>

</wsdl:types>

   <wsdl:message name="getAccountReportRequest">
       <wsdl:part name="getAccountReportRequest"
element="account:getAccountReport"/>
   </wsdl:message>

   <wsdl:message name="getAccountReportResponse">
       <wsdl:part name="getAccountReportResponse"
element="account:getAccountReportResponse"/>
   </wsdl:message>

   <wsdl:message name="invalidRequestFaultMsg">
       <wsdl:part name="parameters" element="tns:invalidRequestFault"/>
   </wsdl:message>

   <wsdl:portType name="AccountService">

       <wsdl:operation name="getAccountReport">
           <wsdl:input message="tns:getAccountReportRequest"/>
           <wsdl:output message="tns:getAccountReportResponse"/>
           <wsdl:fault message="tns:invalidRequestFaultMsg"
name="InvalidRequestFault"/>
       </wsdl:operation>

   </wsdl:portType>

   <wsdl:binding name="AccountServiceSOAP" type="tns:AccountService">
       <soap:binding style="document" transport="
http://schemas.xmlsoap.org/soap/http"/>

       <wsdl:operation name="getAccountReport">
           <soap:operation
                   soapAction="
http://www.bigbank.com/Account/getAccountReport"/>
           <wsdl:input>
               <soap:body use="literal"/>
           </wsdl:input>
           <wsdl:output>
               <soap:body use="literal"/>
           </wsdl:output>
           <wsdl:fault name="InvalidRequestFault">
               <soap:fault name="InvalidRequestFault" use="literal"/>
           </wsdl:fault>
       </wsdl:operation>

   </wsdl:binding>

   <wsdl:service name="AccountService">
       <wsdl:port binding="tns:AccountServiceSOAP"
                  name="AccountServiceSOAP">
           <soap:address location="
http://localhost:9080/static/services/AccountService"/>
       </wsdl:port>
   </wsdl:service>

</wsdl:definitions>

Here is the soap request for which thread hangs in axis2 code

<SOAP-ENV:Envelope xmlns:q0="http://www.bigbank.com/Account/";
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"; xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance"; xmlns:xsd="
http://www.w3.org/2001/XMLSchema";>
<SOAP-ENV:Body>
 <q0:getAccountReport>
  <customerID>
   <accountSummaries>
    <accountType>savings</accountType>
    <accountNumber>1</accountNumber>
    <balance>100</balance>
   </accountSummaries>
   <accountSummaries>
    <accountType>checking</accountType>
    <accountNumber>2</accountNumber>
    <balance>200</balance>
   </accountSummaries>
   <accountSummaries>
    <accountType>portfolio</accountType>
    <accountNumber>3</accountNumber>
    <balance>400</balance>
   </accountSummaries>
   <accountSummaries>
    <accountType>managed</accountType>
    <accountNumber>4</accountNumber>
    <balance>500</balance>
   </accountSummaries>
   <accountSummaries>
    <accountType>report</accountType>
    <accountNumber>5</accountNumber>
    <balance>600</balance>
   </accountSummaries>
  </customerID>
 </q0:getAccountReport>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>


here is the soap request where the thread doesn't hang. (only difference is,
just removed one of the accountSummaries)

<SOAP-ENV:Envelope xmlns:q0="http://www.bigbank.com/Account/";
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"; xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance"; xmlns:xsd="
http://www.w3.org/2001/XMLSchema";>
<SOAP-ENV:Body>
 <q0:getAccountReport>
  <customerID>
   <accountSummaries>
    <accountType>checking</accountType>
    <accountNumber>2</accountNumber>
    <balance>200</balance>
   </accountSummaries>
   <accountSummaries>
    <accountType>checking</accountType>
    <accountNumber>2</accountNumber>
    <balance>200</balance>
   </accountSummaries>
   <accountSummaries>
    <accountType>checking</accountType>
    <accountNumber>2</accountNumber>
    <balance>200</balance>
   </accountSummaries>
   <accountSummaries>
    <accountType>checking</accountType>
    <accountNumber>2</accountNumber>
    <balance>200</balance>
   </accountSummaries>
  </customerID>
 </q0:getAccountReport>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
In the debugger, I have verified OMElement passed to toDataObject() function
and it looks correct.

Any help is appreciated

Regards
Rashmi

Reply via email to