You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ch...@apache.org on 2007/09/17 19:00:16 UTC

svn commit: r576522 [1/3] - in /activemq/camel/trunk/components/camel-cxf: ./ src/main/java/org/apache/camel/component/cxf/ src/main/java/org/apache/camel/component/cxf/interceptors/ src/main/java/org/apache/camel/component/cxf/invoker/ src/main/java/o...

Author: chirino
Date: Mon Sep 17 10:00:08 2007
New Revision: 576522

URL: http://svn.apache.org/viewvc?rev=576522&view=rev
Log:
Patch - https://issues.apache.org/activemq/browse/CAMEL-121 Thanks Willem\!

Added:
    activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfMessageObserver.java   (with props)
    activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/DataFormat.java   (with props)
    activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/
    activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/AbstractInvokerInterceptor.java   (with props)
    activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/AbstractMessageInInterceptor.java   (with props)
    activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/AbstractMessageOutInterceptor.java   (with props)
    activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/DOMInInterceptor.java   (with props)
    activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/DOMOutInterceptor.java   (with props)
    activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/FaultOutInterceptor.java   (with props)
    activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/PayloadContentRedirectInterceptor.java   (with props)
    activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/PayloadInInterceptor.java   (with props)
    activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/RawMessageContentRedirectInterceptor.java   (with props)
    activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/RawMessageInInterceptor.java   (with props)
    activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/SoapMessageInInterceptor.java   (with props)
    activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/SoapMessageOutInterceptor.java   (with props)
    activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/XMLMessageInInterceptor.java   (with props)
    activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/XMLMessageOutInterceptor.java   (with props)
    activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/package.html   (with props)
    activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/invoker/
    activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/invoker/AbstractInvokingContext.java   (with props)
    activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/invoker/CxfClient.java   (with props)
    activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/invoker/CxfClientFactoryBean.java   (with props)
    activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/invoker/FaultChainInitiatorObserver.java   (with props)
    activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/invoker/InvokingContext.java   (with props)
    activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/invoker/InvokingContextFactory.java   (with props)
    activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/invoker/PayloadInvokingContext.java   (with props)
    activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/invoker/PayloadMessage.java   (with props)
    activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/invoker/RawMessageInvokingContext.java   (with props)
    activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/invoker/package.html   (with props)
    activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/phase/
    activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/phase/AbstractPhaseManagerImpl.java   (with props)
    activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/phase/FaultPayloadPhaseManagerImpl.java   (with props)
    activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/phase/PayloadPhaseManagerImpl.java   (with props)
    activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/phase/RawMessagePhaseManagerImpl.java   (with props)
    activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/phase/package.html   (with props)
    activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/util/
    activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/util/CxfEndpointUtils.java   (with props)
    activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/util/UriUtils.java   (with props)
    activemq/camel/trunk/components/camel-cxf/src/main/resources/org/
    activemq/camel/trunk/components/camel-cxf/src/main/resources/org/apache/
    activemq/camel/trunk/components/camel-cxf/src/main/resources/org/apache/camel/
    activemq/camel/trunk/components/camel-cxf/src/main/resources/org/apache/camel/component/
    activemq/camel/trunk/components/camel-cxf/src/main/resources/org/apache/camel/component/cxf/
    activemq/camel/trunk/components/camel-cxf/src/main/resources/org/apache/camel/component/cxf/interceptors/
    activemq/camel/trunk/components/camel-cxf/src/main/resources/org/apache/camel/component/cxf/interceptors/Messages.properties   (with props)
    activemq/camel/trunk/components/camel-cxf/src/main/resources/org/apache/camel/component/cxf/util/
    activemq/camel/trunk/components/camel-cxf/src/main/resources/org/apache/camel/component/cxf/util/Messages.properties   (with props)
    activemq/camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfPayLoadMessageRouterTest.java   (with props)
    activemq/camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfRawMessageRouterTest.java   (with props)
    activemq/camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/phase/
    activemq/camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/phase/PayloadPhaseManagerImplTest.java   (with props)
    activemq/camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/phase/RawMessagePhaseManagerImplTest.java   (with props)
    activemq/camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/util/
    activemq/camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/util/CxfEndpointUtilsTest.java   (with props)
Modified:
    activemq/camel/trunk/components/camel-cxf/pom.xml
    activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CamelInvoker.java
    activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfBinding.java
    activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfComponent.java
    activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfConstants.java
    activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfConsumer.java
    activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfEndpoint.java
    activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfExchange.java
    activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfMessage.java
    activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfProducer.java
    activemq/camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfProducerTest.java
    activemq/camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfRouterTest.java
    activemq/camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/HelloServiceImpl.java

Modified: activemq/camel/trunk/components/camel-cxf/pom.xml
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-cxf/pom.xml?rev=576522&r1=576521&r2=576522&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-cxf/pom.xml (original)
+++ activemq/camel/trunk/components/camel-cxf/pom.xml Mon Sep 17 10:00:08 2007
@@ -51,6 +51,13 @@
     </dependency>
 
     <dependency>
+      <groupId>commons-io</groupId>
+      <artifactId>commons-io</artifactId>
+      <version>${commons-io-version}</version>
+    </dependency>
+    
+
+    <dependency>
       <groupId>org.apache.cxf</groupId>
       <artifactId>cxf-rt-core</artifactId>
       <version>${cxf-version}</version>
@@ -79,6 +86,11 @@
     </dependency>
     <dependency>
       <groupId>org.apache.cxf</groupId>
+      <artifactId>cxf-rt-frontend-jaxws</artifactId>
+      <version>${cxf-version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.cxf</groupId>
       <artifactId>cxf-rt-management</artifactId>
       <version>${cxf-version}</version>
     </dependency>
@@ -144,6 +156,35 @@
     </dependency>
 
     <dependency>
+       <groupId>org.springframework</groupId>
+       <artifactId>spring-core</artifactId>
+       <version>2.0.5</version>
+       <scope>test</scope>
+    </dependency>
+
+    <dependency>
+       <groupId>org.springframework</groupId>
+       <artifactId>spring-beans</artifactId>
+       <version>2.0.5</version>
+       <scope>test</scope>
+     </dependency>
+    
+    <dependency>
+       <groupId>org.springframework</groupId>
+       <artifactId>spring-context</artifactId>
+       <version>2.0.5</version>
+       <scope>test</scope>
+     </dependency>
+
+
+    <dependency>
+       <groupId>org.springframework</groupId>
+       <artifactId>spring-web</artifactId>
+       <version>2.0.5</version>
+       <scope>test</scope>
+     </dependency>
+
+    <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
       <scope>test</scope>
@@ -172,7 +213,7 @@
           </includes>
           <excludes>
             <!-- TODO re-enable ASAP! -->
-            <exclude>**/CxfTest.*</exclude>
+            <exclude>**/CxfEndpointUtilsTest.*</exclude>
             <exclude>**/transport/*Test.*</exclude>
           </excludes>
         </configuration>

Modified: activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CamelInvoker.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CamelInvoker.java?rev=576522&r1=576521&r2=576522&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CamelInvoker.java (original)
+++ activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CamelInvoker.java Mon Sep 17 10:00:08 2007
@@ -16,25 +16,126 @@
  */
 package org.apache.camel.component.cxf;
 
+import java.io.InputStream;
 import java.lang.reflect.Method;
 import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
+import org.apache.camel.component.cxf.invoker.InvokingContext;
+import org.apache.cxf.endpoint.Client;
+import org.apache.cxf.endpoint.Endpoint;
 import org.apache.cxf.frontend.MethodDispatcher;
 import org.apache.cxf.helpers.CastUtils;
 import org.apache.cxf.message.Exchange;
+import org.apache.cxf.message.Message;
 import org.apache.cxf.message.MessageContentsList;
+import org.apache.cxf.message.MessageImpl;
 import org.apache.cxf.service.Service;
 import org.apache.cxf.service.invoker.AbstractInvoker;
 import org.apache.cxf.service.invoker.Invoker;
 import org.apache.cxf.service.model.BindingOperationInfo;
 
 public class CamelInvoker implements Invoker  {
+    private static final Logger LOG = Logger.getLogger(CamelInvoker.class.getName());
     private CxfConsumer cxfConsumer;
     public CamelInvoker(CxfConsumer consumer) {
         cxfConsumer = consumer;
     }
+    /**
+    * This method is called when the incoming message is to
+    * be passed into the camel processor. The return value is the response
+    * from the processor
+    * @param inMessage
+    * @return outMessage
+    */
+    public Message invoke(Message inMessage) {
+        System.out.println("invoke the message " + inMessage);
+        Exchange exchange = inMessage.getExchange();
+        //InvokingContext invokingContext = exchange.get(InvokingContext.class);
+                               
+        //Set Request Context into CXF Message
+        Map<String, Object> ctxContainer = new HashMap<String, Object>();
+        Map<String, Object> requestCtx = new HashMap<String, Object>();
+        ctxContainer.put(Client.REQUEST_CONTEXT, requestCtx);
+        updateContext(inMessage, requestCtx);
+        CxfEndpoint endpoint = (CxfEndpoint) cxfConsumer.getEndpoint();
+        CxfExchange cxfExchange = endpoint.createExchange(inMessage);
+        try {
+            cxfConsumer.getProcessor().process(cxfExchange);
+        } catch (Exception e) {
+            // catch the exception and send back to cxf client
+            e.printStackTrace();
+        }
+       
+        // make sure the client has retrun back the message
+        Message outMessage = getCxfMessage(cxfExchange, exchange);
+               
+        //Set Response Context into CXF Message
+        /*ctxContainer = (Map<String, Object>)outMessage.getProperty(CxfMessageAdapter.REQ_RESP_CONTEXT);
+        Map<String, Object> respCtx = (Map<String, Object>)ctxContainer.get(Client.RESPONSE_CONTEXT);
+        updateContext(respCtx, outMessage);*/
+       
+        return outMessage;
+    }
+    
+    public Message getCxfMessage(CxfExchange result, Exchange exchange) {        
+        Message outMessage = null;
+        if (result.isFailed()) {
+            CxfMessage fault = result.getFault();
+            outMessage = exchange.getInFaultMessage();
+            //REVISIT ?
+            if (outMessage == null) {
+                outMessage = new MessageImpl();
+                //outMessage.setExchange(exchange);
+                exchange.setInFaultMessage(outMessage);
+            }
+            Exception ex = (Exception) fault.getBody();
+            outMessage.setContent(Exception.class, ex);
+        } else {
+            if (LOG.isLoggable(Level.FINEST)) {
+                LOG.finest("Payload is a response.");
+            }
+            // get the payload message
+            outMessage = result.getOutMessage();
+            if (outMessage == null) {
+                Endpoint ep = exchange.get(Endpoint.class);                    
+                outMessage = ep.getBinding().createMessage();
+                exchange.setOutMessage(outMessage);
+            }
+        }
+        
+        return outMessage;
+    }
+    
+    @SuppressWarnings("unchecked")
+    public void updateContext(Map<String, Object> from, Map<String, Object> to) {
+        if (to != null && from != null) {
+            for (Iterator iter = from.entrySet().iterator(); iter.hasNext();) {
+                Map.Entry entry = (Map.Entry) iter.next();
+                String key = (String)entry.getKey();
 
+                //Requires deep copy.
+                if (!(Message.INBOUND_MESSAGE.equals(key)
+                      || Message.REQUESTOR_ROLE.equals(key)
+                      || Message.PROTOCOL_HEADERS.equals(key))) {
+                    to.put(key, entry.getValue());
+                }
+            }
+        }
+    }
+
+    /**
+     * This method is called when the incoming pojo invocation is called
+     * from the service invocation interceptor. The return value is the response
+     * from the processor
+     * @param inMessage
+     * @return outMessage
+     */
     public Object invoke(Exchange exchange, Object o) {
         BindingOperationInfo bop = exchange.get(BindingOperationInfo.class);
         MethodDispatcher md = (MethodDispatcher) 
@@ -48,15 +149,10 @@
             params = new MessageContentsList(o);
         }
         
-        final List<Object> messageBody = new ArrayList<Object>(params.size()+1);
-        messageBody.add(m.getName());
-        for (Object obj: params) {
-            messageBody.add(obj);
-        }  
-        
         CxfEndpoint endpoint = (CxfEndpoint) cxfConsumer.getEndpoint();
         CxfExchange cxfExchange = endpoint.createExchange(exchange.getInMessage());
-        cxfExchange.getIn().setBody(messageBody);
+        cxfExchange.getIn().setHeader(CxfConstants.OPERATION_NAME, m.getName());
+        cxfExchange.getIn().setBody(params);
         
         
         try {
@@ -65,8 +161,9 @@
             // catch the exception and send back to cxf client
             e.printStackTrace();
         }
-        System.out.println(cxfExchange.getOut().getBody());
+        //System.out.println(cxfExchange.getOut().getBody());
         //TODO deal with the paraments that contains holders
+        //TODO deal with the fault message
         Object[] result = (Object[])cxfExchange.getOut().getBody();
         return result;
         

Modified: activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfBinding.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfBinding.java?rev=576522&r1=576521&r2=576522&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfBinding.java (original)
+++ activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfBinding.java Mon Sep 17 10:00:08 2007
@@ -36,17 +36,19 @@
 
     protected Object getBody(Message message) {
         Set<Class<?>> contentFormats = message.getContentFormats();
-        for (Class<?> contentFormat : contentFormats) {            
-            Object answer = message.getContent(contentFormat);
-            if (answer != null) {
-                return answer;
+        if (contentFormats != null) {
+            for (Class<?> contentFormat : contentFormats) {            
+                Object answer = message.getContent(contentFormat);
+                if (answer != null) {
+                    return answer;
+                }
             }
-        }
+        }    
         return null;
     }
 
-    public MessageImpl createCxfMessage(CxfExchange exchange) {
-        MessageImpl answer = (MessageImpl) exchange.getInMessage();
+    public Message createCxfMessage(CxfExchange exchange) {
+        Message answer = exchange.getInMessage();
 
         // CXF uses the stax which is based on the stream API to parser the XML, so
         // the CXF transport is also based on the stream API.
@@ -60,15 +62,19 @@
         }
         if (body instanceof InputStream) {
         	answer.setContent(InputStream.class, body);
+                // we need copy context 
         } else if (body instanceof List) {
         	//just set the operation's parament
         	answer.setContent(List.class, body);
+                //just set the method name
+                answer.setContent(String.class, in.getHeader(CxfConstants.OPERATION_NAME));
         }
         
         
         return answer;
     }
-
+    
+   
     public void storeCxfResponse(CxfExchange exchange, Message response) {
         // no need to process headers as we use the CXF message
         CxfMessage out = exchange.getOut();

Modified: activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfComponent.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfComponent.java?rev=576522&r1=576521&r2=576522&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfComponent.java (original)
+++ activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfComponent.java Mon Sep 17 10:00:08 2007
@@ -43,6 +43,7 @@
         // now we need to add the address, endpoint name, wsdl url or the SEI to build up a endpoint
         CxfEndpoint result = new CxfEndpoint(uri, remaining, this);        
         setProperties(result, parameters);
+        // we can check the endpoint integration here
         return result;
     }
 

Modified: activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfConstants.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfConstants.java?rev=576522&r1=576521&r2=576522&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfConstants.java (original)
+++ activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfConstants.java Mon Sep 17 10:00:08 2007
@@ -29,6 +29,8 @@
     String ADDRESS = "address";
     String SERVICE_NAME = "serviceName";
     String PORT_NAME = "portName";
+    String PROTOCOL_NAME_RES = "res";
+    String OPERATION_NAME = "operationName";
     // service name -- come from the wsdl   
 }
 

Modified: activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfConsumer.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfConsumer.java?rev=576522&r1=576521&r2=576522&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfConsumer.java (original)
+++ activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfConsumer.java Mon Sep 17 10:00:08 2007
@@ -16,9 +16,17 @@
  */
 package org.apache.camel.component.cxf;
 
+import java.net.URI;
+
 import org.apache.camel.Processor;
+import org.apache.camel.component.cxf.util.CxfEndpointUtils;
+import org.apache.camel.component.cxf.util.UriUtils;
 import org.apache.camel.impl.DefaultConsumer;
+import org.apache.cxf.Bus;
+import org.apache.cxf.BusFactory;
+import org.apache.cxf.common.classloader.ClassLoaderUtils;
 import org.apache.cxf.endpoint.Server;
+import org.apache.cxf.endpoint.ServerImpl;
 import org.apache.cxf.frontend.ServerFactoryBean;
 import org.apache.cxf.message.Message;
 import org.apache.cxf.transport.Destination;
@@ -33,25 +41,39 @@
 public class CxfConsumer extends DefaultConsumer<CxfExchange> {
     private CxfEndpoint endpoint;    
     private Server server;
-    private Destination destination;
+    
 
-    public CxfConsumer(CxfEndpoint endpoint, Processor processor) throws ClassNotFoundException {
+    public CxfConsumer(CxfEndpoint endpoint, Processor processor) throws Exception {
        
-        super(endpoint, processor);
-        System.out.println(processor.toString());
+        super(endpoint, processor);        
         this.endpoint = endpoint;
-        //we setup the interceptors by the endpoint configuration
-        //create server here, now we just use the simple front-end        
-        ServerFactoryBean svrBean = new ServerFactoryBean();
-        Class serviceClass = Class.forName(endpoint.getServiceClass());        
-        svrBean.setAddress(endpoint.getAddress());
-        svrBean.setServiceClass(serviceClass);
-        if (endpoint.isInvoker()) {
-            System.out.println("setup the invoker ");
-            svrBean.setInvoker(new CamelInvoker(this));
-        }    
-        svrBean.setStart(false);
-        server = svrBean.create();
+        try {
+            // now we just use the default bus here   
+            Bus bus = BusFactory.getDefaultBus();
+            Class serviceClass = ClassLoaderUtils.loadClass(endpoint.getServiceClass(), this.getClass()); 
+            ServerFactoryBean svrBean = CxfEndpointUtils.getServerFactoryBean(serviceClass);                           
+            svrBean.setAddress(endpoint.getAddress());
+            svrBean.setServiceClass(serviceClass);
+            if (endpoint.getWsdlURL() != null) {                
+                svrBean.setWsdlURL(endpoint.getWsdlURL());
+            }
+            DataFormat dataFormat = CxfEndpointUtils.getDataFormat(endpoint);
+            if (dataFormat.equals(DataFormat.POJO)) {
+                svrBean.setInvoker(new CamelInvoker(this));
+            }
+            svrBean.setBus(bus);
+            svrBean.setStart(false);
+            server = svrBean.create();            
+            if (!dataFormat.equals(DataFormat.POJO)) {
+                CxfMessageObserver observer = new CxfMessageObserver(this, server.getEndpoint(), bus , dataFormat);
+                //set the message observer for the Message and PayLoad mode message 
+                ServerImpl serverImpl = (ServerImpl)server;
+                serverImpl.setMessageObserver(observer);
+            } 
+            
+        } catch (Exception ex) {
+            
+        }
     }
 
     @Override
@@ -65,6 +87,10 @@
     protected void doStop() throws Exception {
         server.stop();
         super.doStop();
+    }
+    
+    public CxfEndpoint getEndpoint() {
+        return endpoint;
     }
 
     

Modified: activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfEndpoint.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfEndpoint.java?rev=576522&r1=576521&r2=576522&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfEndpoint.java (original)
+++ activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfEndpoint.java Mon Sep 17 10:00:08 2007
@@ -37,10 +37,11 @@
     private String wsdlURL;
     private String serviceClass;
     private CxfBinding binding;
-    private QName portName;
-    private QName serviceName;
+    private String portName;
+    private String serviceName;
+    private String dataFormat;
     private boolean inOut = true;
-    private boolean invoker = true;
+    
 
     public CxfEndpoint(String uri, String address, CxfComponent component) {
         super(uri, component);
@@ -67,15 +68,16 @@
     public CxfExchange createExchange(Message inMessage) {
         return new CxfExchange(getContext(), getExchangePattern(), getBinding(), inMessage);
     }
-    
-    public boolean isInvoker() {
-        return invoker;
+           
+    public String getDataFormat() {
+        return dataFormat;
     }
     
-    public void setInvoker(boolean invoker) {
-        this.invoker = invoker;
+    public void setDataFormat(String format) {
+        dataFormat = format;
     }
     
+        
     public String getAddress() {
     	return address;
     }
@@ -96,19 +98,19 @@
         serviceClass = className;
     }
     
-    public void setPortName(QName port) {
+    public void setPortName(String port) {
         portName = port;
     }
     
-    public void setServiceName(QName service) {
+    public void setServiceName(String service) {
         serviceName = service;
     }
     
-    public QName getPortName(){
+    public String getPortName(){
         return portName;
     }
     
-    public QName getServiceName() {
+    public String getServiceName() {
         return serviceName;
     }
 

Modified: activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfExchange.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfExchange.java?rev=576522&r1=576521&r2=576522&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfExchange.java (original)
+++ activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfExchange.java Mon Sep 17 10:00:08 2007
@@ -19,6 +19,7 @@
 import org.apache.camel.CamelContext;
 import org.apache.camel.ExchangePattern;
 import org.apache.camel.impl.DefaultExchange;
+import org.apache.camel.impl.DefaultMessage;
 import org.apache.cxf.message.Exchange;
 import org.apache.cxf.message.Message;
 import org.apache.cxf.transport.Conduit;
@@ -42,7 +43,9 @@
 
         setIn(new CxfMessage(exchange.getInMessage()));
         setOut(new CxfMessage(exchange.getOutMessage()));
-        setFault(new CxfMessage(exchange.getInFaultMessage()));
+        if (exchange.getInFaultMessage() != null) {
+            setFault(new CxfMessage(exchange.getInFaultMessage()));
+        }    
     }
 
     public CxfExchange(CamelContext context, ExchangePattern pattern, CxfBinding binding) {
@@ -57,7 +60,9 @@
         setIn(new CxfMessage(inMessage));
         if (exchange != null) {
             setOut(new CxfMessage(exchange.getOutMessage()));
-            setFault(new CxfMessage(exchange.getInFaultMessage()));
+            if (exchange.getInFaultMessage() != null) {
+                setFault(new CxfMessage(exchange.getInFaultMessage()));
+            }    
         }
     }
 
@@ -80,6 +85,12 @@
     public CxfMessage getFault() {
         return (CxfMessage) super.getFault();
     }
+    
+    @Override
+    protected org.apache.camel.Message createFaultMessage() {
+        return new CxfMessage();
+    }
+
 
     /**
      * @return the Camel <-> JBI binding

Modified: activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfMessage.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfMessage.java?rev=576522&r1=576521&r2=576522&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfMessage.java (original)
+++ activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfMessage.java Mon Sep 17 10:00:08 2007
@@ -36,6 +36,9 @@
     }
 
     public CxfMessage(Message cxfMessage) {
+        if (cxfMessage == null) {
+            this.cxfMessage = new MessageImpl();
+        }
         this.cxfMessage = cxfMessage;
     }
 

Added: activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfMessageObserver.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfMessageObserver.java?rev=576522&view=auto
==============================================================================
--- activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfMessageObserver.java (added)
+++ activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfMessageObserver.java Mon Sep 17 10:00:08 2007
@@ -0,0 +1,85 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.cxf;
+
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import org.apache.camel.component.cxf.invoker.InvokingContext;
+import org.apache.camel.component.cxf.invoker.InvokingContextFactory;
+
+import org.apache.cxf.Bus;
+import org.apache.cxf.endpoint.Endpoint;
+import org.apache.cxf.endpoint.EndpointImpl;
+import org.apache.cxf.message.Exchange;
+import org.apache.cxf.message.ExchangeImpl;
+import org.apache.cxf.message.Message;
+import org.apache.cxf.phase.PhaseInterceptorChain;
+import org.apache.cxf.transport.ChainInitiationObserver;
+
+public class CxfMessageObserver extends ChainInitiationObserver {
+    private static final Logger LOG = Logger.getLogger(ChainInitiationObserver.class.getName());
+    private CxfConsumer cxfConsumer;
+    private DataFormat dataFormat;
+    private CamelInvoker invoker;
+    
+    
+    public CxfMessageObserver(CxfConsumer consumer, Endpoint endpoint, Bus bus,
+            DataFormat dataFormat) {
+        super(endpoint, bus);
+        cxfConsumer = consumer;
+        this.dataFormat = dataFormat;
+        invoker = new CamelInvoker(consumer);
+    }
+
+    protected void setExchangeProperties(Exchange exchange, Message m) {
+        super.setExchangeProperties(exchange, m);        
+        exchange.put(CxfConsumer.class, cxfConsumer);
+        exchange.put(Bus.class, bus);
+        exchange.put(Endpoint.class, endpoint);
+        exchange.put(InvokingContext.class, InvokingContextFactory.createContext(dataFormat));
+        exchange.put(CamelInvoker.class, invoker);
+    }
+    
+    public void onMessage(Message m) {
+        if (LOG.isLoggable(Level.FINER)) {
+            LOG.fine("Observed Client request at router's endpoint.  Request message: " + m);
+        }
+        Message message = endpoint.getBinding().createMessage(m);
+        message.put(Message.INBOUND_MESSAGE, Boolean.TRUE);
+        Exchange exchange = message.getExchange();
+        if (exchange == null) {
+            exchange = new ExchangeImpl();
+            exchange.setInMessage(message);
+        }
+        setExchangeProperties(exchange, message);
+        
+        InvokingContext invokingContext = exchange.get(InvokingContext.class);
+        assert invokingContext != null;
+        invokingContext.setEndpointFaultObservers((EndpointImpl)endpoint, bus);
+        
+        if (LOG.isLoggable(Level.FINEST)) {
+            LOG.finest("Build inbound interceptor chain and inject routing interceptor");
+        }
+        // now we just support the raw message and the payload message
+        PhaseInterceptorChain chain = invokingContext.getRequestInInterceptorChain(exchange);
+
+        message.setInterceptorChain(chain);
+        chain.setFaultObserver(endpoint.getOutFaultObserver());
+        chain.doIntercept(message);        
+    }
+}

Propchange: activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfMessageObserver.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfMessageObserver.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfProducer.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfProducer.java?rev=576522&r1=576521&r2=576522&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfProducer.java (original)
+++ activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfProducer.java Mon Sep 17 10:00:08 2007
@@ -18,18 +18,30 @@
 
 import java.util.List;
 
+import org.apache.camel.CamelException;
 import org.apache.camel.Exchange;
 import org.apache.camel.RuntimeCamelException;
+import org.apache.camel.component.cxf.invoker.CxfClient;
+import org.apache.camel.component.cxf.invoker.CxfClientFactoryBean;
+import org.apache.camel.component.cxf.invoker.InvokingContext;
+import org.apache.camel.component.cxf.util.CxfEndpointUtils;
 import org.apache.camel.impl.DefaultProducer;
 import org.apache.camel.util.ObjectHelper;
 import org.apache.cxf.Bus;
 import org.apache.cxf.BusFactory;
+import org.apache.cxf.binding.Binding;
+import org.apache.cxf.binding.BindingFactory;
+import org.apache.cxf.binding.BindingFactoryManager;
+import org.apache.cxf.common.classloader.ClassLoaderUtils;
 import org.apache.cxf.endpoint.Client;
+import org.apache.cxf.endpoint.Endpoint;
 import org.apache.cxf.frontend.ClientFactoryBean;
 import org.apache.cxf.message.Message;
 import org.apache.cxf.message.MessageImpl;
+import org.apache.cxf.service.model.BindingOperationInfo;
 import org.apache.cxf.transport.Conduit;
 
+import java.io.InputStream;
 import java.net.MalformedURLException;
 
 /**
@@ -37,32 +49,65 @@
  * 
  * @version $Revision$
  */
-public class CxfProducer extends DefaultProducer {
+public class CxfProducer extends DefaultProducer <CxfExchange> {
     private CxfEndpoint endpoint;
-    private Client client;    
-    private Conduit conduit;
+    private Client client;
+    private DataFormat dataFormat;
+    
     
 
-    public CxfProducer(CxfEndpoint endpoint) throws MalformedURLException {
+    public CxfProducer(CxfEndpoint endpoint) throws CamelException {
         super(endpoint);
         this.endpoint = endpoint;
-        client = createClient();
+        dataFormat = CxfEndpointUtils.getDataFormat(endpoint);
+        
+        if (dataFormat.equals(DataFormat.POJO)) {
+            client = createClientFormClientFactoryBean(null);
+        } else {
+            // create CxfClient for message
+            client = createClientForStreamMessge();           
+        }
     }
     
-    private Client createClient() throws MalformedURLException {
+    private Client createClientForStreamMessge() throws CamelException {
+        ClientFactoryBean cfb = new CxfClientFactoryBean();
+        return createClientFormClientFactoryBean(cfb);
+    }
+   
+    //If cfb is null ,we will try to find a right cfb to use.    
+    private Client createClientFormClientFactoryBean(ClientFactoryBean cfb) throws CamelException {
+        //TODO we can get also the client from spring context       
         Bus bus = BusFactory.getDefaultBus();
-        // setup the ClientFactoryBean with endpoint
-        ClientFactoryBean cfb = new ClientFactoryBean();
-        cfb.setBus(bus);
-        cfb.setAddress(endpoint.getAddress());
-        if (null != endpoint.getServiceClass()) {            
-            cfb.setServiceClass(ObjectHelper.loadClass(endpoint.getServiceClass()));
+        // setup the ClientFactoryBean with endpoint, 
+        // we need to choice the right front end to create the clientFactoryBean
+        
+        if (null != endpoint.getServiceClass()) {
+            try {
+                Class serviceClass = ClassLoaderUtils.loadClass(endpoint.getServiceClass(), this.getClass());
+                if (cfb == null) {
+                    cfb = CxfEndpointUtils.getClientFactoryBean(serviceClass);
+                }                            
+                cfb.setAddress(endpoint.getAddress());
+                if (null != endpoint.getServiceClass()) {            
+                    cfb.setServiceClass(ObjectHelper.loadClass(endpoint.getServiceClass()));
+                } 
+                if (null != endpoint.getWsdlURL()) {
+                    cfb.setWsdlURL(endpoint.getWsdlURL());
+                }
+            } catch (Exception ex) {
+                // rethrow the exception out
+            }
+        } else { 
+            if (cfb == null) {
+                cfb = new ClientFactoryBean();
+            }    
+            if (null != endpoint.getWsdlURL()) {
+                cfb.setWsdlURL(endpoint.getWsdlURL());
+            } else {
+                // throw the exception for insufficiency of the endpoint info
+            }
         }
-        if (null != endpoint.getWsdlURL()) {
-            cfb.setWsdlURL(endpoint.getWsdlURL());
-        }       
-        // there may other setting work
-        // create client 
+        cfb.setBus(bus);        
         return cfb.create();
     }
    
@@ -72,38 +117,60 @@
     }
 
     public void process(CxfExchange exchange) {
+        CxfBinding cxfBinding = endpoint.getBinding();
+        Message inMessage = cxfBinding.createCxfMessage(exchange);
         try {
-            CxfBinding binding = endpoint.getBinding();
-            MessageImpl m = binding.createCxfMessage(exchange);
-            //InputStream is = m.getContent(InputStream.class);
-            // now we just deal with the POJO invocations 
-            List paraments = m.getContent(List.class);
-            Message response = new MessageImpl();            
-            if (paraments != null) {
-            	String operation = (String)paraments.get(0);
-            	Object[] args = new Object[paraments.size()-1];
-            	for(int i = 0 ; i < paraments.size()-1 ; i++) {            		
-            		args[i] = paraments.get(i+1);
-            	}
-            	// now we just deal with the invoking the paraments
-            	Object[] result = client.invoke(operation, args);                
-            	response.setContent(Object[].class, result);
-                binding.storeCxfResponse(exchange, response);
-            }          	
-            
+            if (dataFormat.equals(DataFormat.POJO)) {
+                //InputStream is = m.getContent(InputStream.class);
+                // now we just deal with the POJO invocations 
+                List paraments = inMessage.getContent(List.class);
+                String operation = inMessage.getContent(String.class);
+                Message response = new MessageImpl();            
+                if (operation != null && paraments != null) {                
+                  	// now we just deal with the invoking the paraments
+                  	Object[] result = client.invoke(operation, paraments.toArray());                
+                   	response.setContent(Object[].class, result);
+                    cxfBinding.storeCxfResponse(exchange, response);
+                }  
+            } else {
+                // get the invocation context
+                org.apache.cxf.message.Exchange ex = exchange.getExchange();
+                InvokingContext invokingContext = ex.get(InvokingContext.class);
+                Object params = invokingContext.getRequestContent(inMessage);
+                // invoke the stream message with the exchange context
+                CxfClient cxfClient = (CxfClient) client;
+                // invoke the message
+                //TODO need setup the call context here
+                //TODO need to handle the one way message
+                Object result = cxfClient.dispatch(params, null, ex);
+                System.out.println("the result object is " + result);
+                // need to get the binding object to create the message
+                BindingOperationInfo boi = ex.get(BindingOperationInfo.class);
+                Message response = null;
+                System.out.println("the boi is " + boi);
+                if (boi == null) {
+                    // it should be the raw message                    
+                    response = new MessageImpl(); 
+                } else {
+                    // create the message here
+                    Endpoint ep = ex.get(Endpoint.class);                    
+                    response = ep.getBinding().createMessage();
+                }                
+                response.setExchange(ex);
+                ex.setOutMessage(response);                
+                invokingContext.setResponseContent(response, result);
+                cxfBinding.storeCxfResponse(exchange, response);
+            }
         } catch (Exception e) {
+            //TODO add the falut message handling work
             throw new RuntimeCamelException(e);
-        }   
+        }     
                 
     }
 
     @Override
     protected void doStart() throws Exception {
-        super.doStart();
-                
-        client = createClient();
-        conduit = client.getConduit();
-        
+        super.doStart(); 
     }
 
     @Override

Added: activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/DataFormat.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/DataFormat.java?rev=576522&view=auto
==============================================================================
--- activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/DataFormat.java (added)
+++ activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/DataFormat.java Mon Sep 17 10:00:08 2007
@@ -0,0 +1,45 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.cxf;
+
+/**
+ * The data format the user expoects to see at the camel cxf components.  It can be
+ * configured as a property (DataFormat) in the Camel cxf endpoint.
+ */
+public enum DataFormat {
+
+    /**
+     * PAYLOAD is the message payload of the message after message configured in
+     * the CXF endpoint is applied.  Streaming and non-streaming are both
+     * supported.
+     */
+    PAYLOAD,
+
+    /**
+     * MESSAGE is the raw message that is received from the transport layer.
+     * Streaming and non-streaming are both supported.
+     */
+    MESSAGE,
+
+    /**
+     * POJOs (Plain old Java objects) are the Java parameters to the method
+     * it is invoking on the target server.  The "serviceClass" property
+     * must be included in the endpoint.  Streaming is not available for this
+     * data format.
+     */
+    POJO
+}

Propchange: activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/DataFormat.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/DataFormat.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/AbstractInvokerInterceptor.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/AbstractInvokerInterceptor.java?rev=576522&view=auto
==============================================================================
--- activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/AbstractInvokerInterceptor.java (added)
+++ activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/AbstractInvokerInterceptor.java Mon Sep 17 10:00:08 2007
@@ -0,0 +1,123 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.cxf.interceptors;
+
+import java.io.IOException;
+import java.util.logging.Logger;
+
+import org.apache.camel.component.cxf.CamelInvoker;
+import org.apache.camel.component.cxf.invoker.InvokingContext;
+import org.apache.cxf.endpoint.ConduitSelector;
+import org.apache.cxf.endpoint.PreexistingConduitSelector;
+import org.apache.cxf.interceptor.Fault;
+import org.apache.cxf.interceptor.InterceptorChain;
+import org.apache.cxf.message.Exchange;
+import org.apache.cxf.message.Message;
+import org.apache.cxf.phase.AbstractPhaseInterceptor;
+import org.apache.cxf.service.model.BindingMessageInfo;
+import org.apache.cxf.service.model.BindingOperationInfo;
+import org.apache.cxf.transport.Conduit;
+import org.apache.cxf.ws.addressing.EndpointReferenceType;
+
+/**
+ * This is the base class for routing interceptors that can intercept and forward
+ * message to router as different phases.
+ *
+ */
+public abstract class AbstractInvokerInterceptor extends AbstractPhaseInterceptor<Message> {
+    public static final String ROUTING_INERCEPTOR_PHASE = "Routing-Phase";
+    public static final String BUNDLE = "wsdl-cxf"; 
+    public AbstractInvokerInterceptor(String phase) {
+        super(phase);
+    }
+    
+    private boolean isRequestor(Message message) {
+        return Boolean.TRUE.equals(message.get(Message.REQUESTOR_ROLE));
+    }
+    
+    /**
+     * Send the intercepted message to router
+     */
+    @SuppressWarnings("unchecked")
+    public void handleMessage(Message inMessage) throws Fault {
+        if (isRequestor(inMessage)) {
+            return;
+        }
+
+        Exchange exchange = inMessage.getExchange();
+        Message outMessage = null;
+        try {
+            CamelInvoker invoker = exchange.get(CamelInvoker.class);
+            outMessage = invoker.invoke(inMessage);
+        } catch (Exception e) {
+            throw new Fault(e);
+        }
+
+        // set back channel conduit in the exchange if it is not present
+        setBackChannelConduit(exchange, outMessage);
+        
+        Exception ex = outMessage.getContent(Exception.class);
+        if (ex != null) {
+            if (!(ex instanceof Fault)) {
+                ex = new Fault(ex); 
+            }
+            throw (Fault)ex;
+        }
+
+        outMessage.put(Message.INBOUND_MESSAGE, Boolean.FALSE);
+        BindingOperationInfo boi = exchange.get(BindingOperationInfo.class);
+        if (boi != null) {
+            exchange.put(BindingMessageInfo.class, boi.getOutput());
+        }
+
+        InvokingContext invokingContext = exchange.get(InvokingContext.class);
+        assert invokingContext != null;
+        
+        InterceptorChain chain = invokingContext.getResponseOutInterceptorChain(exchange);
+        if (chain != null) {
+            outMessage.setInterceptorChain(chain);
+            
+            //Initiate the OutBound Chain.
+            chain.doIntercept(outMessage);
+        }                
+    }
+    
+    /**
+     * Creates a conduit if not present on the exchange. outMessage or faultMessage
+     * It will create a back channel in PAYLOAD and MESSAGE case.
+     * POJO case will have a coduit due to OutgoingChainInterceptor in PRE_INVOKE Phase
+     */
+
+    protected void setBackChannelConduit(Exchange ex, Message message) throws Fault {
+        Conduit conduit = ex.getConduit(message);
+        if (conduit == null) {
+            try {
+                EndpointReferenceType target =
+                    ex.get(EndpointReferenceType.class);
+                conduit = ex.getDestination().getBackChannel(ex.getInMessage(), null, target);
+                ex.put(ConduitSelector.class,
+                       new PreexistingConduitSelector(conduit));
+            } catch (IOException e) {
+                throw new Fault(e);
+            }
+        }
+        
+        assert conduit != null;
+    }
+    
+    protected abstract Logger getLogger();
+}

Propchange: activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/AbstractInvokerInterceptor.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/AbstractInvokerInterceptor.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/AbstractMessageInInterceptor.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/AbstractMessageInInterceptor.java?rev=576522&view=auto
==============================================================================
--- activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/AbstractMessageInInterceptor.java (added)
+++ activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/AbstractMessageInInterceptor.java Mon Sep 17 10:00:08 2007
@@ -0,0 +1,185 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.cxf.interceptors;
+
+import java.util.List;
+import java.util.ResourceBundle;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.xml.namespace.QName;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+import org.apache.cxf.common.i18n.BundleUtils;
+import org.apache.cxf.common.logging.LogUtils;
+import org.apache.cxf.endpoint.Endpoint;
+import org.apache.cxf.interceptor.Fault;
+import org.apache.cxf.message.Exchange;
+import org.apache.cxf.message.Message;
+import org.apache.cxf.phase.AbstractPhaseInterceptor;
+import org.apache.cxf.service.model.BindingInfo;
+import org.apache.cxf.service.model.BindingMessageInfo;
+import org.apache.cxf.service.model.BindingOperationInfo;
+import org.apache.cxf.service.model.OperationInfo;
+import org.apache.cxf.staxutils.StaxUtils;
+
+/**
+ * This is the base class for message interceptors that intercepts message as DOM content
+ * infers the BindingOperationInfo and then set the
+ *
+ */
+public abstract class AbstractMessageInInterceptor<T extends Message> 
+       extends AbstractPhaseInterceptor<T> {
+    private static final Logger LOG = LogUtils.getL7dLogger(AbstractMessageInInterceptor.class);
+
+    public AbstractMessageInInterceptor(String phase) {
+        super(phase);
+    }
+
+    protected boolean isRequestor(Message message) {
+        return Boolean.TRUE.equals(message.get(Message.REQUESTOR_ROLE));
+    }
+
+   
+
+    /**
+     * Infer the OperationInfo from the XML Document and get the list of 
+     * parts as DOM Element
+     */
+    public void handleMessage(T message) throws Fault {
+        Logger logger = getLogger();
+        
+        if (isFaultMessage(message)) {
+            message.getInterceptorChain().abort();
+            Endpoint ep = message.getExchange().get(Endpoint.class);
+            if (ep.getInFaultObserver() != null) {
+                ep.getInFaultObserver().onMessage(message);
+                return;
+            }
+            //Fault f = createFault(message, payloadEl);
+            //message.setContent(Exception.class, f);
+            //return;
+        }
+
+        Document document = createDOMMessage(message);
+        //Document document = message.getContent(Document.class);
+        Element payloadEl = (Element)document.getChildNodes().item(0);
+        
+        Exchange ex = message.getExchange();
+        BindingOperationInfo boi = ex.get(BindingOperationInfo.class);
+        if (boi == null) {
+            BindingInfo bi = ex.get(BindingInfo.class);
+            if (bi == null) {
+                Endpoint ep = ex.get(Endpoint.class);
+                bi = ep.getEndpointInfo().getBinding();
+                ex.put(BindingInfo.class, bi);
+            }
+            // handling inbound message
+            if (logger.isLoggable(Level.INFO)) {
+                logger.info("AbstractRoutingMessageInInterceptor Infer BindingOperationInfo.");
+            }
+            
+            boi = getBindingOperation(message, document);
+
+            if (boi == null) {
+                QName startQName = new QName(payloadEl.getNamespaceURI(), payloadEl.getLocalName());
+                System.out.println("StartQName " + startQName);
+                throw new Fault(new org.apache.cxf.common.i18n.Message(
+                                "REQ_NOT_UNDERSTOOD", LOG, startQName));
+            }
+            
+            if (boi != null) {
+                ex.put(BindingOperationInfo.class, boi);
+                ex.put(OperationInfo.class, boi.getOperationInfo());
+                ex.setOneWay(boi.getOperationInfo().isOneWay());
+                if (logger.isLoggable(Level.INFO)) {
+                    logger.info("DOMInInterceptor- BindingOperation is:" + boi.getName());
+                }                
+            }
+        }
+
+        BindingMessageInfo bmi = isRequestor(message) ?  boi.getOutput() : boi.getInput();
+        List<Element> partList = getPartList(message, payloadEl, bmi);        
+        message.put(List.class, partList);
+        
+        Element header = getHeader(message);
+        message.put(Element.class, header);
+    }
+
+    /**
+     * This method is called to convert a incoming message format e.g Stax Stream
+     * to a DOM Tree. Default Implementation converts Stax Stream to a DOM
+     * @param inMessage
+     * @param Document
+     */
+    protected Document createDOMMessage(T message) {
+        Document doc = null;
+        try {
+            if (getLogger().isLoggable(Level.INFO)) {
+                getLogger().info("AbstractMessageInInterceptor Converting Stax Stream to DOM");
+            }
+            XMLStreamReader xsr = message.getContent(XMLStreamReader.class);            
+            doc = StaxUtils.read(xsr);
+        } catch (XMLStreamException xe) {
+            throw new Fault(new org.apache.cxf.common.i18n.Message("STAX_READ_EXC", LOG), xe);
+        }
+        return doc;
+    }
+    
+    protected abstract Logger getLogger();
+
+    /**
+     * This method is called on incoming to check if it is a fault.
+     * @param inMessage
+     * @param boolean
+     */
+    protected abstract boolean isFaultMessage(T message);
+
+    /**
+     * This method is called when the routing message interceptor has received a inbound message
+     * It infers the binding operation by matching the root Element with a binding operation
+     * from the service model.
+     * @param inMessage
+     * @param resultPayload
+     */
+    protected abstract BindingOperationInfo getBindingOperation(T inMessage, Document document);
+
+    /**
+     * This method is called when the routing message interceptor has intercepted a inbound
+     * message as a DOM Content.  It retreives the message parts as DOM Element
+     * and returns a List<Element>
+     * @param inMessage
+     * @param rootElement
+     * @param bindingMessageInfo
+     * @return List<Element>
+     */
+    protected abstract List<Element> getPartList(T inMessage, Element rootElement, BindingMessageInfo boi);
+
+    /**
+     * This method is called when the routing message interceptor has intercepted a inbound
+     * message as a DOM Content.  It retreives the header parts as DOM Element
+     * and returns a Element.
+     * @param inMessage
+     * @return Element
+     */
+    protected abstract Element getHeader(T inMessage);
+
+}

Propchange: activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/AbstractMessageInInterceptor.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/AbstractMessageInInterceptor.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/AbstractMessageOutInterceptor.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/AbstractMessageOutInterceptor.java?rev=576522&view=auto
==============================================================================
--- activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/AbstractMessageOutInterceptor.java (added)
+++ activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/AbstractMessageOutInterceptor.java Mon Sep 17 10:00:08 2007
@@ -0,0 +1,82 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.cxf.interceptors;
+
+import java.util.List;
+//import java.util.ResourceBundle;
+//import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.xml.namespace.QName;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+
+//import org.apache.cxf.common.i18n.BundleUtils;
+import org.apache.cxf.helpers.DOMUtils;
+import org.apache.cxf.message.Message;
+import org.apache.cxf.phase.AbstractPhaseInterceptor;
+
+/**
+ * This is the base class for message interceptors that intercepts
+ * binding specific headers and message parts as DOM Element.
+ * Then moves dom elements between header and message part list based on the
+ * binding operation info provided in the exchange.
+ */
+public abstract class AbstractMessageOutInterceptor<T extends Message>
+       extends AbstractPhaseInterceptor<T> {
+    
+    
+    public AbstractMessageOutInterceptor(String phase) {
+        super(phase);
+    }
+    protected boolean isRequestor(Message message) {
+        return Boolean.TRUE.equals(message.get(Message.REQUESTOR_ROLE));
+    }
+
+    protected abstract Logger getLogger();
+    
+    protected Element createElement(QName elName, List<Element> childEl) {
+        Document doc = DOMUtils.createDocument();
+
+        String prefix = elName.getPrefix();
+        StringBuilder tagName = new StringBuilder();
+        if (!"".equals(prefix)) {
+            tagName.append(prefix);
+            tagName.append(":");
+        }
+        tagName.append(elName.getLocalPart());
+        
+        Element el = doc.createElementNS(elName.getNamespaceURI(),
+                                         tagName.toString());
+
+        if (!"".equals(elName.getPrefix())) {
+            StringBuilder attrName = new StringBuilder("xmlns");        
+            attrName.append(':');
+            attrName.append(elName.getPrefix());
+            el.setAttribute(attrName.toString(), elName.getNamespaceURI());
+        }
+
+        for (Element part : childEl) {
+            Node adoptedNode = doc.adoptNode(part);
+            el.appendChild(adoptedNode);
+        }
+
+        return el;
+    }    
+}

Propchange: activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/AbstractMessageOutInterceptor.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/AbstractMessageOutInterceptor.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/DOMInInterceptor.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/DOMInInterceptor.java?rev=576522&view=auto
==============================================================================
--- activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/DOMInInterceptor.java (added)
+++ activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/DOMInInterceptor.java Mon Sep 17 10:00:08 2007
@@ -0,0 +1,56 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.cxf.interceptors;
+
+import java.util.ResourceBundle;
+import java.util.logging.Logger;
+
+import org.apache.cxf.binding.soap.SoapMessage;
+import org.apache.cxf.binding.soap.interceptor.SoapActionInInterceptor;
+import org.apache.cxf.common.i18n.BundleUtils;
+import org.apache.cxf.common.logging.LogUtils;
+import org.apache.cxf.interceptor.Fault;
+import org.apache.cxf.message.Message;
+import org.apache.cxf.message.XMLMessage;
+import org.apache.cxf.phase.AbstractPhaseInterceptor;
+import org.apache.cxf.phase.Phase;
+
+public class DOMInInterceptor extends AbstractPhaseInterceptor<Message> {
+    private static final Logger LOG = LogUtils.getL7dLogger(DOMOutInterceptor.class);
+    private final XMLMessageInInterceptor xmlInterceptor = new XMLMessageInInterceptor();
+    private final SoapMessageInInterceptor soapInterceptor = new SoapMessageInInterceptor();
+    public DOMInInterceptor() {
+        super(Phase.READ);
+        this.addAfter(SoapActionInInterceptor.class.getName());
+        this.addBefore(PayloadInInterceptor.class.getName());
+    }
+
+    public boolean isRequestor(Message message) {
+        return Boolean.TRUE.equals(message.get(Message.REQUESTOR_ROLE));
+    }
+    
+    public void handleMessage(Message message) throws Fault {
+        if (message instanceof XMLMessage) {
+            xmlInterceptor.handleMessage((XMLMessage)message);
+        } else if (message instanceof SoapMessage) {
+            soapInterceptor.handleMessage((SoapMessage)message);
+        } else {
+            throw new Fault(new org.apache.cxf.common.i18n.Message("NOT_SUPPORTED_MESSAGE", 
+                                                                   LOG, message.getClass().getName()));
+        }
+    }
+}

Propchange: activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/DOMInInterceptor.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/DOMInInterceptor.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/DOMOutInterceptor.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/DOMOutInterceptor.java?rev=576522&view=auto
==============================================================================
--- activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/DOMOutInterceptor.java (added)
+++ activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/DOMOutInterceptor.java Mon Sep 17 10:00:08 2007
@@ -0,0 +1,61 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.cxf.interceptors;
+
+import java.util.ResourceBundle;
+import java.util.logging.Logger;
+//import java.util.logging.Level;
+//import java.util.logging.Logger;
+
+import org.apache.cxf.binding.soap.SoapMessage;
+import org.apache.cxf.common.i18n.BundleUtils;
+import org.apache.cxf.common.logging.LogUtils;
+import org.apache.cxf.interceptor.Fault;
+import org.apache.cxf.interceptor.MessageSenderInterceptor;
+import org.apache.cxf.message.Message;
+import org.apache.cxf.message.XMLMessage;
+import org.apache.cxf.phase.AbstractPhaseInterceptor;
+import org.apache.cxf.phase.Phase;
+
+public class DOMOutInterceptor extends AbstractPhaseInterceptor<Message> {
+    private static final Logger LOG = LogUtils.getL7dLogger(DOMOutInterceptor.class);
+
+
+    private final XMLMessageOutInterceptor xmlInterceptor = new XMLMessageOutInterceptor();
+    private final SoapMessageOutInterceptor soapInterceptor = new SoapMessageOutInterceptor();
+    
+    public DOMOutInterceptor() {
+        super(Phase.PREPARE_SEND);
+        this.addBefore(MessageSenderInterceptor.class.getName());
+    }
+
+    public boolean isRequestor(Message message) {
+        return Boolean.TRUE.equals(message.get(Message.REQUESTOR_ROLE));
+    }
+    
+    @SuppressWarnings("unchecked")
+    public void handleMessage(Message message) throws Fault {
+        if (message instanceof XMLMessage) {
+            xmlInterceptor.handleMessage((XMLMessage)message);
+        } else if (message instanceof SoapMessage) {
+            soapInterceptor.handleMessage((SoapMessage)message);
+        } else {
+            throw new Fault(new org.apache.cxf.common.i18n.Message("NOT_SUPPORTED_MESSAGE", 
+                                                                   LOG, message.getClass().getName()));
+        }        
+    }
+}

Propchange: activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/DOMOutInterceptor.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/DOMOutInterceptor.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/FaultOutInterceptor.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/FaultOutInterceptor.java?rev=576522&view=auto
==============================================================================
--- activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/FaultOutInterceptor.java (added)
+++ activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/FaultOutInterceptor.java Mon Sep 17 10:00:08 2007
@@ -0,0 +1,66 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.cxf.interceptors;
+
+
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import org.apache.cxf.binding.soap.SoapFault;
+import org.apache.cxf.binding.soap.SoapMessage;
+import org.apache.cxf.binding.xml.XMLFault;
+import org.apache.cxf.common.logging.LogUtils;
+//import org.apache.cxf.common.i18n.BundleUtils;
+import org.apache.cxf.interceptor.Fault;
+import org.apache.cxf.message.Message;
+import org.apache.cxf.message.XMLMessage;
+import org.apache.cxf.phase.AbstractPhaseInterceptor;
+import org.apache.cxf.phase.Phase;
+
+public class FaultOutInterceptor extends AbstractPhaseInterceptor<Message> {
+    private static final Logger LOG = LogUtils.getL7dLogger(FaultOutInterceptor.class);
+    
+    public FaultOutInterceptor() {
+        super(Phase.PREPARE_SEND);        
+    }
+
+    @SuppressWarnings("unchecked")
+    public void handleMessage(Message message) throws Fault {
+        Exception ex = message.getContent(Exception.class); 
+
+        if (ex != null) {
+            if (!(ex instanceof Fault)) {
+                ex = new Fault(ex);
+            }
+            
+            if (message instanceof XMLMessage) {
+                if (LOG.isLoggable(Level.INFO)) {
+                    LOG.info("FaultOutInterceptor Creating XMLFault");
+                }                
+                ex = XMLFault.createFault((Fault)ex);
+            } else if (message instanceof SoapMessage) {
+                if (LOG.isLoggable(Level.INFO)) {
+                    LOG.info("FaultOutInterceptor Creating SoapFault");
+                }                
+                
+                SoapMessage sm = (SoapMessage)message;
+                ex = SoapFault.createFault((Fault)ex, sm.getVersion());
+            } 
+            message.setContent(Exception.class, ex);
+        }
+    }
+}

Propchange: activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/FaultOutInterceptor.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/FaultOutInterceptor.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/PayloadContentRedirectInterceptor.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/PayloadContentRedirectInterceptor.java?rev=576522&view=auto
==============================================================================
--- activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/PayloadContentRedirectInterceptor.java (added)
+++ activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/PayloadContentRedirectInterceptor.java Mon Sep 17 10:00:08 2007
@@ -0,0 +1,50 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.cxf.interceptors;
+
+import java.util.List;
+
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamWriter;
+
+import org.w3c.dom.Element;
+
+import org.apache.cxf.interceptor.Fault;
+import org.apache.cxf.message.Message;
+import org.apache.cxf.phase.AbstractPhaseInterceptor;
+import org.apache.cxf.phase.Phase;
+import org.apache.cxf.staxutils.StaxUtils;
+
+public class PayloadContentRedirectInterceptor extends AbstractPhaseInterceptor<Message> {
+
+    public PayloadContentRedirectInterceptor() {
+        super(Phase.POST_STREAM);        
+    }
+
+    @SuppressWarnings("unchecked")
+    public void handleMessage(Message message) throws Fault {
+        XMLStreamWriter out = message.getContent(XMLStreamWriter.class);
+        List<Element> in = message.get(List.class);
+        try {
+            for (Element el : in) {
+                StaxUtils.writeElement(el, out, false, true);
+            }
+        } catch (XMLStreamException e) {
+            throw new Fault(e);
+        }
+    }
+}

Propchange: activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/PayloadContentRedirectInterceptor.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/PayloadContentRedirectInterceptor.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/PayloadInInterceptor.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/PayloadInInterceptor.java?rev=576522&view=auto
==============================================================================
--- activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/PayloadInInterceptor.java (added)
+++ activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/PayloadInInterceptor.java Mon Sep 17 10:00:08 2007
@@ -0,0 +1,36 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.cxf.interceptors;
+
+import java.util.logging.Logger;
+
+import org.apache.cxf.common.logging.LogUtils;
+import org.apache.cxf.phase.Phase;
+
+public class PayloadInInterceptor extends AbstractInvokerInterceptor {
+
+    private static final Logger LOG = LogUtils.getL7dLogger(PayloadInInterceptor.class); 
+
+    public PayloadInInterceptor() {
+        super(Phase.READ);       
+    }
+    
+    @Override
+    protected Logger getLogger() {
+        return LOG;
+    }
+}
\ No newline at end of file

Propchange: activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/PayloadInInterceptor.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/PayloadInInterceptor.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/RawMessageContentRedirectInterceptor.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/RawMessageContentRedirectInterceptor.java?rev=576522&view=auto
==============================================================================
--- activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/RawMessageContentRedirectInterceptor.java (added)
+++ activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/RawMessageContentRedirectInterceptor.java Mon Sep 17 10:00:08 2007
@@ -0,0 +1,35 @@
+/**
+ *        Copyright (c) 1993-2006 IONA Technologies PLC.
+ *                       All Rights Reserved.
+ */
+package org.apache.camel.component.cxf.interceptors;
+
+import java.io.InputStream;
+import java.io.OutputStream;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.cxf.interceptor.Fault;
+import org.apache.cxf.message.Message;
+import org.apache.cxf.phase.AbstractPhaseInterceptor;
+import org.apache.cxf.phase.Phase;
+
+public class RawMessageContentRedirectInterceptor extends AbstractPhaseInterceptor<Message> {
+    public RawMessageContentRedirectInterceptor() {
+        super(Phase.WRITE);        
+    }
+    
+    public void handleMessage(Message message) throws Fault {
+
+        InputStream is = message.getContent(InputStream.class);
+        OutputStream os = message.getContent(OutputStream.class);
+        
+        try {
+            System.out.println("the input stream is " + is);
+            IOUtils.copy(is, os);
+            is.close();
+            os.flush();
+        } catch (Exception e) {
+            throw new Fault(e);
+        }
+    }
+}

Propchange: activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/RawMessageContentRedirectInterceptor.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/RawMessageContentRedirectInterceptor.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/RawMessageInInterceptor.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/RawMessageInInterceptor.java?rev=576522&view=auto
==============================================================================
--- activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/RawMessageInInterceptor.java (added)
+++ activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/RawMessageInInterceptor.java Mon Sep 17 10:00:08 2007
@@ -0,0 +1,37 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.cxf.interceptors;
+
+import java.util.logging.Logger;
+
+import org.apache.cxf.common.logging.LogUtils;
+import org.apache.cxf.phase.Phase;
+
+public class RawMessageInInterceptor extends AbstractInvokerInterceptor {
+
+    private static final Logger LOG = LogUtils.getL7dLogger(RawMessageInInterceptor.class); 
+
+    public RawMessageInInterceptor() {
+        super(Phase.RECEIVE);
+        
+    }
+    
+    @Override
+    protected Logger getLogger() {
+        return LOG;
+    }
+}

Propchange: activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/RawMessageInInterceptor.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/RawMessageInInterceptor.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date