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

Senaka Fernando reassigned AXIS2-4124:
--------------------------------------

    Assignee: Senaka Fernando  (was: Glen Daniels)

> CLONE -Exception in XML serialization causes malformed/corrupted response
> -------------------------------------------------------------------------
>
>                 Key: AXIS2-4124
>                 URL: https://issues.apache.org/jira/browse/AXIS2-4124
>             Project: Axis2
>          Issue Type: Bug
>          Components: kernel
>    Affects Versions: 1.4.1
>         Environment: Windows Vista, Tomcat 5.5.27, JDK 1.5.0_10
>            Reporter: Peter Storch
>            Assignee: Senaka Fernando
>            Priority: Blocker
>         Attachments: AXIS2-BadCharacter.aar
>
>
> 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: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to