[
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]