[ https://issues.apache.org/jira/browse/CXF-4942?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13639598#comment-13639598 ]
Juan Carlos Román commented on CXF-4942: ---------------------------------------- Hi Aki... sorry for the delayed response. The answer is yes CDataXMLStreamWriter is a part of the interceptor, here is the source: {code:title=CdataWriterInterceptor.java} package com.pagosonline.ppp4.banking.api.webservices.interceptors; import java.io.OutputStream; import javax.xml.stream.XMLStreamWriter; import org.apache.cxf.interceptor.BareOutInterceptor; import org.apache.cxf.interceptor.Fault; import org.apache.cxf.message.Message; import org.apache.cxf.phase.AbstractPhaseInterceptor; import org.apache.cxf.phase.Phase; import org.apache.cxf.staxutils.StaxUtils; public class CdataWriterInterceptor extends AbstractPhaseInterceptor<Message> { public CdataWriterInterceptor() { super(Phase.WRITE); addBefore(BareOutInterceptor.class.getName()); } @Override public void handleMessage(Message message) throws Fault { // disable the XML character encoding message.put("disable.outputstream.optimization", Boolean.TRUE); XMLStreamWriter writer = StaxUtils.createXMLStreamWriter(message .getContent(OutputStream.class)); message.setContent(XMLStreamWriter.class, new CDataXMLStreamWriter(writer)); } } {code} {code:title=CDataXMLStreamWriter.java} package com.pagosonline.ppp4.banking.api.webservices.interceptors; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamWriter; import org.apache.cxf.staxutils.DelegatingXMLStreamWriter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class CDataXMLStreamWriter extends DelegatingXMLStreamWriter { /** The logger class */ private static final Logger LOGGER = LoggerFactory.getLogger(CDataXMLStreamWriter.class); public CDataXMLStreamWriter(XMLStreamWriter del) { super(del); } @Override public void writeCharacters(String text) throws XMLStreamException { boolean useCData = checkIfCDATAneeded(text); if (useCData) { LOGGER.info("WritingCData" + text); super.writeCData(text); } else { super.writeCharacters(text); } } private boolean checkIfCDATAneeded(String text) { if (text.contains("<")) { return true; } return false; } public void writeStartElement(String prefix, String local, String uri) throws XMLStreamException { super.writeStartElement(prefix, local, uri); } } {code} Basically this code envelops the outbound message in a CDATA tag (I found this source on the web, I don't know if there are a better way...). Unfortunately I can't reproduce this error because appears very occasionally. I attach the WSDL file and the sample message... hope that helps. Thanks, Juan > XMLStreamException outbound message > ----------------------------------- > > Key: CXF-4942 > URL: https://issues.apache.org/jira/browse/CXF-4942 > Project: CXF > Issue Type: Bug > Components: Soap Binding > Affects Versions: 2.7.0 > Environment: cxf 2.7.0 > rehl 6 > tomcat 7 > Reporter: Juan Carlos Román > Priority: Critical > Labels: XMLStreamException > > Hi, > We build a webservice using CXF (2.7.0) that basically works with messages > with a CDATA attribute... > Recently we review the system's log and we encountered the following > stacktrace: > {code:xml} > 2013-03-12 12:49:09,445 banking-api [1] INFO > [com.pagosonline.ppp4.banking.api.webservices.gtech.impl.GTechServiceImpl] - > rawResponse: <pagoResponse> > <peticionId>3769927</peticionId> > <codigoRespuesta>0000</codigoRespuesta> > <codigoConvenio>3</codigoConvenio> > <referenciaPago>3460120</referenciaPago> > <valorFactura>00000000010928000</valorFactura> > <fechaEfectiva>2013/03/12</fechaEfectiva> > <numeroAutorizacion>15694</numeroAutorizacion> > </pagoResponse> > 2013-03-12 12:49:09,445 banking-api [1] INFO > [com.pagosonline.ppp4.banking.api.webservices.interceptors.CDataXMLStreamWriter] > - WritingCData<pagoResponse> > <peticionId>3769927</peticionId> > <codigoRespuesta>0000</codigoRespuesta> > <codigoConvenio>3</codigoConvenio> > <referenciaPago>3460120</referenciaPago> > <valorFactura>00000000010928000</valorFactura> > <fechaEfectiva>2013/03/12</fechaEfectiva> > <numeroAutorizacion>15694</numeroAutorizacion> > </pagoResponse> > 2013-03-12 12:49:09,447 banking-api [1] WARNING > [org.apache.cxf.phase.PhaseInterceptorChain] - Interceptor for > {http://impl.gtech.webservices.api.banking.ppp4.pagosonline.com/}gtechService#{http://pagosonline.com}pagar > has thrown exception, unwinding now; Caused by: > org.apache.cxf.interceptor.Fault: Could not send Message. > at > org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:64) > at > org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:271) > at > org.apache.cxf.interceptor.OutgoingChainInterceptor.handleMessage(OutgoingChainInterceptor.java:77) > at > org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:271) > at > org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121) > at > org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:238) > at > org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:222) > at > org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:202) > at > org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:137) > at > org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:158) > at > org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:239) > at > org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:159) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) > at > org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:215) > at > org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:547) > at > org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1359) > at > org.openspaces.pu.container.jee.stats.RequestStatisticsFilter.doFilter(RequestStatisticsFilter.java:58) > at > org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1330) > at > org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:478) > at > org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119) > at > org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:520) > at > org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:227) > at > org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:941) > at > org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:409) > at > org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:186) > at > org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:875) > at > org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117) > at > org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:250) > at > org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:149) > at > org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:110) > at org.eclipse.jetty.server.Server.handle(Server.java:349) > at > org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:441) > at > org.eclipse.jetty.server.HttpConnection$RequestHandler.content(HttpConnection.java:936) > at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:801) > at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:224) > at > org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:51) > at > org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:586) > at > org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:44) > at > org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:598) > at > org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:533) > at java.lang.Thread.run(Thread.java:662) > Caused by: org.eclipse.jetty.io.EofException > at > org.eclipse.jetty.http.HttpGenerator.flushBuffer(HttpGenerator.java:921) > at org.eclipse.jetty.http.HttpGenerator.complete(HttpGenerator.java:814) > at > org.eclipse.jetty.server.HttpConnection.commitResponse(HttpConnection.java:572) > at > org.eclipse.jetty.server.HttpConnection$Output.close(HttpConnection.java:993) > at > org.apache.cxf.transport.http.AbstractHTTPDestination$WrappedOutputStream.close(AbstractHTTPDestination.java:725) > at > org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56) > at > org.apache.cxf.transport.http.AbstractHTTPDestination$BackChannelConduit.close(AbstractHTTPDestination.java:655) > at > org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62) > ... 40 more > Caused by: java.nio.channels.ClosedChannelException > at > sun.nio.ch.SocketChannelImpl.ensureWriteOpen(SocketChannelImpl.java:135) > at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:357) > at java.nio.channels.SocketChannel.write(SocketChannel.java:360) > at > org.eclipse.jetty.io.nio.ChannelEndPoint.gatheringFlush(ChannelEndPoint.java:354) > at > org.eclipse.jetty.io.nio.ChannelEndPoint.flush(ChannelEndPoint.java:292) > at > org.eclipse.jetty.io.nio.SelectChannelEndPoint.flush(SelectChannelEndPoint.java:300) > at > org.eclipse.jetty.http.HttpGenerator.flushBuffer(HttpGenerator.java:848) > ... 47 more > 2013-03-12 12:49:09,448 banking-api [1] WARNING > [org.apache.cxf.phase.PhaseInterceptorChain] - Interceptor for > {http://impl.gtech.webservices.api.banking.ppp4.pagosonline.com/}gtechService#{http://pagosonline.com}pagar > has thrown exception, unwinding now; Caused by: > org.apache.cxf.binding.soap.SoapFault: Error writing to XMLStreamWriter. > at > org.apache.cxf.binding.soap.interceptor.SoapOutInterceptor$SoapOutEndingInterceptor.handleMessage(SoapOutInterceptor.java:288) > at > org.apache.cxf.binding.soap.interceptor.SoapOutInterceptor$SoapOutEndingInterceptor.handleMessage(SoapOutInterceptor.java:270) > at > org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:271) > at > org.apache.cxf.interceptor.AbstractFaultChainInitiatorObserver.onMessage(AbstractFaultChainInitiatorObserver.java:112) > at > org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:331) > at > org.apache.cxf.interceptor.OutgoingChainInterceptor.handleMessage(OutgoingChainInterceptor.java:77) > at > org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:271) > at > org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121) > at > org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:238) > at > org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:222) > at > org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:202) > at > org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:137) > at > org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:158) > at > org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:239) > at > org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:159) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) > at > org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:215) > at > org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:547) > at > org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1359) > at > org.openspaces.pu.container.jee.stats.RequestStatisticsFilter.doFilter(RequestStatisticsFilter.java:58) > at > org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1330) > at > org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:478) > at > org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119) > at > org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:520) > at > org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:227) > at > org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:941) > at > org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:409) > at > org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:186) > at > org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:875) > at > org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117) > at > org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:250) > at > org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:149) > at > org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:110) > at org.eclipse.jetty.server.Server.handle(Server.java:349) > at > org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:441) > at > org.eclipse.jetty.server.HttpConnection$RequestHandler.content(HttpConnection.java:936) > at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:801) > at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:224) > at > org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:51) > at > org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:586) > at > org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:44) > at > org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:598) > at > org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:533) > at java.lang.Thread.run(Thread.java:662) > Caused by: javax.xml.stream.XMLStreamException: No open start element, when > trying to write end element > at > com.ctc.wstx.sw.BaseStreamWriter.throwOutputError(BaseStreamWriter.java:1522) > at > com.ctc.wstx.sw.BaseStreamWriter.reportNwfStructure(BaseStreamWriter.java:1551) > at > com.ctc.wstx.sw.BaseNsStreamWriter.doWriteEndTag(BaseNsStreamWriter.java:648) > at > com.ctc.wstx.sw.BaseNsStreamWriter.writeEndElement(BaseNsStreamWriter.java:280) > at > org.apache.cxf.binding.soap.interceptor.SoapOutInterceptor$SoapOutEndingInterceptor.handleMessage(SoapOutInterceptor.java:279) > ... 43 more > {code} > This message caught our attention: > {code:java} > Caused by: javax.xml.stream.XMLStreamException: No open start element, when > trying to write end element > {code} > (The response message don't have any special char) > But after investigating we didn't found anything related... :( > You have any idea about this behavior ? > Thanks in advance, > -- > Juan -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira