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

Jason Kania updated AXIS2-3007:
-------------------------------


I have investigated and two potential issues exist. The source of the incorrect 
content type is actually from the ServiceClient because within TransportUtils 
in method getMessageFormatter, it defaults content-type to application/xml when 
REST is enabled. I am not sure whether this default being set makes sense given 
your previous comments.

TransportUtils.getMessageFormatter(MessageContext) line: 249    
HTTPSender.populateCommonProperties(MessageContext, URL, HttpMethodBase, 
HttpClient, String) line: 254  
HTTPSender.sendViaGet(MessageContext, URL, String) line: 89     
HTTPSender.send(MessageContext, URL, String) line: 59   
CommonsHTTPTransportSender.writeMessageWithCommons(MessageContext, 
EndpointReference, OMOutputFormat) line: 305 
CommonsHTTPTransportSender.invoke(MessageContext) line: 201     
AxisEngine.send(MessageContext) line: 452       
OutInAxisOperationClient.send(MessageContext) line: 330 
OutInAxisOperationClient.execute(boolean) line: 294     
...

Subsequently, I followed the call stack on the servlet side up and the 
content-type was not changed. Thus, reproduction of the error should be as 
simple as setting up the client as follows:

ServiceClient serviceClient = new ServiceClient();
OperationClient client = serviceClient.createClient( 
ServiceClient.ANON_OUT_IN_OP );
Options options = new Options();
options.setTransportInProtocol( Constants.TRANSPORT_HTTP );

serviceClient.setTargetEPR( targetEPR );

options.setProperty( Constants.Configuration.ENABLE_REST, Constants.VALUE_TRUE 
); // Thise seems to do nothing
options.setProperty( HTTPConstants.AUTHENTICATE, null );
options.setProperty( Constants.Configuration.HTTP_METHOD, 
Constants.Configuration.HTTP_METHOD_GET );

MessageContext messageContext = new MessageContext();
messageContext.setIsSOAP11Explicit( false );
messageContext.setDoingREST( true );
client.addMessageContext( messageContext );

client.execute(true);

To me, this means that the Axis2 servlet should protect itself earlier on by 
detecting the invalid/unsupported content-type in the GET message.

Let me know if you need other information.

Jason


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