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

Keith Godwin Chapman commented on AXIS2-3007:
---------------------------------------------

This is the scenario at the moment. If the Axis Engine receives a REST request 
and if it cannot find a relevant builder that matches the content-type it uses 
that builder. If it cannot find a builder it uses the default. 
ApplicationXMLBuilder iof the request is s POST or XformURLEncodedBuilder if 
the request was a GET. 

The fix is for both client and server side. Its almost impossible to detect 
incorrectly typed messages untill it gets to the builder. It's the builder who 
is aware as to how the message should look like. This is because the builders 
are pluggable. Anybody can write a custom builder and set its relavalt 
content-type to "foo". Its only the builder who knows how to build this 
message. So thats the first point that we can detect an error. Afterall this is 
not deep in axis. We detect the error before passing the message to the axis 
engine.

Its 

> RESTful services invocation self induces Input Stream Closed error
> ------------------------------------------------------------------
>
>                 Key: AXIS2-3007
>                 URL: https://issues.apache.org/jira/browse/AXIS2-3007
>             Project: Axis 2.0 (Axis2)
>          Issue Type: Bug
>    Affects Versions: 1.2
>         Environment: Windows 2000, Eclipse IDE
>            Reporter: Jason Kania
>            Assignee: Keith Godwin Chapman
>         Attachments: patch.txt
>
>
> When making REST GET calls to an API, Axis 2 core sets its input stream to 
> null and then complains later that its stream has been closed. The following 
> partial stack trace demonstrates the problem.
> ApplicationXMLBuilder.processDocument(InputStream, String, MessageContext) 
> line: 49   
> TransportUtils.createSOAPMessage(MessageContext, InputStream, String) line: 
> 130       
> RESTUtil.processURLRequest(MessageContext, OutputStream, String) line: 98     
> AxisServlet$ProcessRESTRequest.processURLRequest() line: 776  
> AxisServlet.doGet(HttpServletRequest, HttpServletResponse) line: 238  
> AxisServlet(HttpServlet).service(HttpServletRequest, HttpServletResponse) 
> line: 707   
> AxisServlet(HttpServlet).service(ServletRequest, ServletResponse) line: 820   
> ServletHolder.handle(ServletRequest, ServletResponse) line: 487       
> ...
> In RESTUtil, method processURLRequest, the following call is made on line 98
>                 soapEnvelope = TransportUtils
>                         .createSOAPMessage(msgContext, null, contentType);
> where the null is supposed to be the input stream
> Thus, when line 49 of ApplicationXMLBuilder in method processDocument is 
> encountered,
>             PushbackInputStream pushbackInputStream = new 
> PushbackInputStream(inputStream);
> where inputStream is null,
> the exception "java.io.IOException: Stream closed" is generated once the 
> empty stream is read at line 51
> of ApplicationXMLBuilder:
>            if ((b = pushbackInputStream.read()) > 0) {
> For straight Axis use, this issue is a blocker, but I have worked around the 
> problem by filtering empty get methods at the servlet level and am populating 
> them with content for now.

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


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to