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

Robert Lazarski commented on AXIS2-6091:
----------------------------------------

This issue is a dup of AXIS2-6061. I tried fixing it late in the 2.0.0 dev 
cycle but ran out of time. 

This problem started on 404 because errant endpoint errors were previously 
returning 500.  

Error 500 has to be SOAP a response if it was invoked with a SOAP request - 
right?  

> Problem handling HTTP Response in OutInAxisOperationClient / TransportUtils
> ---------------------------------------------------------------------------
>
>                 Key: AXIS2-6091
>                 URL: https://issues.apache.org/jira/browse/AXIS2-6091
>             Project: Axis2
>          Issue Type: Bug
>          Components: kernel
>    Affects Versions: 2.0.0
>            Reporter: Jeff Thomas
>            Priority: Major
>
> I am testing upgrading to Axis2 2.0.0 (and associated Axiom 2.0.0 upgrade).
> I am seeing a processing error when a HTTP 404 is received by an 
> OutInAxisOperationClient when an endpoint is not available (target 
> application not running) but the Tomcat instance is running.
> The returned response obtained from the input-stream is:
>  
> {code:java}
> <!doctype html>
> <html lang="en">
>     <head>
>         <title>HTTP Status 404 – Not Found</title>
>         <style type="text/css">body {font-family:Tahoma,Arial,sans-serif;} 
> h1, h2, h3, b {color:white;background-color:#525D76;} h1 {font-size:22px;} h2 
> {font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;} 
> .line {height:1px;background-color:#525D76;border:none;}</style>
>     </head>
>     <body>
>         <h1>HTTP Status 404 – Not Found</h1>
>         <hr class="line"/>
>         <p>
>             <b>Type</b> Status Report</p>
>         <p>
>             <b>Description</b> The origin server did not find a current 
> representation for the target resource or is not willing to disclose that one 
> exists.</p>
>         <hr class="line"/>
>         <h3>Apache Tomcat/11.0.5</h3>
>     </body>
> </html> {code}
> The stacktrace for the fault is as follows:
>  
>  
> {code:java}
> org.apache.axis2.AxisFault: org.apache.axiom.core.stream.StreamException: 
> com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character 'd' (code 
> 100) after '<!' (malformed comment?)
>  at [row,col {unknown-source}]: [1,3]
>     at org.apache.axis2.AxisFault.makeFault(AxisFault.java:431) 
> ~[axis2-kernel-2.0.0.2-PWC.jar:2.0.0.2-PWC]
>     at 
> org.apache.axis2.kernel.TransportUtils.createSOAPMessage(TransportUtils.java:116)
>  ~[axis2-kernel-2.0.0.2-PWC.jar:2.0.0.2-PWC]
>     at 
> org.apache.axis2.kernel.TransportUtils.createSOAPMessage(TransportUtils.java:68)
>  ~[axis2-kernel-2.0.0.2-PWC.jar:2.0.0.2-PWC]
>     at 
> org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:347)
>  ~[axis2-kernel-2.0.0.2-PWC.jar:2.0.0.2-PWC]
>  {code}
> Ultimately it lands in this chain:
>  
>  * OutInAxisOperationClient#processResponse ->
>  * TransportUtils#createSoapMessage ->
>  * ...
>  * TransportUtils#createDefaultDocumentElement
> It lands here because it cannot find any configured MessageBuilder for the 
> content-type "text/html".
> Here it comes in this code:
>  
> {code:java}
> private static OMElement createDefaultDocumentElement(MessageContext 
> msgContext,
>                                                       InputStream inStream, 
> String type) {
>     OMElement documentElement;
>     if (msgContext.isDoingREST()) {
>         if (log.isDebugEnabled()) {
>             log.debug("Could not find a Builder for type (" + type + ").  
> Using REST.");
>         }
>         OMXMLParserWrapper builder = BuilderUtil.createPOXBuilder(inStream, 
> null);
>         documentElement = builder.getDocumentElement();
>     } else {
>         // FIXME making soap defualt for the moment..might effect the
>         // performance
>         if (log.isDebugEnabled()) {
>             log.debug("Could not find a Builder for type (" + type + ").  
> Using SOAP.");
>         }
>         String charSetEnc = (String) msgContext
>                 .getProperty(Constants.Configuration.CHARACTER_SET_ENCODING);
>         SOAPModelBuilder builder = 
> BuilderUtil.createSOAPModelBuilder(inStream, charSetEnc);
>         documentElement = builder.getDocumentElement();
>     }
>     return documentElement;
> } {code}
>  
> The '{{{}isDoingRest{}}}' returns _false_ and the {{contentType}} is 
> 'text/html' and encoding 'UTF-8'.
> The exception is thrown trying to parse the HTML to SOAP:
> {code:java}
> documentElement = builder.getDocumentElement(); {code}
> Possibly this is also related to the code in {{HTTPSender#send}} for handling 
> 404/500 HTTP responses?
>  
>  
> {code:java}
> else if (statusCode == HttpStatus.SC_INTERNAL_SERVER_ERROR
>                            || statusCode == HttpStatus.SC_BAD_REQUEST || 
> statusCode == HttpStatus.SC_NOT_FOUND) {
>                     processResponse = true;
>                     fault = true;
>                 }{code}
> We would really like to get off our custom forks of Axis2/Axiom/Rampart - or 
> at least as close to the current release as possible but this is currently a 
> blocker for us.  Our monitoring continuously polls endpoints that may or may 
> not be available and this generates loads of errors / stacktraces in our logs.
>  
> I enabled the following parameter as a test to use the "UnknownBuilder"
>  
> {code:java}
> <parameter name="useDefaultFallbackBuilder">true</parameter> {code}
> I didn't get the Axiom exception, but it only leads to a follow-up exception:
>  
>  
> {code:java}
> java.lang.IllegalArgumentException: The MessageContext does not have an 
> associated SOAPFault.
>     at 
> org.apache.axis2.util.Utils.getInboundFaultFromMessageContext(Utils.java:533) 
> ~[axis2-kernel-2.0.0.2-PWC.jar:2.0.0.2-PWC]
>     at 
> org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:368)
>  ~[axis2-kernel-2.0.0.2-PWC.jar:2.0.0.2-PWC]
>  {code}
> So all in all, if I am not analyzing this incorrectly, Axis2 doesn't seem to 
> be handling the case where an endpoint returns a 404/500 response that is 
> HTML and not SOAP (and probably other HTTP status as well (400 BAD_REQUEST, 
> 401 UNAUTHORIZED, 403 FORBIDDEN, 418 (I am a teapot! :P), ...).
>  
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: java-dev-unsubscr...@axis.apache.org
For additional commands, e-mail: java-dev-h...@axis.apache.org

Reply via email to