cxf-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Selena85 <l.kozmin...@gmail.com>
Subject Re: WstxUnexpectedCharException with CXF soap server and CXF soap client
Date Tue, 09 Sep 2008 12:13:31 GMT

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
> dkulp@apache.org
> 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.


Mime
View raw message