You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commons-dev@ws.apache.org by "Andreas Veithen (JIRA)" <ji...@apache.org> on 2010/05/23 19:14:25 UTC

[jira] Created: (WSCOMMONS-544) Mail transport: synchronous invocation style doesn't work correctly

Mail transport: synchronous invocation style doesn't work correctly
-------------------------------------------------------------------

                 Key: WSCOMMONS-544
                 URL: https://issues.apache.org/jira/browse/WSCOMMONS-544
             Project: WS-Commons
          Issue Type: Bug
          Components: Transport
            Reporter: Andreas Veithen


The change in r698486 introduced support for the synchronous invocation style in the mail transport. This was implemented by using a callback pattern where the transport sender waits until the transport listener receives the response message and invokes the callback. This however doesn't work as expected. The reason is that after receiving the message, the mail transport listener will close the input stream for the message (and potentially release some other resources, such as closing the mail folder). On the server side, this works well because the listener invokes AxisEngine.receive, which only returns after the service has processed the message. However, on the client side, it will invoke the callback, which will not process the message, but only store it. By the time the client attempts to process the response, the underlying input stream is already closed. This leads to errors such as this one:

java.lang.RuntimeException: [was class java.io.IOException] Stream closed
        at com.ctc.wstx.util.ExceptionUtil.throwRuntimeException(ExceptionUtil.java:18)
        at com.ctc.wstx.sr.StreamScanner.throwLazyError(StreamScanner.java:706)
        at com.ctc.wstx.sr.BasicStreamReader.safeFinishToken(BasicStreamReader.java:3655)
        at com.ctc.wstx.sr.BasicStreamReader.getText(BasicStreamReader.java:809)
        at org.apache.axiom.util.stax.wrapper.XMLStreamReaderWrapper.getText(XMLStreamReaderWrapper.java:160)
        at org.apache.axiom.util.stax.wrapper.XMLStreamReaderWrapper.getText(XMLStreamReaderWrapper.java:160)
        at org.apache.axiom.om.impl.builder.StAXBuilder.createOMText(StAXBuilder.java:289)
        at org.apache.axiom.om.impl.builder.StAXBuilder.createOMText(StAXBuilder.java:252)
        at org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:267)


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Commented: (WSCOMMONS-544) Mail transport: synchronous invocation style doesn't work correctly

Posted by "Andreas Veithen (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/WSCOMMONS-544?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12870429#action_12870429 ] 

Andreas Veithen commented on WSCOMMONS-544:
-------------------------------------------

The issue can be reproduced using the transport testkit. See the test case disabled in r947447:

http://svn.apache.org/viewvc/axis/axis2/java/transports/trunk/modules/mail/src/test/java/org/apache/axis2/transport/mail/MailTransportTest.java?rev=947447&r1=947446&r2=947447&view=diff

> Mail transport: synchronous invocation style doesn't work correctly
> -------------------------------------------------------------------
>
>                 Key: WSCOMMONS-544
>                 URL: https://issues.apache.org/jira/browse/WSCOMMONS-544
>             Project: WS-Commons
>          Issue Type: Bug
>          Components: Transport
>            Reporter: Andreas Veithen
>
> The change in r698486 introduced support for the synchronous invocation style in the mail transport. This was implemented by using a callback pattern where the transport sender waits until the transport listener receives the response message and invokes the callback. This however doesn't work as expected. The reason is that after receiving the message, the mail transport listener will close the input stream for the message (and potentially release some other resources, such as closing the mail folder). On the server side, this works well because the listener invokes AxisEngine.receive, which only returns after the service has processed the message. However, on the client side, it will invoke the callback, which will not process the message, but only store it. By the time the client attempts to process the response, the underlying input stream is already closed. This leads to errors such as this one:
> java.lang.RuntimeException: [was class java.io.IOException] Stream closed
>         at com.ctc.wstx.util.ExceptionUtil.throwRuntimeException(ExceptionUtil.java:18)
>         at com.ctc.wstx.sr.StreamScanner.throwLazyError(StreamScanner.java:706)
>         at com.ctc.wstx.sr.BasicStreamReader.safeFinishToken(BasicStreamReader.java:3655)
>         at com.ctc.wstx.sr.BasicStreamReader.getText(BasicStreamReader.java:809)
>         at org.apache.axiom.util.stax.wrapper.XMLStreamReaderWrapper.getText(XMLStreamReaderWrapper.java:160)
>         at org.apache.axiom.util.stax.wrapper.XMLStreamReaderWrapper.getText(XMLStreamReaderWrapper.java:160)
>         at org.apache.axiom.om.impl.builder.StAXBuilder.createOMText(StAXBuilder.java:289)
>         at org.apache.axiom.om.impl.builder.StAXBuilder.createOMText(StAXBuilder.java:252)
>         at org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:267)

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.