You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2009/03/30 11:18:50 UTC
svn commit: r759887 - in /camel/trunk:
camel-core/src/main/java/org/apache/camel/model/dataformat/
components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/
components/camel-jaxb/src/test/java/org/apache/camel/example/
components/camel-jaxb/...
Author: davsclaus
Date: Mon Mar 30 09:18:46 2009
New Revision: 759887
URL: http://svn.apache.org/viewvc?rev=759887&view=rev
Log:
CAMEL-1500: Added encoding option to JAXB data format. Thanks to Tobias Emmerich for providing details how to do this.
Added:
camel/trunk/components/camel-jaxb/src/test/java/org/apache/camel/example/SpringDataFormatWithEncodingTest.java
- copied, changed from r759434, camel/trunk/components/camel-jaxb/src/test/java/org/apache/camel/example/SpringDataFormatTest.java
camel/trunk/components/camel-jaxb/src/test/resources/org/apache/camel/example/springDataFormatWithEncoding.xml
- copied, changed from r759434, camel/trunk/components/camel-jaxb/src/test/resources/org/apache/camel/example/springDataFormat.xml
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/model/dataformat/JaxbDataFormat.java
camel/trunk/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/JaxbDataFormat.java
camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/model/dataformat/JaxbDataFormat.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/model/dataformat/JaxbDataFormat.java?rev=759887&r1=759886&r2=759887&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/model/dataformat/JaxbDataFormat.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/model/dataformat/JaxbDataFormat.java Mon Mar 30 09:18:46 2009
@@ -38,6 +38,8 @@
private Boolean prettyPrint;
@XmlAttribute(required = false)
private Boolean ignoreJAXBElement;
+ @XmlAttribute(required = false)
+ private String encoding;
public JaxbDataFormat() {
super("org.apache.camel.converter.jaxb.JaxbDataFormat");
@@ -85,7 +87,10 @@
setProperty(dataFormat, "ignoreJAXBElement", Boolean.FALSE);
} else { // the default value is true
setProperty(dataFormat, "ignoreJAXBElement", Boolean.TRUE);
- }
+ }
+ if (encoding != null) {
+ setProperty(dataFormat, "encoding", encoding);
+ }
setProperty(dataFormat, "contextPath", contextPath);
}
}
\ No newline at end of file
Modified: camel/trunk/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/JaxbDataFormat.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/JaxbDataFormat.java?rev=759887&r1=759886&r2=759887&view=diff
==============================================================================
--- camel/trunk/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/JaxbDataFormat.java (original)
+++ camel/trunk/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/JaxbDataFormat.java Mon Mar 30 09:18:46 2009
@@ -22,6 +22,7 @@
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.JAXBException;
+import javax.xml.bind.Marshaller;
import org.apache.camel.Exchange;
import org.apache.camel.spi.DataFormat;
@@ -38,6 +39,7 @@
private String contextPath;
private boolean prettyPrint = true;
private boolean ignoreJAXBElement = true;
+ private String encoding;
public JaxbDataFormat() {
}
@@ -53,7 +55,19 @@
public void marshal(Exchange exchange, Object graph, OutputStream stream) throws IOException {
try {
// must create a new instance of marshaller as its not thread safe
- getContext().createMarshaller().marshal(graph, stream);
+ Marshaller marshaller = getContext().createMarshaller();
+
+ // exchange take precedense over encoding option
+ String charset = exchange.getProperty(Exchange.CHARSET_NAME, String.class);
+ if (charset == null) {
+ charset = encoding;
+ }
+ if (charset != null) {
+ marshaller.setProperty(Marshaller.JAXB_ENCODING, charset);
+ }
+
+ marshaller.marshal(graph, stream);
+
} catch (JAXBException e) {
throw IOHelper.createIOException(e);
}
@@ -109,6 +123,14 @@
this.prettyPrint = prettyPrint;
}
+ public String getEncoding() {
+ return encoding;
+ }
+
+ public void setEncoding(String encoding) {
+ this.encoding = encoding;
+ }
+
protected JAXBContext createContext() throws JAXBException {
if (contextPath != null) {
return JAXBContext.newInstance(contextPath);
Copied: camel/trunk/components/camel-jaxb/src/test/java/org/apache/camel/example/SpringDataFormatWithEncodingTest.java (from r759434, camel/trunk/components/camel-jaxb/src/test/java/org/apache/camel/example/SpringDataFormatTest.java)
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jaxb/src/test/java/org/apache/camel/example/SpringDataFormatWithEncodingTest.java?p2=camel/trunk/components/camel-jaxb/src/test/java/org/apache/camel/example/SpringDataFormatWithEncodingTest.java&p1=camel/trunk/components/camel-jaxb/src/test/java/org/apache/camel/example/SpringDataFormatTest.java&r1=759434&r2=759887&rev=759887&view=diff
==============================================================================
--- camel/trunk/components/camel-jaxb/src/test/java/org/apache/camel/example/SpringDataFormatTest.java (original)
+++ camel/trunk/components/camel-jaxb/src/test/java/org/apache/camel/example/SpringDataFormatWithEncodingTest.java Mon Mar 30 09:18:46 2009
@@ -16,32 +16,48 @@
*/
package org.apache.camel.example;
+import org.apache.camel.Exchange;
import org.apache.camel.component.mock.MockEndpoint;
import org.apache.camel.spring.SpringTestSupport;
-
import org.springframework.context.support.ClassPathXmlApplicationContext;
-import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
-
/**
* @version $Revision$
*/
-public class SpringDataFormatTest extends SpringTestSupport {
- public void testMarshalThenUnmarshalBean() throws Exception {
+public class SpringDataFormatWithEncodingTest extends SpringTestSupport {
+
+ public void testMarshalWithEncoding() throws Exception {
PurchaseOrder bean = new PurchaseOrder();
bean.setName("Beer");
bean.setAmount(23);
bean.setPrice(2.5);
- MockEndpoint resultEndpoint = resolveMandatoryEndpoint("mock:result", MockEndpoint.class);
- resultEndpoint.expectedBodiesReceived(bean);
+ MockEndpoint mock = resolveMandatoryEndpoint("mock:result", MockEndpoint.class);
+ mock.expectedBodiesReceived("<?xml version=\"1.0\" encoding=\"iso-8859-1\" standalone=\"yes\"?>"
+ + "<purchaseOrder amount=\"23.0\" price=\"2.5\" name=\"Beer\"/>");
template.sendBody("direct:start", bean);
- resultEndpoint.assertIsSatisfied();
+ mock.assertIsSatisfied();
+ }
+
+ public void testMarshalWithEncodingPropertyInExchange() throws Exception {
+ PurchaseOrder bean = new PurchaseOrder();
+ bean.setName("Beer");
+ bean.setAmount(23);
+ bean.setPrice(2.5);
+
+ MockEndpoint mock = resolveMandatoryEndpoint("mock:result", MockEndpoint.class);
+ mock.expectedBodiesReceived("<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>"
+ + "<purchaseOrder amount=\"23.0\" price=\"2.5\" name=\"Beer\"/>");
+
+ // the property should override the jaxb configuration
+ template.sendBodyAndProperty("direct:start", bean, Exchange.CHARSET_NAME, "utf-8");
+
+ mock.assertIsSatisfied();
}
protected ClassPathXmlApplicationContext createApplicationContext() {
- return new ClassPathXmlApplicationContext("org/apache/camel/example/springDataFormat.xml");
+ return new ClassPathXmlApplicationContext("org/apache/camel/example/springDataFormatWithEncoding.xml");
}
}
\ No newline at end of file
Copied: camel/trunk/components/camel-jaxb/src/test/resources/org/apache/camel/example/springDataFormatWithEncoding.xml (from r759434, camel/trunk/components/camel-jaxb/src/test/resources/org/apache/camel/example/springDataFormat.xml)
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jaxb/src/test/resources/org/apache/camel/example/springDataFormatWithEncoding.xml?p2=camel/trunk/components/camel-jaxb/src/test/resources/org/apache/camel/example/springDataFormatWithEncoding.xml&p1=camel/trunk/components/camel-jaxb/src/test/resources/org/apache/camel/example/springDataFormat.xml&r1=759434&r2=759887&rev=759887&view=diff
==============================================================================
--- camel/trunk/components/camel-jaxb/src/test/resources/org/apache/camel/example/springDataFormat.xml (original)
+++ camel/trunk/components/camel-jaxb/src/test/resources/org/apache/camel/example/springDataFormatWithEncoding.xml Mon Mar 30 09:18:46 2009
@@ -22,16 +22,16 @@
http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
">
- <!-- START SNIPPET: example -->
- <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
- <route>
- <from uri="direct:start"/>
- <unmarshal>
- <jaxb prettyPrint="true" contextPath="org.apache.camel.example"/>
- </unmarshal>
- <to uri="mock:result"/>
- </route>
- </camelContext>
- <!-- END SNIPPET: example -->
+ <!-- START SNIPPET: example -->
+ <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
+ <route>
+ <from uri="direct:start"/>
+ <marshal>
+ <jaxb prettyPrint="true" encoding="iso-8859-1" contextPath="org.apache.camel.example"/>
+ </marshal>
+ <to uri="mock:result"/>
+ </route>
+ </camelContext>
+ <!-- END SNIPPET: example -->
</beans>
Modified: camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java?rev=759887&r1=759886&r2=759887&view=diff
==============================================================================
--- camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java (original)
+++ camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java Mon Mar 30 09:18:46 2009
@@ -73,7 +73,7 @@
private static final transient Log LOG = LogFactory.getLog(JettyHttpComponent.class);
protected Server server;
- protected HashMap<String, ConnectorRef> connectors = new HashMap<String, ConnectorRef>();
+ protected final HashMap<String, ConnectorRef> connectors = new HashMap<String, ConnectorRef>();
protected String sslKeyPassword;
protected String sslPassword;
protected String sslKeystore;