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;