I spent a lot of time looking for solution to this problem. Unfortunately I can't filter client outgoing messages. Is there any possibility to filter incoming messages on server side.
dkulp wrote: > > On Friday 29 August 2008 11:51:53 am Martijn Brinkers wrote: >> The problem is that Strings can contain those illegal characters as >> discussed on Benson's blog. So to make sure that the produced XML is >> valid all Strings need to be filtered. Is it possible to do this >> filtering by CXF automagically before sending out the final XML? > > Couple thoughts: > 1) JAXB allows you to easily send messages that are not schema compliant. > By > default, JAXB doesn't validate it's datasets. For example, you could > have a > minOccurs="2" maxOccurs="10" element, but only put a single value in the > List > and JAXB will happily send it. If you want strict compliance, you need > to > turn schema validation on (which results in a performance penalty) or make > sure the dataset you produce it valid per schema. > > 2) In this particular case, you COULD write an XMLStreamWriter that > wrappers > the original writer and overrides the writeCharacters method to do any > filtering you need. I wouldn't make this a default as performance would > suffer for the "normal" usecases where this isn't needed. This is just > like > schema validation. It's useful, but is a performance hit so should be > turned on by the developer if the developer feels it's needed and/or > required. > > Dan > > >> Martijn >> >> On Fri, 2008-08-29 at 11:44 -0400, Daniel Kulp wrote: >> > Control characters like that are illegal in XML. You can read Benson's >> > blog about it: >> > http://dssheep.blogspot.com/2008/01/xml-10-versus-web-services.html >> > >> > Technically, I would consider this a bug in the JAXB marshaller as this >> > should have thrown an exception at write time, not read time. If you >> > turn on schema validation on the send side, it might throw an >> exception, >> > not really sure. >> > >> > Dan >> > >> > On Thursday 28 August 2008 6:01:00 pm Martijn Brinkers wrote: >> > > Hi, >> > > >> > > I use CXF as a soap server and CXF as a soap client. In one of my >> soap >> > > calls I return a String but sometimes this results in a >> > > WstxUnexpectedCharException. >> > > >> > > "WstxUnexpectedCharException: Illegal character ((CTRL-CHAR, code >> 27))" >> > > >> > > I read that a WstxUnexpectedCharException can be caused by a HTML >> > > server returning HTML content but that's not the case here. The >> string >> > > that's returned is returned by my CXF soap server. Shouldn't it be >> > > escaped or something? >> > > >> > > Thanks, >> > > >> > > Martijn Brinkers >> > > >> > > PS. I use CXF 2.1 >> > > >> > > >> > > >> > > Partial stacktrace >> > > >> > > Caused by: org.apache.cxf.interceptor.Fault: Unmarshalling Error: >> > > Illegal character ((CTRL-CHAR, code 27)) >> > > at [row,col {unknown-source}]: [7,1] >> > > at >> > > >> org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.ja >> > >va:6 42) at >> > > >> org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.ja >> > >va:5 55) at >> > > org.apache.cxf.jaxb.io.DataReaderImpl.read(DataReaderImpl.java:64) at >> > > >> org.apache.cxf.interceptor.DocLiteralInInterceptor.handleMessage(DocLit >> > >eral InInterceptor.java:102) at >> > > >> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptor >> > >Chai n.java:221) at >> > > org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:429) at >> > > org.apache.cxf.transport.http.HTTPConduit >> > > $WrappedOutputStream.handleResponse(HTTPConduit.java:1988) >> > > at org.apache.cxf.transport.http.HTTPConduit >> > > $WrappedOutputStream.close(HTTPConduit.java:1824) >> > > at >> > > >> org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:66) >> > > at >> > > org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:583) >> > > at org.apache.cxf.interceptor.MessageSenderInterceptor >> > > >> $MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor. >> > >java >> > > >> > >:62) at >> > > >> > > >> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptor >> > >Chai n.java:221) at >> > > org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:276) >> > > at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:222) >> > > at >> org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:73) >> > > at >> > > >> org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:177) >> > > ... 111 more >> > > Caused by: javax.xml.bind.UnmarshalException >> > > - with linked exception: >> > > [com.ctc.wstx.exc.WstxUnexpectedCharException: Illegal character >> > > ((CTRL-CHAR, code 27)) >> > > at [row,col {unknown-source}]: [7,1]] >> > > at >> > > >> com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.handleStreamE >> > >xcep tion(UnmarshallerImpl.java:422) at >> > > >> com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(Un >> > >mars hallerImpl.java:360) at >> > > >> com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(Unm >> > >arsh allerImpl.java:337) at >> > > >> org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.ja >> > >va:6 28) ... 126 more >> > > Caused by: com.ctc.wstx.exc.WstxUnexpectedCharException: Illegal >> > > character ((CTRL-CHAR, code 27)) >> > > at [row,col {unknown-source}]: [7,1] >> > > at >> > > >> com.ctc.wstx.sr.StreamScanner.throwInvalidSpace(StreamScanner.java:650) >> > > at >> > > >> com.ctc.wstx.sr.BasicStreamReader.readTextSecondary(BasicStreamReader.j >> > >ava: 4666) at >> > > >> com.ctc.wstx.sr.BasicStreamReader.readCoalescedText(BasicStreamReader.j >> > >ava: 4124) at >> > > >> com.ctc.wstx.sr.BasicStreamReader.finishToken(BasicStreamReader.java:36 >> > >99) at >> > > >> com.ctc.wstx.sr.BasicStreamReader.safeFinishToken(BasicStreamReader.jav >> > >a:36 47) at >> > > >> com.ctc.wstx.sr.BasicStreamReader.getTextCharacters(BasicStreamReader.j >> > >ava: 830) at >> > > >> org.apache.cxf.staxutils.DepthXMLStreamReader.getTextCharacters(DepthXM >> > >LStr eamReader.java:159) at >> > > >> com.sun.xml.bind.v2.runtime.unmarshaller.StAXStreamConnector.handleChar >> > >acte rs(StAXStreamConnector.java:356) at >> > > >> com.sun.xml.bind.v2.runtime.unmarshaller.StAXStreamConnector.bridge(StA >> > >XStr eamConnector.java:220) at >> > > >> com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(Un >> > >mars hallerImpl.java:358) ... 128 more > > > > -- > Daniel Kulp > [EMAIL PROTECTED] > http://www.dankulp.com/blog > > -- View this message in context: http://www.nabble.com/WstxUnexpectedCharException-with-CXF-soap-server-and-CXF-soap-client-tp19210049p19391032.html Sent from the cxf-user mailing list archive at Nabble.com.
