[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 <[email protected]> Authored: Wed Mar 25 16:19:16 2015 +0000 Committer: Willem Jiang <[email protected]> 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); }
