You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by gn...@apache.org on 2006/08/19 20:49:25 UTC

svn commit: r432857 - /incubator/servicemix/trunk/servicemix-jsr181/src/main/java/org/apache/servicemix/jsr181/Jsr181ExchangeProcessor.java

Author: gnodet
Date: Sat Aug 19 11:49:24 2006
New Revision: 432857

URL: http://svn.apache.org/viewvc?rev=432857&view=rev
Log:
Do not use woodstox stax reader on dom, but use our own implementation to avoid a NPE (the location is used by jaxb2).
Use the SU classloader when processing an exchange so that the JAXB2 context can find the needed classes.

Modified:
    incubator/servicemix/trunk/servicemix-jsr181/src/main/java/org/apache/servicemix/jsr181/Jsr181ExchangeProcessor.java

Modified: incubator/servicemix/trunk/servicemix-jsr181/src/main/java/org/apache/servicemix/jsr181/Jsr181ExchangeProcessor.java
URL: http://svn.apache.org/viewvc/incubator/servicemix/trunk/servicemix-jsr181/src/main/java/org/apache/servicemix/jsr181/Jsr181ExchangeProcessor.java?rev=432857&r1=432856&r2=432857&view=diff
==============================================================================
--- incubator/servicemix/trunk/servicemix-jsr181/src/main/java/org/apache/servicemix/jsr181/Jsr181ExchangeProcessor.java (original)
+++ incubator/servicemix/trunk/servicemix-jsr181/src/main/java/org/apache/servicemix/jsr181/Jsr181ExchangeProcessor.java Sat Aug 19 11:49:24 2006
@@ -16,7 +16,6 @@
  */
 package org.apache.servicemix.jsr181;
 
-import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.util.Iterator;
 
@@ -28,15 +27,14 @@
 import javax.jbi.messaging.InOut;
 import javax.jbi.messaging.MessageExchange;
 import javax.jbi.messaging.NormalizedMessage;
-import javax.xml.stream.XMLInputFactory;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
 import javax.xml.transform.Source;
 import javax.xml.transform.TransformerException;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.stream.StreamResult;
 
 import org.apache.servicemix.common.ExchangeProcessor;
+import org.apache.servicemix.common.xbean.XBeanServiceUnit;
+import org.apache.servicemix.jbi.jaxp.StAXSourceTransformer;
 import org.apache.servicemix.jbi.jaxp.StringSource;
 import org.apache.servicemix.jsr181.xfire.JbiTransport;
 import org.codehaus.xfire.MessageContext;
@@ -53,12 +51,25 @@
 
     protected DeliveryChannel channel;
     protected Jsr181Endpoint endpoint;
+    protected StAXSourceTransformer transformer;
     
     public Jsr181ExchangeProcessor(Jsr181Endpoint endpoint) {
         this.endpoint = endpoint;
+        this.transformer = new StAXSourceTransformer();
     }
 
     public void process(MessageExchange exchange) throws Exception {
+        ClassLoader oldCl = Thread.currentThread().getContextClassLoader();
+        try {
+            ClassLoader classLoader = ((XBeanServiceUnit) endpoint.getServiceUnit()).getConfigurationClassLoader();
+            Thread.currentThread().setContextClassLoader(classLoader);
+            doProcess(exchange);
+        } finally {
+            Thread.currentThread().setContextClassLoader(oldCl);
+        }
+    }    
+        
+    protected void doProcess(MessageExchange exchange) throws Exception {
         if (exchange.getStatus() == ExchangeStatus.DONE) {
             return;
         } else if (exchange.getStatus() == ExchangeStatus.ERROR) {
@@ -125,14 +136,7 @@
     }
 
     protected XMLStreamReader getXMLStreamReader(Source source) throws TransformerException, XMLStreamException {
-        try {
-            return XMLInputFactory.newInstance().createXMLStreamReader(source);
-        } catch (Exception e) {
-            // ignore, as this method is not mandatory in stax
-        }
-        ByteArrayOutputStream buffer = new ByteArrayOutputStream();
-        TransformerFactory.newInstance().newTransformer().transform(source, new StreamResult(buffer));
-        return XMLInputFactory.newInstance().createXMLStreamReader(new ByteArrayInputStream(buffer.toByteArray()));
+        return transformer.toXMLStreamReader(source);
     }
     
     protected boolean isInAndOut(MessageExchange exchange) {