Author: ningjiang Date: Thu Jan 28 06:32:57 2010 New Revision: 903970 URL: http://svn.apache.org/viewvc?rev=903970&view=rev Log: CAMEL-2407 support character encoding in XStreamDataFormat
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/converter/jaxp/StaxConverter.java camel/trunk/components/camel-xstream/src/main/java/org/apache/camel/dataformat/xstream/XStreamDataFormat.java camel/trunk/components/camel-xstream/src/test/java/org/apache/camel/dataformat/xstream/MarshalDomainObjectTest.java camel/trunk/components/camel-xstream/src/test/java/org/apache/camel/dataformat/xstream/MarshalListTest.java Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/converter/jaxp/StaxConverter.java URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/converter/jaxp/StaxConverter.java?rev=903970&r1=903969&r2=903970&view=diff ============================================================================== --- camel/trunk/camel-core/src/main/java/org/apache/camel/converter/jaxp/StaxConverter.java (original) +++ camel/trunk/camel-core/src/main/java/org/apache/camel/converter/jaxp/StaxConverter.java Thu Jan 28 06:32:57 2010 @@ -32,6 +32,8 @@ import javax.xml.transform.Source; import org.apache.camel.Converter; +import org.apache.camel.Exchange; +import org.apache.camel.converter.IOConverter; /** * A converter of StAX objects @@ -44,6 +46,11 @@ private XMLOutputFactory outputFactory; @Converter + public XMLEventWriter createXMLEventWriter(OutputStream out, Exchange exchange) throws XMLStreamException { + return getOutputFactory().createXMLEventWriter(out, IOConverter.getCharsetName(exchange)); + } + + @Converter public XMLEventWriter createXMLEventWriter(OutputStream out) throws XMLStreamException { return getOutputFactory().createXMLEventWriter(out); } @@ -57,13 +64,18 @@ public XMLEventWriter createXMLEventWriter(Result result) throws XMLStreamException { return getOutputFactory().createXMLEventWriter(result); } - + @Converter public XMLStreamWriter createXMLStreamWriter(OutputStream outputStream) throws XMLStreamException { return getOutputFactory().createXMLStreamWriter(outputStream); } @Converter + public XMLStreamWriter createXMLStreamWriter(OutputStream outputStream, Exchange exchange) throws XMLStreamException { + return getOutputFactory().createXMLStreamWriter(outputStream, IOConverter.getCharsetName(exchange)); + } + + @Converter public XMLStreamWriter createXMLStreamWriter(Writer writer) throws XMLStreamException { return getOutputFactory().createXMLStreamWriter(writer); } @@ -77,6 +89,11 @@ public XMLStreamReader createXMLStreamReader(InputStream in) throws XMLStreamException { return getInputFactory().createXMLStreamReader(in); } + + @Converter + public XMLStreamReader createXMLStreamReader(InputStream in, Exchange exchange) throws XMLStreamException { + return getInputFactory().createXMLStreamReader(in, IOConverter.getCharsetName(exchange)); + } @Converter public XMLStreamReader createXMLStreamReader(Reader in) throws XMLStreamException { @@ -87,13 +104,18 @@ public XMLStreamReader createXMLStreamReader(Source in) throws XMLStreamException { return getInputFactory().createXMLStreamReader(in); } - + @Converter public XMLEventReader createXMLEventReader(InputStream in) throws XMLStreamException { return getInputFactory().createXMLEventReader(in); } @Converter + public XMLEventReader createXMLEventReader(InputStream in, Exchange exchange) throws XMLStreamException { + return getInputFactory().createXMLEventReader(in, IOConverter.getCharsetName(exchange)); + } + + @Converter public XMLEventReader createXMLEventReader(Reader in) throws XMLStreamException { return getInputFactory().createXMLEventReader(in); } Modified: camel/trunk/components/camel-xstream/src/main/java/org/apache/camel/dataformat/xstream/XStreamDataFormat.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-xstream/src/main/java/org/apache/camel/dataformat/xstream/XStreamDataFormat.java?rev=903970&r1=903969&r2=903970&view=diff ============================================================================== --- camel/trunk/components/camel-xstream/src/main/java/org/apache/camel/dataformat/xstream/XStreamDataFormat.java (original) +++ camel/trunk/components/camel-xstream/src/main/java/org/apache/camel/dataformat/xstream/XStreamDataFormat.java Thu Jan 28 06:32:57 2010 @@ -73,12 +73,12 @@ } protected HierarchicalStreamWriter createHierarchicalStreamWriter(Exchange exchange, Object body, OutputStream stream) throws XMLStreamException { - XMLStreamWriter xmlWriter = getStaxConverter().createXMLStreamWriter(stream); + XMLStreamWriter xmlWriter = getStaxConverter().createXMLStreamWriter(stream, exchange); return new StaxWriter(new QNameMap(), xmlWriter); } protected HierarchicalStreamReader createHierarchicalStreamReader(Exchange exchange, InputStream stream) throws XMLStreamException { - XMLStreamReader xmlReader = getStaxConverter().createXMLStreamReader(stream); + XMLStreamReader xmlReader = getStaxConverter().createXMLStreamReader(stream, exchange); return new StaxReader(new QNameMap(), xmlReader); } } Modified: camel/trunk/components/camel-xstream/src/test/java/org/apache/camel/dataformat/xstream/MarshalDomainObjectTest.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-xstream/src/test/java/org/apache/camel/dataformat/xstream/MarshalDomainObjectTest.java?rev=903970&r1=903969&r2=903970&view=diff ============================================================================== --- camel/trunk/components/camel-xstream/src/test/java/org/apache/camel/dataformat/xstream/MarshalDomainObjectTest.java (original) +++ camel/trunk/components/camel-xstream/src/test/java/org/apache/camel/dataformat/xstream/MarshalDomainObjectTest.java Thu Jan 28 06:32:57 2010 @@ -86,7 +86,7 @@ public void configure() throws Exception { from("direct:in").marshal().xstream().to("mock:result"); - // just used for helping to marhsal + // just used for helping to marshal from("direct:marshal").marshal().xstream(); from("direct:reverse").unmarshal().xstream().to("mock:reverse"); Modified: camel/trunk/components/camel-xstream/src/test/java/org/apache/camel/dataformat/xstream/MarshalListTest.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-xstream/src/test/java/org/apache/camel/dataformat/xstream/MarshalListTest.java?rev=903970&r1=903969&r2=903970&view=diff ============================================================================== --- camel/trunk/components/camel-xstream/src/test/java/org/apache/camel/dataformat/xstream/MarshalListTest.java (original) +++ camel/trunk/components/camel-xstream/src/test/java/org/apache/camel/dataformat/xstream/MarshalListTest.java Thu Jan 28 06:32:57 2010 @@ -21,6 +21,7 @@ import java.util.List; import java.util.Map; +import org.apache.camel.Exchange; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.mock.MockEndpoint; import org.apache.camel.test.junit4.CamelTestSupport; @@ -35,13 +36,13 @@ public void testMarshalList() throws Exception { MockEndpoint mock = getMockEndpoint("mock:result"); mock.expectedMessageCount(1); - mock.expectedBodiesReceived("<?xml version='1.0' encoding='UTF-8'?>" + mock.expectedBodiesReceived("<?xml version='1.0' encoding='ISO-8859-1'?>" + "<list><string>Hello World</string></list>"); List<String> body = new ArrayList<String>(); body.add("Hello World"); - template.sendBody("direct:in", body); + template.sendBodyAndProperty("direct:in", body, Exchange.CHARSET_NAME, "ISO-8859-1"); mock.assertIsSatisfied(); } @@ -52,14 +53,14 @@ mock.expectedMessageCount(1); mock.expectedBodiesReceived( "<?xml version='1.0' encoding='UTF-8'?><list><map><entry><string>city</string>" - + "<string>London</string></entry></map></list>"); + + "<string>London\u0E08</string></entry></map></list>"); List<Map<Object, String>> body = new ArrayList<Map<Object, String>>(); Map<Object, String> row = new HashMap<Object, String>(); - row.put("city", "London"); + row.put("city", "London\u0E08"); body.add(row); - template.sendBody("direct:in", body); + template.sendBodyAndProperty("direct:in", body, Exchange.CHARSET_NAME, "UTF-8"); mock.assertIsSatisfied(); }