You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ni...@apache.org on 2015/03/26 09:44:52 UTC

[08/11] camel git commit: [CAMEL-8547] Usage of camel-xmlbeans depends on TCCL

[CAMEL-8547] Usage of camel-xmlbeans depends on TCCL


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/611781c0
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/611781c0
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/611781c0

Branch: refs/heads/camel-2.14.x
Commit: 611781c0a89ec2a9399d2cbd01b3b7c5d211d4a6
Parents: 56fa1bc
Author: James Netherton <jn...@redhat.com>
Authored: Wed Mar 25 16:19:16 2015 +0000
Committer: Willem Jiang <wi...@gmail.com>
Committed: Thu Mar 26 16:43:34 2015 +0800

----------------------------------------------------------------------
 .../converter/xmlbeans/XmlBeansConverter.java   | 104 ++++++++++++++++---
 .../converter/xmlbeans/XmlBeansDataFormat.java  |  28 ++++-
 .../xmlbeans/XmlBeansConverterTest.java         |  18 ++--
 3 files changed, 125 insertions(+), 25 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/611781c0/components/camel-xmlbeans/src/main/java/org/apache/camel/converter/xmlbeans/XmlBeansConverter.java
----------------------------------------------------------------------
diff --git a/components/camel-xmlbeans/src/main/java/org/apache/camel/converter/xmlbeans/XmlBeansConverter.java b/components/camel-xmlbeans/src/main/java/org/apache/camel/converter/xmlbeans/XmlBeansConverter.java
index 8068e86..5b1b011 100644
--- a/components/camel-xmlbeans/src/main/java/org/apache/camel/converter/xmlbeans/XmlBeansConverter.java
+++ b/components/camel-xmlbeans/src/main/java/org/apache/camel/converter/xmlbeans/XmlBeansConverter.java
@@ -45,48 +45,120 @@ public final class XmlBeansConverter {
     }
 
     @Converter
-    public static XmlObject toXmlObject(File value) throws IOException, XmlException {
-        return XmlObject.Factory.parse(value);
+    public static XmlObject toXmlObject(File value, Exchange exchange) throws IOException, XmlException {
+        ClassLoader tccl = Thread.currentThread().getContextClassLoader();
+
+        try {
+            ClassLoader apcl = exchange.getContext().getApplicationContextClassLoader();
+            if (apcl != null) {
+                Thread.currentThread().setContextClassLoader(apcl);
+            }
+            return XmlObject.Factory.parse(value);
+        } finally {
+            if (tccl != null) {
+                Thread.currentThread().setContextClassLoader(tccl);
+            }
+        }
     }
 
     @Converter
-    public static XmlObject toXmlObject(Reader value) throws IOException, XmlException {
-        return XmlObject.Factory.parse(value);
+    public static XmlObject toXmlObject(Reader value, Exchange exchange) throws IOException, XmlException {
+        ClassLoader tccl = Thread.currentThread().getContextClassLoader();
+
+        try {
+            ClassLoader apcl = exchange.getContext().getApplicationContextClassLoader();
+            if (apcl != null) {
+                Thread.currentThread().setContextClassLoader(apcl);
+            }
+            return XmlObject.Factory.parse(value);
+        } finally {
+            if (tccl != null) {
+                Thread.currentThread().setContextClassLoader(tccl);
+            }
+        }
     }
 
     @Converter
-    public static XmlObject toXmlObject(Node value) throws IOException, XmlException {
-        return XmlObject.Factory.parse(value);
+    public static XmlObject toXmlObject(Node value, Exchange exchange) throws IOException, XmlException {
+        ClassLoader tccl = Thread.currentThread().getContextClassLoader();
+
+        try {
+            ClassLoader apcl = exchange.getContext().getApplicationContextClassLoader();
+            if (apcl != null) {
+                Thread.currentThread().setContextClassLoader(apcl);
+            }
+            return XmlObject.Factory.parse(value);
+        } finally {
+            if (tccl != null) {
+                Thread.currentThread().setContextClassLoader(tccl);
+            }
+        }
     }
 
     @Converter
-    public static XmlObject toXmlObject(InputStream value) throws IOException, XmlException {
-        return XmlObject.Factory.parse(value);
+    public static XmlObject toXmlObject(InputStream value, Exchange exchange) throws IOException, XmlException {
+        ClassLoader tccl = Thread.currentThread().getContextClassLoader();
+
+        try {
+            ClassLoader apcl = exchange.getContext().getApplicationContextClassLoader();
+            if (apcl != null) {
+                Thread.currentThread().setContextClassLoader(apcl);
+            }
+            return XmlObject.Factory.parse(value);
+        } finally {
+            if (tccl != null) {
+                Thread.currentThread().setContextClassLoader(tccl);
+            }
+        }
     }
 
     @Converter
     public static XmlObject toXmlObject(String value, Exchange exchange) throws IOException, XmlException {
-        return toXmlObject(IOConverter.toInputStream(value, exchange));
+        return toXmlObject(IOConverter.toInputStream(value, exchange), exchange);
     }
 
     @Converter
-    public static XmlObject toXmlObject(byte[] value) throws IOException, XmlException {
-        return toXmlObject(IOConverter.toInputStream(value));
+    public static XmlObject toXmlObject(byte[] value, Exchange exchange) throws IOException, XmlException {
+        return toXmlObject(IOConverter.toInputStream(value), exchange);
     }
 
     @Converter
-    public static XmlObject toXmlObject(ByteBuffer value) throws IOException, XmlException {
-        return toXmlObject(NIOConverter.toInputStream(value));
+    public static XmlObject toXmlObject(ByteBuffer value, Exchange exchange) throws IOException, XmlException {
+        return toXmlObject(NIOConverter.toInputStream(value), exchange);
     }
 
     @Converter
-    public static XmlObject toXmlObject(XMLStreamReader value) throws IOException, XmlException {
-        return XmlObject.Factory.parse(value);
+    public static XmlObject toXmlObject(XMLStreamReader value, Exchange exchange) throws IOException, XmlException {
+        ClassLoader tccl = Thread.currentThread().getContextClassLoader();
+
+        try {
+            ClassLoader apcl = exchange.getContext().getApplicationContextClassLoader();
+            if (apcl != null) {
+                Thread.currentThread().setContextClassLoader(apcl);
+            }
+            return XmlObject.Factory.parse(value);
+        } finally {
+            if (tccl != null) {
+                Thread.currentThread().setContextClassLoader(tccl);
+            }
+        }
     }
 
     @Converter
     public static XmlObject toXmlObject(Source value, Exchange exchange) throws IOException, XmlException, NoTypeConversionAvailableException {
         Reader reader = exchange.getContext().getTypeConverter().mandatoryConvertTo(Reader.class, value);
-        return XmlObject.Factory.parse(reader);
+        ClassLoader tccl = Thread.currentThread().getContextClassLoader();
+
+        try {
+            ClassLoader apcl = exchange.getContext().getApplicationContextClassLoader();
+            if (apcl != null) {
+                Thread.currentThread().setContextClassLoader(apcl);
+            }
+            return XmlObject.Factory.parse(reader);
+        } finally {
+            if (tccl != null) {
+                Thread.currentThread().setContextClassLoader(tccl);
+            }
+        }
     }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/611781c0/components/camel-xmlbeans/src/main/java/org/apache/camel/converter/xmlbeans/XmlBeansDataFormat.java
----------------------------------------------------------------------
diff --git a/components/camel-xmlbeans/src/main/java/org/apache/camel/converter/xmlbeans/XmlBeansDataFormat.java b/components/camel-xmlbeans/src/main/java/org/apache/camel/converter/xmlbeans/XmlBeansDataFormat.java
index 6559813..28043b5 100644
--- a/components/camel-xmlbeans/src/main/java/org/apache/camel/converter/xmlbeans/XmlBeansDataFormat.java
+++ b/components/camel-xmlbeans/src/main/java/org/apache/camel/converter/xmlbeans/XmlBeansDataFormat.java
@@ -31,11 +31,35 @@ import org.apache.xmlbeans.XmlObject;
 public class XmlBeansDataFormat implements DataFormat {
 
     public void marshal(Exchange exchange, Object body, OutputStream stream) throws Exception {
+        ClassLoader tccl = Thread.currentThread().getContextClassLoader();
+
         XmlObject object = ExchangeHelper.convertToMandatoryType(exchange, XmlObject.class, body);
-        object.save(stream);
+        try {
+            ClassLoader apcl = exchange.getContext().getApplicationContextClassLoader();
+            if (apcl != null) {
+                Thread.currentThread().setContextClassLoader(apcl);
+            }
+            object.save(stream);
+        } finally {
+            if (tccl != null) {
+                Thread.currentThread().setContextClassLoader(tccl);
+            }
+        }
     }
 
     public Object unmarshal(Exchange exchange, InputStream stream) throws Exception {
-        return XmlObject.Factory.parse(stream);
+        ClassLoader tccl = Thread.currentThread().getContextClassLoader();
+
+        try {
+            ClassLoader apcl = exchange.getContext().getApplicationContextClassLoader();
+            if (apcl != null) {
+                Thread.currentThread().setContextClassLoader(apcl);
+            }
+            return XmlObject.Factory.parse(stream);
+        } finally {
+            if (tccl != null) {
+                Thread.currentThread().setContextClassLoader(tccl);
+            }
+        }
     }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/611781c0/components/camel-xmlbeans/src/test/java/org/apache/camel/converter/xmlbeans/XmlBeansConverterTest.java
----------------------------------------------------------------------
diff --git a/components/camel-xmlbeans/src/test/java/org/apache/camel/converter/xmlbeans/XmlBeansConverterTest.java b/components/camel-xmlbeans/src/test/java/org/apache/camel/converter/xmlbeans/XmlBeansConverterTest.java
index 86aac74..d73a277 100644
--- a/components/camel-xmlbeans/src/test/java/org/apache/camel/converter/xmlbeans/XmlBeansConverterTest.java
+++ b/components/camel-xmlbeans/src/test/java/org/apache/camel/converter/xmlbeans/XmlBeansConverterTest.java
@@ -65,13 +65,15 @@ public class XmlBeansConverterTest extends CamelTestSupport {
 
     @Test
     public void toXmlObjectFromFile() throws IOException, XmlException {
-        XmlObject result = XmlBeansConverter.toXmlObject(new File("src/test/data/buyStocks.xml"));
+        XmlObject result = XmlBeansConverter.toXmlObject(new File("src/test/data/buyStocks.xml"),
+                new DefaultExchange(new DefaultCamelContext()));
         assertBuyStocks(result);
     }
 
     @Test
     public void toXmlObjectFromReader() throws IOException, XmlException {
-        XmlObject result = XmlBeansConverter.toXmlObject(new FileReader("src/test/data/buyStocks.xml"));
+        XmlObject result = XmlBeansConverter.toXmlObject(new FileReader("src/test/data/buyStocks.xml"),
+                new DefaultExchange(new DefaultCamelContext()));
         assertBuyStocks(result);
     }
 
@@ -84,13 +86,14 @@ public class XmlBeansConverterTest extends CamelTestSupport {
         DocumentBuilder builder = factory.newDocumentBuilder();
         Document document = builder.parse(new InputSource(new StringReader(PAYLOAD)));
         
-        XmlObject result = XmlBeansConverter.toXmlObject(document);
+        XmlObject result = XmlBeansConverter.toXmlObject(document, new DefaultExchange(new DefaultCamelContext()));
         assertBuyStocks(result);
     }
 
     @Test
     public void toXmlObjectFromInputStream() throws IOException, XmlException {
-        XmlObject result = XmlBeansConverter.toXmlObject(new FileInputStream("src/test/data/buyStocks.xml"));
+        XmlObject result = XmlBeansConverter.toXmlObject(new FileInputStream("src/test/data/buyStocks.xml"),
+                new DefaultExchange(new DefaultCamelContext()));
         assertBuyStocks(result);
     }
 
@@ -102,19 +105,20 @@ public class XmlBeansConverterTest extends CamelTestSupport {
 
     @Test
     public void toXmlObjectFromByteArray() throws IOException, XmlException {
-        XmlObject result = XmlBeansConverter.toXmlObject(PAYLOAD.getBytes());
+        XmlObject result = XmlBeansConverter.toXmlObject(PAYLOAD.getBytes(), new DefaultExchange(new DefaultCamelContext()));
         assertBuyStocks(result);
     }
 
     @Test
     public void toXmlObjectFromByteBuffer() throws IOException, XmlException {
-        XmlObject result = XmlBeansConverter.toXmlObject(ByteBuffer.wrap(PAYLOAD.getBytes()));
+        XmlObject result = XmlBeansConverter.toXmlObject(ByteBuffer.wrap(PAYLOAD.getBytes()), new DefaultExchange(new DefaultCamelContext()));
         assertBuyStocks(result);
     }
 
     @Test
     public void toXmlObjectFromXMLStreamReader() throws IOException, XmlException {
-        XmlObject result = XmlBeansConverter.toXmlObject(new XMLStreamReader(new ByteArrayInputStream(PAYLOAD.getBytes()), false));
+        XmlObject result = XmlBeansConverter.toXmlObject(new XMLStreamReader(new ByteArrayInputStream(PAYLOAD.getBytes()), false),
+                new DefaultExchange(new DefaultCamelContext()));
         assertBuyStocks(result);
     }