Hi Pavel,

I just committed your patch with some of my change.
I added a comment in the JIRA[1], please check it out.
Now we need update the wiki page and finish the FallbackTypeConverter marshal part.

I will keep on working them tomorrow.

[1] https://issues.apache.org/activemq/browse/CAMEL-2330

Willem


Willem Jiang wrote:
Hi Pavel,

I have a quick look at the patch, you did a good test on your code.
Just some minor issues,
1. You just check the Exchange property in JaxbDataFormat marshal(), and check the filterNonXmlChars in JaxbDataFormat unmarshal method. My suggestion is let the exchange property override the configure of JaxbDataFormat that is same with other Camel components do.

2. When unmarshaling the InputStream, you need to get the CharsetEncoding from Exchange like this

answer = unmarshaller.unmarshal(new NonXmlFilterReader(new InputStreamReader(stream, IOConvertor(getCharsetName(exchange))));

I will apply the patch later today after I finish the parts which you don't start.

Have a nice weekend :)

Willem


Pavel wrote:
Hi - Just in case I'm attaching patch of what I have so far. Not uploading to JIRA, as patch is incomplete, yet it may correlate with what you want to do. Here are the highlights:

* Marshalling uses custom XmlStreamWriter, while unmarshalling relies on the same, non-xml reader. I realized that wrapping XmlStreamReader does not solve the problem, as wrapper has no power to prevent underlying reader from reading bad chars and failing therefore.

* Filtering has changed slightly - it replaces bad chars with space chars. This a) allows to get rid of intemediate buffer and simplify the code and b) is consistent with the way e.g. Woodstox performs similar filtering.

* It is exchange property or data format property that turns filtering on/off.

* NonXmlCharFilterer performs logging of the replacement fact in case of char[]; and more readable message in case of String.

What's not done:
* I did hook filtering to data format, but did not change converter yet.
* Filtering option for JAXB data format is not exposed via spring DSL yet.

LMK if you have a feedback.

Thanks,
Pavel

Reply via email to