[ https://issues.apache.org/jira/browse/AXIS2-6091?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Jeff Thomas updated AXIS2-6091: ------------------------------- Description: 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), ...). was: 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), ...). > 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