axis-java-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Alan Xu (JIRA)" <j...@apache.org>
Subject [jira] Created: (AXIS2-2635) Exception in XML serialization causes malformed/corrupted response
Date Thu, 03 May 2007 22:22:15 GMT
Exception in XML serialization causes malformed/corrupted response
------------------------------------------------------------------

                 Key: AXIS2-2635
                 URL: https://issues.apache.org/jira/browse/AXIS2-2635
             Project: Axis 2.0 (Axis2)
          Issue Type: Bug
          Components: kernel
    Affects Versions: 1.1.1, 1.2
         Environment: Windows Vista, Tomcat 5.5.20, JDK 1.5.0_10
            Reporter: Alan Xu


Hi there,

We have a simple SOAP layer that returns data pulled from the DB using Axis.  Nothing special
here.

In our testing, one of the objects happened to have an invalid XML 1.0 character (0x10) in
its description field.  As it's not an application Fault (our application currently doesn't
check for it.  It no doubt should, obviously), Axis2 wasn't aware of it until it's notified
by the Woodstox BufferingXMLWriter of an invalid character (through IOException).  Axis2 caught
the exception (at , and raised an AxisFault.  It then proceeded to send the Fault as its own
message (envelope) back to the client.  All is well, except that Axis2 was in the middle of
writing out response provided by the business application.  That led to a corrupted byte stream
that contained a partial, not well-formed envelope, followed immediately by the Fault envelope.
 Something to the effect of a purging (not flushing) to clear the output stream before sending
out the Fault message would seem desirable.

It may not be so bad if the client receives such a corrupted stream, and throws some sort
of error.  The Fault message becomes meaningless, obviously, which isn't great either.  But,
what's worse is that the Axis2 client (ServiceClient.sendReceive) actually was able to parse
the corrupted byte stream, and somehow considered the Fault message be the content of the
last XML element that contained the invalid character.  Now, that's really bad.

This may have been logged in JIRA, but I couldn't seem to find it.

-Alan

Stack track of the exception caught by Axis2 during serialization:

 com.ctc.wstx.exc.WstxIOException: Invalid white space character (0x10) in text to output
	at com.ctc.wstx.sw.BaseStreamWriter.writeCharacters(BaseStreamWriter.java:520)
	at org.apache.axiom.om.impl.llom.OMTextImpl.writeOutput(OMTextImpl.java:209)
	at org.apache.axiom.om.impl.llom.OMTextImpl.internalSerializeLocal(OMTextImpl.java:368)
	at org.apache.axiom.om.impl.llom.OMTextImpl.internalSerialize(OMTextImpl.java:197)
	at org.apache.axiom.om.impl.llom.OMElementImpl.internalSerialize(OMElementImpl.java:766)
	at org.apache.axiom.om.impl.llom.OMElementImpl.internalSerialize(OMElementImpl.java:750)
	at org.apache.axiom.om.impl.llom.OMElementImpl.internalSerialize(OMElementImpl.java:766)
	at org.apache.axiom.om.impl.llom.OMElementImpl.internalSerialize(OMElementImpl.java:750)
	at org.apache.axiom.om.impl.llom.OMElementImpl.internalSerialize(OMElementImpl.java:766)
	at org.apache.axiom.om.impl.llom.OMSourcedElementImpl.internalSerialize(OMSourcedElementImpl.java:564)
	at org.apache.axiom.om.impl.llom.OMElementImpl.internalSerialize(OMElementImpl.java:750)
	at org.apache.axiom.om.impl.llom.OMSourcedElementImpl.internalSerialize(OMSourcedElementImpl.java:551)
	at org.apache.axiom.om.impl.llom.OMSourcedElementImpl.serialize(OMSourcedElementImpl.java:592)
	at org.apache.axiom.om.impl.llom.OMElementImpl.toString(OMElementImpl.java:907)
	... 30 more
Caused by: java.io.IOException: Invalid white space character (0x10) in text to output
	at com.ctc.wstx.sw.XmlWriter.throwInvalidChar(XmlWriter.java:545)
	at com.ctc.wstx.sw.BufferingXmlWriter.writeCharacters(BufferingXmlWriter.java:453)
	at com.ctc.wstx.sw.BaseStreamWriter.writeCharacters(BaseStreamWriter.java:518)
	... 43 more


This is the call stack from Eclipse debugger:

CoyoteOutputStream.write(byte[], int, int) line: 88	
UTF8Writer.flush() line: 96	
BufferingXmlWriter.flush() line: 214	
SimpleNsStreamWriter(BaseStreamWriter).flush() line: 311	
MTOMXMLStreamWriter.flush() line: 115	
SOAPEnvelopeImpl(OMNodeImpl).serializeAndConsume(OutputStream, OMOutputFormat) line: 419	
SOAPMessageFormatter.writeTo(MessageContext, OMOutputFormat, OutputStream, boolean) line:
55	
CommonsHTTPTransportSender.sendUsingOutputStream(MessageContext, OMOutputFormat) line: 275

CommonsHTTPTransportSender.invoke(MessageContext) line: 203	
AxisEngine.sendFault(MessageContext) line: 533	
AxisServlet.handleFault(MessageContext, OutputStream, AxisFault) line: 393	
AxisServlet.processAxisFault(MessageContext, HttpServletResponse, OutputStream, AxisFault)
line: 355	
AxisServlet.doPost(HttpServletRequest, HttpServletResponse) line: 152	
AxisServlet(HttpServlet).service(HttpServletRequest, HttpServletResponse) line: 709	
AxisServlet(HttpServlet).service(ServletRequest, ServletResponse) line: 802	
ApplicationFilterChain.internalDoFilter(ServletRequest, ServletResponse) line: 252	
ApplicationFilterChain.doFilter(ServletRequest, ServletResponse) line: 173	
HibernateFilter.doFilter(ServletRequest, ServletResponse, FilterChain) line: 95	
ApplicationFilterChain.internalDoFilter(ServletRequest, ServletResponse) line: 202	
ApplicationFilterChain.doFilter(ServletRequest, ServletResponse) line: 173	
StandardWrapperValve.invoke(Request, Response) line: 213	
StandardContextValve.invoke(Request, Response) line: 178	
StandardHostValve.invoke(Request, Response) line: 126	
ErrorReportValve.invoke(Request, Response) line: 105	
FastCommonAccessLogValve.invoke(Request, Response) line: 495	
StandardEngineValve.invoke(Request, Response) line: 107	
CoyoteAdapter.service(Request, Response) line: 148	
Http11Processor.process(InputStream, OutputStream) line: 869	
Http11Protocol$JmxHttp11ConnectionHandler(Http11BaseProtocol$Http11ConnectionHandler).processConnection(TcpConnection,
Object[]) line: 664	
PoolTcpEndpoint.processSocket(Socket, TcpConnection, Object[]) line: 527	
LeaderFollowerWorkerThread.runIt(Object[]) line: 80	
ThreadPool$ControlRunnable.run() line: 684	
ThreadWithAttributes(Thread).run() line: 595	


What got sent over the wire back to the client:

<soapenv:Body xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><ns2:getSKUListResponse
xmlns:ns2="http://mds.adserver.massive.com/xsd"><ns2:record><s41:createdOn xmlns:s41="http://types.mds.adserver.massive.com/">2005-09-20T19:56:21.000Z</s41:createdOn><s42:description
xmlns:s42="http://types.mds.adserver.massive.com/">x</s42:description><s43:id
xmlns:s43="http://types.mds.adserver.massive.com/">51</s43:id><s44:modifiedOn
xmlns:s44="http://types.mds.adserver.massive.com/">2005-09-23T17:51:37.000Z</s44:modifiedOn><s45:name
xmlns:s45="http://types.mds.adserver.massive.com/">EveryoneSKU</s45:name><s46:enabled
xmlns:s46="http://types.mds.adserver.massive.com/">true</s46:enabled></ns2:record><ns2:record><s47:createdOn
xmlns:s47="http://types.mds.adserver.massive.com/">2005-09-20T19:55:23.000Z</s47:createdOn><s48:description
xmlns:s48="http://types.mds.adserver.massive.com/"><xml version='1.0' encoding='UTF-8'?><soapenv:Envelope><soapenv:Body><soapenv:Fault><faultcode>soapenv:Client</faultcode><faultstring>Invalid
white space character (0x10) in text to output</faultstring><detail /></soapenv:Fault></soapenv:Body></soapenv:Envelope>


What the client (Axis2 ServiceClient) thought it was getting:

<soapenv:Body xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><ns2:getSKUListResponse
xmlns:ns2="http://mds.adserver.massive.com/xsd"><ns2:record><s41:createdOn xmlns:s41="http://types.mds.adserver.massive.com/">2005-09-20T19:56:21.000Z</s41:createdOn><s42:description
xmlns:s42="http://types.mds.adserver.massive.com/">x</s42:description><s43:id
xmlns:s43="http://types.mds.adserver.massive.com/">51</s43:id><s44:modifiedOn
xmlns:s44="http://types.mds.adserver.massive.com/">2005-09-23T17:51:37.000Z</s44:modifiedOn><s45:name
xmlns:s45="http://types.mds.adserver.massive.com/">EveryoneSKU</s45:name><s46:enabled
xmlns:s46="http://types.mds.adserver.massive.com/">true</s46:enabled></ns2:record><ns2:record><s47:createdOn
xmlns:s47="http://types.mds.adserver.massive.com/">2005-09-20T19:55:23.000Z</s47:createdOn><s48:description
xmlns:s48="http://types.mds.adserver.massive.com/"> version='1.0' encoding='UTF-8'?><soapenv:Envelope><soapenv:Body><soapenv:Fault><faultcode>soapenv:Client</faultcode><faultstring>Invalid
white space character (0x10) in text to output</faultstring><detail /></soapenv:Fault></soapenv:Body></soapenv:Envelope></s48:description></ns2:record></ns2:getSKUListResponse></soapenv:Body>

-- 
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: axis-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-dev-help@ws.apache.org


Mime
View raw message