You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tuscany.apache.org by Rashmi Hunt <ra...@gmail.com> on 2006/05/22 23:01:11 UTC

Thread hangs in Axis2 binding code

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

Re: Thread hangs in Axis2 binding code

Posted by Raymond Feng <en...@gmail.com>.
The piped stream won't be blocked if the buffer is not used up and that's 
why it works for small SOAP messages.

Thanks,
Raymond

----- Original Message ----- 
From: "Rashmi Hunt" <ra...@gmail.com>
To: <tu...@ws.apache.org>
Sent: Monday, May 22, 2006 2:38 PM
Subject: Re: Thread hangs in Axis2 binding code


Thanks for the quick response.

That was what occurred to me when I looked at the JDK documentation and the
usage of
pipedstream in toDataObject() function. But, it  shouldn't have worked for
the request which
contains smaller dataobject (see the SOAP request which works).

Isn't it?

Regards
Rashmi

On 5/22/06, Raymond Feng <en...@gmail.com> wrote:
>
> The deadlock problem was due to the usuage of piped streams and it has
> been
> fixed for a while. Please try the M1 candidate.
>
> Thanks,
> Raymond
>
> ----- Original Message -----
> From: "Rashmi Hunt" <ra...@gmail.com>
> To: <tu...@ws.apache.org>
> Sent: Monday, May 22, 2006 2:01 PM
> Subject: Thread hangs in Axis2 binding code
>
>
> 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
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: tuscany-dev-unsubscribe@ws.apache.org
> For additional commands, e-mail: tuscany-dev-help@ws.apache.org
>
>


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


Re: Thread hangs in Axis2 binding code

Posted by Rashmi Hunt <ra...@gmail.com>.
Thanks for the quick response.

That was what occurred to me when I looked at the JDK documentation and the
usage of
pipedstream in toDataObject() function. But, it  shouldn't have worked for
the request which
contains smaller dataobject (see the SOAP request which works).

Isn't it?

Regards
Rashmi

On 5/22/06, Raymond Feng <en...@gmail.com> wrote:
>
> The deadlock problem was due to the usuage of piped streams and it has
> been
> fixed for a while. Please try the M1 candidate.
>
> Thanks,
> Raymond
>
> ----- Original Message -----
> From: "Rashmi Hunt" <ra...@gmail.com>
> To: <tu...@ws.apache.org>
> Sent: Monday, May 22, 2006 2:01 PM
> Subject: Thread hangs in Axis2 binding code
>
>
> 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
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: tuscany-dev-unsubscribe@ws.apache.org
> For additional commands, e-mail: tuscany-dev-help@ws.apache.org
>
>

Re: Thread hangs in Axis2 binding code

Posted by Raymond Feng <en...@gmail.com>.
The deadlock problem was due to the usuage of piped streams and it has been 
fixed for a while. Please try the M1 candidate.

Thanks,
Raymond

----- Original Message ----- 
From: "Rashmi Hunt" <ra...@gmail.com>
To: <tu...@ws.apache.org>
Sent: Monday, May 22, 2006 2:01 PM
Subject: Thread hangs in Axis2 binding code


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


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