You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by js...@apache.org on 2007/10/09 12:18:04 UTC

svn commit: r583092 - in /activemq/camel/trunk: camel-core/src/main/java/org/apache/camel/impl/ camel-core/src/main/java/org/apache/camel/util/ camel-core/src/test/java/org/apache/camel/util/ components/camel-cxf/ components/camel-cxf/src/main/java/org...

Author: jstrachan
Date: Tue Oct  9 03:17:57 2007
New Revision: 583092

URL: http://svn.apache.org/viewvc?rev=583092&view=rev
Log:
applied patch for CAMEL-119 from Willem Jiang with thanks!

Added:
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/UnsafeUriCharactersEncoder.java   (with props)
    activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/util/UnsafeCharactersEncoderTest.java   (with props)
    activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/spring/
    activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/spring/CxfEndpointBean.java   (with props)
    activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/spring/CxfEndpointBeanDefinitionParser.java   (with props)
    activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/spring/NamespaceHandler.java   (with props)
    activemq/camel/trunk/components/camel-cxf/src/main/resources/META-INF/spring.handlers
    activemq/camel/trunk/components/camel-cxf/src/main/resources/META-INF/spring.schemas
    activemq/camel/trunk/components/camel-cxf/src/main/resources/schema/
    activemq/camel/trunk/components/camel-cxf/src/main/resources/schema/cxfEndpoint.xsd   (with props)
    activemq/camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CXFGreeterRouterTest.java   (with props)
    activemq/camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CXFRouterSpringTest.java   (with props)
    activemq/camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfEndpointTest.java   (with props)
    activemq/camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/spring/
    activemq/camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/spring/CxfEndpointBeanTest.java   (with props)
    activemq/camel/trunk/components/camel-cxf/src/test/resources/org/
    activemq/camel/trunk/components/camel-cxf/src/test/resources/org/apache/
    activemq/camel/trunk/components/camel-cxf/src/test/resources/org/apache/camel/
    activemq/camel/trunk/components/camel-cxf/src/test/resources/org/apache/camel/component/
    activemq/camel/trunk/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/
    activemq/camel/trunk/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/GreeterEndpointBeans.xml   (with props)
    activemq/camel/trunk/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/spring/
    activemq/camel/trunk/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/spring/CxfEndpointBeans.xml   (with props)
Modified:
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultComponent.java
    activemq/camel/trunk/components/camel-cxf/pom.xml
    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/CxfProducer.java
    activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfSoapConsumer.java
    activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/AbstractMessageInInterceptor.java
    activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/RawMessageContentRedirectInterceptor.java
    activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/invoker/AbstractInvokingContext.java
    activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/invoker/RawMessageInvokingContext.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/util/CxfEndpointUtilsTest.java

Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultComponent.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultComponent.java?rev=583092&r1=583091&r2=583092&view=diff
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultComponent.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultComponent.java Tue Oct  9 03:17:57 2007
@@ -29,6 +29,7 @@
 import org.apache.camel.util.IntrospectionSupport;
 import org.apache.camel.util.ObjectHelper;
 import org.apache.camel.util.URISupport;
+import org.apache.camel.util.UnsafeUriCharactersEncoder;
 
 /**
  * @version $Revision$
@@ -48,9 +49,8 @@
 
     public Endpoint<E> createEndpoint(String uri) throws Exception {
         ObjectHelper.notNull(getCamelContext(), "camelContext");
-        //TODO endcode uri sting to the unsafe URI string
-        
-        URI u = new URI(uri);
+        //endcode uri sting to the unsafe URI characters        
+        URI u = new URI(UnsafeUriCharactersEncoder.encode(uri));
         String path = u.getSchemeSpecificPart();
 
         // lets trim off any query arguments

Added: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/UnsafeUriCharactersEncoder.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/UnsafeUriCharactersEncoder.java?rev=583092&view=auto
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/UnsafeUriCharactersEncoder.java (added)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/UnsafeUriCharactersEncoder.java Tue Oct  9 03:17:57 2007
@@ -0,0 +1,101 @@
+/**
+ * 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.util;
+
+import java.nio.ByteBuffer;
+import java.nio.CharBuffer;
+import java.nio.charset.CharacterCodingException;
+import java.util.BitSet;
+
+import sun.nio.cs.ThreadLocalCoders;
+import sun.text.Normalizer;
+
+public class UnsafeUriCharactersEncoder {
+    static BitSet unsafeCharacters;
+    static {
+        unsafeCharacters = new BitSet(256);
+        unsafeCharacters.set(' ');
+        unsafeCharacters.set('"');
+        unsafeCharacters.set('<');
+        unsafeCharacters.set('>');
+        unsafeCharacters.set('#');
+        unsafeCharacters.set('%');
+        unsafeCharacters.set('{');
+        unsafeCharacters.set('}');
+        unsafeCharacters.set('|');
+        unsafeCharacters.set('\\');
+        unsafeCharacters.set('^');
+        unsafeCharacters.set('~'); 
+        unsafeCharacters.set('[');
+        unsafeCharacters.set(']');
+        unsafeCharacters.set('`');        
+    }
+    
+    
+    private UnsafeUriCharactersEncoder() {
+        // util class 
+    }
+    
+    public static String encode(String s) {
+        int n = s.length();
+        if (n == 0)
+            return s;
+        
+        // First check whether we actually need to encode
+        byte[] bytes = s.getBytes();
+        for (int i = 0;;) {
+            if (unsafeCharacters.get(bytes[i]))
+                break;
+            if (++i >= bytes.length)
+                return s;
+        }
+        
+        String ns = Normalizer.normalize(s, Normalizer.COMPOSE, 0);        
+        ByteBuffer bb = null;
+        try {
+            bb = ThreadLocalCoders.encoderFor("UTF-8")
+                .encode(CharBuffer.wrap(ns));
+        } catch (CharacterCodingException x) {
+            assert false;
+        }
+
+        StringBuffer sb = new StringBuffer();
+        while (bb.hasRemaining()) {
+            int b = bb.get() & 0xff;
+            if (unsafeCharacters.get(b)) {
+                appendEscape(sb, (byte)b);
+            }    
+            else
+                sb.append((char)b);
+        }
+        return sb.toString();
+    }
+    
+    private static void appendEscape(StringBuffer sb, byte b) {
+        sb.append('%');
+        sb.append(hexDigits[(b >> 4) & 0x0f]);
+        sb.append(hexDigits[(b >> 0) & 0x0f]);
+    }
+    
+    private final static char[] hexDigits = {
+                                        '0', '1', '2', '3', '4', '5', '6', '7',
+                                        '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
+                                         };
+    
+      
+
+}

Propchange: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/UnsafeUriCharactersEncoder.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/util/UnsafeCharactersEncoderTest.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/util/UnsafeCharactersEncoderTest.java?rev=583092&view=auto
==============================================================================
--- activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/util/UnsafeCharactersEncoderTest.java (added)
+++ activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/util/UnsafeCharactersEncoderTest.java Tue Oct  9 03:17:57 2007
@@ -0,0 +1,31 @@
+/**
+ * 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.util;
+
+import junit.framework.TestCase;
+
+public class UnsafeCharactersEncoderTest extends TestCase {
+     public void testQnameEncoder() {
+         String afterEncoding = "%7Bhttp://www.example.com/test%7DServiceName";
+         String beforeEncoding = "{http://www.example.com/test}ServiceName";
+         
+         String result = UnsafeUriCharactersEncoder.encode(beforeEncoding);
+         System.out.println("result " + result);
+         assertEquals("Get the wrong encoding result", result, afterEncoding);
+     }
+    
+}

Propchange: activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/util/UnsafeCharactersEncoderTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: activemq/camel/trunk/components/camel-cxf/pom.xml
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-cxf/pom.xml?rev=583092&r1=583091&r2=583092&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-cxf/pom.xml (original)
+++ activemq/camel/trunk/components/camel-cxf/pom.xml Tue Oct  9 03:17:57 2007
@@ -51,6 +51,17 @@
     </dependency>
 
     <dependency>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-spring</artifactId>      
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-spring</artifactId>
+      <type>test-jar</type>      
+    </dependency>
+
+    <dependency>
       <groupId>commons-logging</groupId>
       <artifactId>commons-logging-api</artifactId>
     </dependency>
@@ -172,15 +183,13 @@
     <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
-       <version>${spring-version}</version>
-       <scope>test</scope>
+       <version>${spring-version}</version>       
      </dependency>
     
     <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
-       <version>${spring-version}</version>
-       <scope>test</scope>
+       <version>${spring-version}</version>       
      </dependency>
 
 

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=583092&r1=583091&r2=583092&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 Tue Oct  9 03:17:57 2007
@@ -31,6 +31,7 @@
     String PORT_NAME = "portName";
     String PROTOCOL_NAME_RES = "res";
     String OPERATION_NAME = "operationName";
+    String SPRING_CONTEXT_ENDPOINT = "bean:";
     // 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=583092&r1=583091&r2=583092&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 Tue Oct  9 03:17:57 2007
@@ -19,9 +19,11 @@
 import java.net.URI;
 
 import org.apache.camel.Processor;
+import org.apache.camel.component.cxf.spring.CxfEndpointBean;
 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.camel.spring.SpringCamelContext;
 import org.apache.cxf.Bus;
 import org.apache.cxf.BusFactory;
 import org.apache.cxf.common.classloader.ClassLoaderUtils;
@@ -46,22 +48,40 @@
     public CxfConsumer(CxfEndpoint endpoint, Processor processor) throws Exception {
        
         super(endpoint, processor);        
-        this.endpoint = endpoint;
+        this.endpoint = endpoint;        
+        
         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.getServiceName() != null) {
-                svrBean.getServiceFactory().setServiceName(CxfEndpointUtils.getServiceName(endpoint));                
-            }
-            if (endpoint.getPortName() != null) {
-                svrBean.getServiceFactory().setEndpointName(CxfEndpointUtils.getPortName(endpoint));
-            }    
-            if (endpoint.getWsdlURL() != null) {                
-                svrBean.setWsdlURL(endpoint.getWsdlURL());
+            ServerFactoryBean svrBean = null;
+            if (endpoint.isSpringContextEndpoint()) {
+                CxfEndpointBean endpointBean = endpoint.getCxfEndpointBean();
+                svrBean = CxfEndpointUtils.getServerFactoryBean(endpointBean.getServiceClass());
+                endpoint.configure(svrBean);
+                //Need to set the service name and endpoint name to the ClientFactoryBean's service factory
+                // to walk around the issue of setting EndpointName and ServiceName
+                CxfEndpointBean cxfEndpointBean = endpoint.getCxfEndpointBean();
+                if (cxfEndpointBean.getServiceName() != null) {
+                    svrBean.getServiceFactory().setServiceName(cxfEndpointBean.getServiceName());
+                } 
+                if (cxfEndpointBean.getEndpointName() != null) {
+                    svrBean.getServiceFactory().setEndpointName(cxfEndpointBean.getEndpointName());
+                } 
+                
+            } else { // setup the serverFactoryBean with the URI paraments           
+                Class serviceClass = ClassLoaderUtils.loadClass(endpoint.getServiceClass(), this.getClass()); 
+                svrBean = CxfEndpointUtils.getServerFactoryBean(serviceClass);                           
+                svrBean.setAddress(endpoint.getAddress());
+                svrBean.setServiceClass(serviceClass);
+                if (endpoint.getServiceName() != null) {
+                    svrBean.getServiceFactory().setServiceName(CxfEndpointUtils.getServiceName(endpoint));                
+                }
+                if (endpoint.getPortName() != null) {
+                    svrBean.getServiceFactory().setEndpointName(CxfEndpointUtils.getPortName(endpoint));
+                }    
+                if (endpoint.getWsdlURL() != null) {                
+                    svrBean.setWsdlURL(endpoint.getWsdlURL());
+                }
             }
             DataFormat dataFormat = CxfEndpointUtils.getDataFormat(endpoint);
             if (dataFormat.equals(DataFormat.POJO)) {
@@ -78,6 +98,7 @@
             } 
             
         } catch (Exception ex) {
+            // create Consumer endpoint failed
             ex.printStackTrace();
         }
     }

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=583092&r1=583091&r2=583092&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 Tue Oct  9 03:17:57 2007
@@ -16,13 +16,19 @@
  */
 package org.apache.camel.component.cxf;
 
+import java.net.URI;
+import java.net.URISyntaxException;
+
 import javax.xml.namespace.QName;
 
 import org.apache.camel.Consumer;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
 import org.apache.camel.ExchangePattern;
+import org.apache.camel.component.cxf.spring.CxfEndpointBean;
 import org.apache.camel.impl.DefaultEndpoint;
+import org.apache.camel.spring.SpringCamelContext;
+import org.apache.cxf.configuration.spring.ConfigurerImpl;
 import org.apache.cxf.message.Message;
 
 
@@ -40,13 +46,29 @@
     private String portName;
     private String serviceName;
     private String dataFormat;
+    private String beanId;
+    private boolean isSpringContextEndpoint;
     private boolean inOut = true;
+    private ConfigurerImpl configurer;
+    private CxfEndpointBean cxfEndpointBean;
     
 
     public CxfEndpoint(String uri, String address, CxfComponent component) {
         super(uri, component);
         this.component = component;        
         this.address = address;
+        if (address.startsWith(CxfConstants.SPRING_CONTEXT_ENDPOINT)) {
+            isSpringContextEndpoint = true;
+            //get the bean from spring context
+            beanId = address.substring(CxfConstants.SPRING_CONTEXT_ENDPOINT.length());
+            if (beanId.startsWith("//")) {
+               beanId = beanId.substring(2);     
+            }
+            SpringCamelContext context = (SpringCamelContext) this.getContext();
+            configurer = new ConfigurerImpl(context.getApplicationContext()); 
+            cxfEndpointBean = (CxfEndpointBean) context.getApplicationContext().getBean(beanId);
+            assert(cxfEndpointBean != null);
+        }
     }
         
     public Producer<CxfExchange> createProducer() throws Exception {
@@ -77,6 +99,9 @@
         dataFormat = format;
     }
     
+    public boolean isSpringContextEndpoint() {
+        return isSpringContextEndpoint;
+    }
         
     public String getAddress() {
     	return address;
@@ -91,7 +116,8 @@
     }
     
     public String getServiceClass() {
-    	return serviceClass;
+        return serviceClass;
+    	
     }
     
     public void setServiceClass(String className) {        
@@ -142,6 +168,17 @@
         return true;
     }
     
+    public String getBeanId() {
+        return beanId;
+    }
+    
+    public CxfEndpointBean getCxfEndpointBean() {
+        return cxfEndpointBean;
+    }
+    
+    public void configure(Object beanInstance) {
+        configurer.configureBean(beanId, beanInstance);
+    }
     
 
 }

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=583092&r1=583091&r2=583092&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 Tue Oct  9 03:17:57 2007
@@ -24,6 +24,7 @@
 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.spring.CxfEndpointBean;
 import org.apache.camel.component.cxf.util.CxfEndpointUtils;
 import org.apache.camel.impl.DefaultProducer;
 import org.apache.camel.util.ObjectHelper;
@@ -60,7 +61,6 @@
         super(endpoint);
         this.endpoint = endpoint;
         dataFormat = CxfEndpointUtils.getDataFormat(endpoint);
-        
         if (dataFormat.equals(DataFormat.POJO)) {
             client = createClientFormClientFactoryBean(null);
         } else {
@@ -84,49 +84,63 @@
     }
    
     //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       
+    private Client createClientFormClientFactoryBean(ClientFactoryBean cfb) throws CamelException {              
         Bus bus = BusFactory.getDefaultBus();
-        // 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 (endpoint.isSpringContextEndpoint()) {
+            CxfEndpointBean endpointBean = endpoint.getCxfEndpointBean();
+            if (cfb == null) {
+                cfb = CxfEndpointUtils.getClientFactoryBean(endpointBean.getServiceClass());
+            }    
+            endpoint.configure(cfb);
+            // Need to set the service name and endpoint name to the ClientFactoryBean's service factory
+            // to walk around the issue of setting EndpointName and ServiceName
+            CxfEndpointBean cxfEndpointBean = endpoint.getCxfEndpointBean();
+            if (cxfEndpointBean.getServiceName() != null) {
+                cfb.getServiceFactory().setServiceName(cxfEndpointBean.getServiceName());
+            } 
+            if (cxfEndpointBean.getEndpointName() != null) {
+                cfb.getServiceFactory().setEndpointName(cxfEndpointBean.getEndpointName());
+            } 
+        } else { // set up the clientFactoryBean by using URI information
+            if (null != endpoint.getServiceClass()) {
+                try {
+                    //we need to choice the right front end to create the clientFactoryBean
+                    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 (ClassNotFoundException e) {
+                    throw new CamelException(e);
+                }
+            } else { // we can't see any service class from the endpoint
                 if (cfb == null) {
-                    cfb = CxfEndpointUtils.getClientFactoryBean(serviceClass);
-                } 
-                cfb.setAddress(endpoint.getAddress());
-                if (null != endpoint.getServiceClass()) {            
-                    cfb.setServiceClass(ObjectHelper.loadClass(endpoint.getServiceClass()));
-                } 
+                    cfb = new ClientFactoryBean();
+                }    
                 if (null != endpoint.getWsdlURL()) {
                     cfb.setWsdlURL(endpoint.getWsdlURL());
-                }                
-            } catch (ClassNotFoundException e) {
-                throw new CamelException(e);
+                } else {
+                    // throw the exception for insufficiency of the endpoint info
+                    throw new CamelException("Insufficiency of the endpoint info");
+                }
             }
-        } else { // we can't see any service class from the endpoint
-            if (cfb == null) {
-                cfb = new ClientFactoryBean();
+            if (endpoint.getServiceName() != null) {
+                cfb.getServiceFactory().setServiceName(CxfEndpointUtils.getServiceName(endpoint));
+            }
+            if (endpoint.getPortName() != null) {
+                cfb.getServiceFactory().setEndpointName(CxfEndpointUtils.getPortName(endpoint));
+               
             }    
-            if (null != endpoint.getWsdlURL()) {
+            if (endpoint.getWsdlURL() != null) {                
                 cfb.setWsdlURL(endpoint.getWsdlURL());
-            } else {
-                // throw the exception for insufficiency of the endpoint info
-                throw new CamelException("Insufficiency of the endpoint info");
             }
-        }
-        if (endpoint.getServiceName() != null) {
-            cfb.getServiceFactory().setServiceName(CxfEndpointUtils.getServiceName(endpoint));
-        }
-        if (endpoint.getPortName() != null) {
-            cfb.getServiceFactory().setEndpointName(CxfEndpointUtils.getPortName(endpoint));
-           
         }    
-        if (endpoint.getWsdlURL() != null) {                
-            cfb.setWsdlURL(endpoint.getWsdlURL());
-        }
         cfb.setBus(bus);        
         return cfb.create();
     }
@@ -170,8 +184,7 @@
                 Object result = cxfClient.dispatch(params, null, ex);
                 // 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);
+                Message response = null;                
                 if (boi == null) {
                     // it should be the raw message                    
                     response = new MessageImpl(); 

Modified: activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfSoapConsumer.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfSoapConsumer.java?rev=583092&r1=583091&r2=583092&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfSoapConsumer.java (original)
+++ activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfSoapConsumer.java Tue Oct  9 03:17:57 2007
@@ -67,6 +67,7 @@
         this.consumer = endpoint.getInnerEndpoint().createConsumer(soapProcessor);
         WSDLServiceFactory factory = new WSDLServiceFactory(getBus(), endpoint.getDefinition(), endpoint.getService());
         Service cxfService = factory.create();
+        // need to find with the endpoint and service Qname
         EndpointInfo ei = cxfService.getServiceInfos().iterator().next().getEndpoints().iterator().next();
         ei.setAddress("local://" + ei.getService().getName().toString() + "/" + ei.getName().getLocalPart());
         ei.getBinding().setProperty(AbstractBindingFactory.DATABINDING_DISABLED, Boolean.TRUE);

Modified: 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=583092&r1=583091&r2=583092&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/AbstractMessageInInterceptor.java (original)
+++ activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/AbstractMessageInInterceptor.java Tue Oct  9 03:17:57 2007
@@ -101,7 +101,7 @@
 
             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));
             }

Modified: 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=583092&r1=583091&r2=583092&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/RawMessageContentRedirectInterceptor.java (original)
+++ activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/RawMessageContentRedirectInterceptor.java Tue Oct  9 03:17:57 2007
@@ -35,8 +35,7 @@
         InputStream is = message.getContent(InputStream.class);
         OutputStream os = message.getContent(OutputStream.class);
         
-        try {
-            System.out.println("the input stream is " + is);
+        try {            
             IOUtils.copy(is, os);
             is.close();
             os.flush();

Modified: activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/invoker/AbstractInvokingContext.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/invoker/AbstractInvokingContext.java?rev=583092&r1=583091&r2=583092&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/invoker/AbstractInvokingContext.java (original)
+++ activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/invoker/AbstractInvokingContext.java Tue Oct  9 03:17:57 2007
@@ -125,9 +125,7 @@
     }
 
     protected <T> T getResponseObject(Message inMessage, Map<String, Object> responseContext,
-            Class <T> clazz) {
-        System.out.println("get the in message is " + inMessage);
-        System.out.println("*** responseContext is" + responseContext);
+            Class <T> clazz) {        
         T retval = null;
         if (inMessage != null) {
             if (null != responseContext) {

Modified: activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/invoker/RawMessageInvokingContext.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/invoker/RawMessageInvokingContext.java?rev=583092&r1=583091&r2=583092&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/invoker/RawMessageInvokingContext.java (original)
+++ activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/invoker/RawMessageInvokingContext.java Tue Oct  9 03:17:57 2007
@@ -109,15 +109,7 @@
     }
 
     public Object getResponseObject(Exchange exchange, Map<String, Object> responseContext) {
-        /*CachedOutputStream bos = exchange.getInMessage().getContent(CachedOutputStream.class);
-        InputStream in = null;
-        try {
-            in = bos.getInputStream();
-        } catch (IOException e) {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
-        }
-        return in;*/
+        
         return getResponseObject(exchange.getInMessage(), responseContext, InputStream.class);
     }
     

Added: activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/spring/CxfEndpointBean.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/spring/CxfEndpointBean.java?rev=583092&view=auto
==============================================================================
--- activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/spring/CxfEndpointBean.java (added)
+++ activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/spring/CxfEndpointBean.java Tue Oct  9 03:17:57 2007
@@ -0,0 +1,10 @@
+package org.apache.camel.component.cxf.spring;
+
+import org.apache.cxf.frontend.AbstractEndpointFactory;
+import org.apache.cxf.service.factory.ReflectionServiceFactoryBean;
+
+public class CxfEndpointBean extends AbstractEndpointFactory {    
+    public CxfEndpointBean() {
+        setServiceFactory(new ReflectionServiceFactoryBean());
+    }    
+}

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

Added: activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/spring/CxfEndpointBeanDefinitionParser.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/spring/CxfEndpointBeanDefinitionParser.java?rev=583092&view=auto
==============================================================================
--- activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/spring/CxfEndpointBeanDefinitionParser.java (added)
+++ activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/spring/CxfEndpointBeanDefinitionParser.java Tue Oct  9 03:17:57 2007
@@ -0,0 +1,98 @@
+/**
+ * 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.spring;
+
+import com.sun.xml.bind.v2.schemagen.xmlschema.List;
+
+import java.util.Map;
+
+import javax.xml.namespace.QName;
+
+import org.w3c.dom.Element;
+
+import org.apache.cxf.common.util.StringUtils;
+import org.apache.cxf.configuration.spring.AbstractBeanDefinitionParser;
+import org.springframework.beans.factory.BeanDefinitionStoreException;
+import org.springframework.beans.factory.config.BeanDefinition;
+import org.springframework.beans.factory.support.AbstractBeanDefinition;
+import org.springframework.beans.factory.support.BeanDefinitionBuilder;
+import org.springframework.beans.factory.xml.BeanDefinitionParser;
+import org.springframework.beans.factory.xml.ParserContext;
+
+public class CxfEndpointBeanDefinitionParser extends AbstractBeanDefinitionParser {
+
+    @Override
+    protected Class getBeanClass(Element arg0) {
+        return CxfEndpointBean.class;
+    }
+    
+    @Override
+    protected void mapAttribute(BeanDefinitionBuilder bean, Element e, String name, String val) {
+        if ("endpointName".equals(name) || "serviceName".equals(name)) {
+            QName q = parseQName(e, val);
+            bean.addPropertyValue(name, q);
+        } else {
+            mapToProperty(bean, name, val);
+        }
+    }
+
+    @Override
+    protected void mapElement(ParserContext ctx, BeanDefinitionBuilder bean, Element el, String name) {
+        if ("properties".equals(name)) {
+            Map map = ctx.getDelegate().parseMapElement(el, bean.getBeanDefinition());
+            bean.addPropertyValue("properties", map);
+        } else if ("binding".equals(name)) {
+            setFirstChildAsProperty(el, ctx, bean, "bindingConfig");
+        } else if ("inInterceptors".equals(name) || "inFaultInterceptors".equals(name)
+            || "outInterceptors".equals(name) || "outFaultInterceptors".equals(name)
+            || "features".equals(name) || "schemaLocations".equals(name)) {
+            List list = (List)ctx.getDelegate().parseListElement(el, bean.getBeanDefinition());
+            bean.addPropertyValue(name, list);
+        } else {
+            setFirstChildAsProperty(el, ctx, bean, name);            
+        }        
+    }
+    
+
+    @Override
+    protected void doParse(Element element, ParserContext ctx, BeanDefinitionBuilder bean) {
+        super.doParse(element, ctx, bean);
+        bean.setLazyInit(false);
+    }
+
+    @Override
+    protected String resolveId(Element elem, 
+                               AbstractBeanDefinition definition, 
+                               ParserContext ctx) 
+        throws BeanDefinitionStoreException {
+        String id = super.resolveId(elem, definition, ctx);
+        if (StringUtils.isEmpty(id)) {
+            throw new BeanDefinitionStoreException("The bean id is needed.");
+        }
+        
+        return id;
+    }
+
+    @Override
+    protected boolean hasBusProperty() {
+        return true;
+    }
+    
+
+}

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

Added: activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/spring/NamespaceHandler.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/spring/NamespaceHandler.java?rev=583092&view=auto
==============================================================================
--- activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/spring/NamespaceHandler.java (added)
+++ activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/spring/NamespaceHandler.java Tue Oct  9 03:17:57 2007
@@ -0,0 +1,31 @@
+/**
+ * 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.spring;
+
+import org.apache.cxf.configuration.spring.StringBeanDefinitionParser;
+import org.apache.cxf.frontend.spring.ServerFactoryBeanDefinitionParser;
+import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
+import org.springframework.beans.factory.xml.NamespaceHandlerSupport;
+
+public class NamespaceHandler extends NamespaceHandlerSupport {
+    public void init() {
+        registerBeanDefinitionParser("cxfEndpoint", new CxfEndpointBeanDefinitionParser());      
+        
+    }
+}

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

Added: activemq/camel/trunk/components/camel-cxf/src/main/resources/META-INF/spring.handlers
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-cxf/src/main/resources/META-INF/spring.handlers?rev=583092&view=auto
==============================================================================
--- activemq/camel/trunk/components/camel-cxf/src/main/resources/META-INF/spring.handlers (added)
+++ activemq/camel/trunk/components/camel-cxf/src/main/resources/META-INF/spring.handlers Tue Oct  9 03:17:57 2007
@@ -0,0 +1,21 @@
+#
+#
+#    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.
+#
+#
+http\://activemq.apache.org/camel/schema/cxfEndpoint=org.apache.camel.component.cxf.spring.NamespaceHandler
\ No newline at end of file

Added: activemq/camel/trunk/components/camel-cxf/src/main/resources/META-INF/spring.schemas
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-cxf/src/main/resources/META-INF/spring.schemas?rev=583092&view=auto
==============================================================================
--- activemq/camel/trunk/components/camel-cxf/src/main/resources/META-INF/spring.schemas (added)
+++ activemq/camel/trunk/components/camel-cxf/src/main/resources/META-INF/spring.schemas Tue Oct  9 03:17:57 2007
@@ -0,0 +1,21 @@
+#
+#
+#    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.
+#
+#
+http\://activemq.apache.org/camel/schema/cxf/cxfEndpoint.xsd=schema/cxfEndpoint.xsd
\ No newline at end of file

Added: activemq/camel/trunk/components/camel-cxf/src/main/resources/schema/cxfEndpoint.xsd
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-cxf/src/main/resources/schema/cxfEndpoint.xsd?rev=583092&view=auto
==============================================================================
--- activemq/camel/trunk/components/camel-cxf/src/main/resources/schema/cxfEndpoint.xsd (added)
+++ activemq/camel/trunk/components/camel-cxf/src/main/resources/schema/cxfEndpoint.xsd Tue Oct  9 03:17:57 2007
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+-->
+<xsd:schema xmlns="http://activemq.apache.org/camel/schema/cxfEndpoint"
+  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+  xmlns:beans="http://www.springframework.org/schema/beans"
+  xmlns:cxf-beans="http://cxf.apache.org/configuration/beans"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  targetNamespace="http://activemq.apache.org/camel/schema/cxfEndpoint" 
+  elementFormDefault="qualified"
+  attributeFormDefault="unqualified">
+
+  <xsd:import namespace="http://www.springframework.org/schema/beans" schemaLocation="http://www.springframework.org/schema/beans/spring-beans.xsd"/>
+  <xsd:import namespace="http://cxf.apache.org/configuration/beans" schemaLocation="http://cxf.apache.org/schemas/configuration/cxf-beans.xsd"/>
+    
+  <xsd:element name="cxfEndpoint">
+    <xsd:complexType>
+      <xsd:complexContent>
+        <xsd:extension base="beans:identifiedType">
+          <xsd:all>
+            <xsd:element name="binding" type="xsd:anyType" minOccurs="0"/>
+            <xsd:element name="dataBinding" type="xsd:anyType" minOccurs="0"/>            
+            <xsd:element name="features" type="xsd:anyType" minOccurs="0"/>
+            <xsd:element name="inInterceptors" type="xsd:anyType" minOccurs="0"/>
+            <xsd:element name="inFaultInterceptors" type="xsd:anyType" minOccurs="0"/>            
+            <xsd:element name="outInterceptors" type="xsd:anyType" minOccurs="0"/>
+            <xsd:element name="outFaultInterceptors" type="xsd:anyType" minOccurs="0"/>
+            <xsd:element name="properties" type="beans:mapType" minOccurs="0"/>
+            <xsd:element name="schemaLocations" type="schemasType" minOccurs="0"/>
+            <xsd:element name="serviceBean" type="xsd:anyType" minOccurs="0"/>
+            <xsd:element name="serviceFactory" type="xsd:anyType" minOccurs="0"/>
+          </xsd:all>
+          <xsd:attributeGroup ref="cxf-beans:beanAttributes"/>
+          <xsd:attribute name="address" type="xsd:string" />
+          <xsd:attribute name="bindingId" type="xsd:string" />
+          <xsd:attribute name="bus" type="xsd:string" />
+          <xsd:attribute name="serviceClass" type="xsd:string"/>
+          <xsd:attribute name="transportId" type="xsd:string"/>
+          <xsd:attribute name="wsdlURL" type="xsd:string" />
+          <xsd:attribute name="endpointName" type="xsd:QName" />
+          <xsd:attribute name="serviceName" type="xsd:QName" />
+        </xsd:extension>
+      </xsd:complexContent>
+    </xsd:complexType>
+  </xsd:element>
+  
+  <xsd:complexType name="schemasType">
+    <xsd:sequence>
+      <xsd:element name="schemaLocation" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
+    </xsd:sequence>
+  </xsd:complexType>
+  
+</xsd:schema>

Propchange: activemq/camel/trunk/components/camel-cxf/src/main/resources/schema/cxfEndpoint.xsd
------------------------------------------------------------------------------
    svn:eol-style = native

Added: activemq/camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CXFGreeterRouterTest.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CXFGreeterRouterTest.java?rev=583092&view=auto
==============================================================================
--- activemq/camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CXFGreeterRouterTest.java (added)
+++ activemq/camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CXFGreeterRouterTest.java Tue Oct  9 03:17:57 2007
@@ -0,0 +1,69 @@
+/**
+ * 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.lang.reflect.UndeclaredThrowableException;
+
+import javax.xml.namespace.QName;
+import javax.xml.ws.Endpoint;
+import javax.xml.ws.Service;
+
+import org.apache.hello_world_soap_http.Greeter;
+import org.apache.hello_world_soap_http.GreeterImpl;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+public class CXFGreeterRouterTest extends CXFRouterSpringTest {
+    private final QName serviceName = new QName("http://apache.org/hello_world_soap_http",
+                                                "SOAPService");
+    private final QName routerPortName = new QName("http://apache.org/hello_world_soap_http",
+                                                "RouterPort");
+    
+    @Override
+    protected void startService() {
+        Object implementor = new GreeterImpl();
+        String address = "http://localhost:9000/SoapContext/SoapPort";
+        Endpoint.publish(address, implementor);
+    }
+    
+    @Override
+    public void testInvokingServiceFromCXFClient() throws Exception {
+        Service service = Service.create(serviceName);
+        service.addPort(routerPortName, "http://schemas.xmlsoap.org/soap/", 
+                        "http://localhost:9003/CamelContext/RouterPort");
+        Greeter greeter = service.getPort(routerPortName, Greeter.class);
+        
+        try {
+            
+            String reply = greeter.greetMe("test");
+            assertNotNull("No response received from service", reply);
+            assertEquals("Got the wrong reply ", "Hello test", reply);
+            reply = greeter.sayHi();
+            assertNotNull("No response received from service", reply);
+            assertEquals("Got the wrong reply ", "Bonjour", reply);
+        } catch (UndeclaredThrowableException ex) {
+            throw (Exception)ex.getCause();
+        }
+    }
+    
+    @Override
+    protected ClassPathXmlApplicationContext createApplicationContext() {
+        return new ClassPathXmlApplicationContext("org/apache/camel/component/cxf/GreeterEndpointBeans.xml");
+    }
+}
+    
+
+

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

Added: activemq/camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CXFRouterSpringTest.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CXFRouterSpringTest.java?rev=583092&view=auto
==============================================================================
--- activemq/camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CXFRouterSpringTest.java (added)
+++ activemq/camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CXFRouterSpringTest.java Tue Oct  9 03:17:57 2007
@@ -0,0 +1,67 @@
+/**
+ * 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 org.springframework.context.support.AbstractXmlApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+import org.apache.camel.CamelContext;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.spring.SpringCamelContext;
+import org.apache.camel.spring.SpringTestSupport;
+import org.apache.cxf.bus.CXFBusFactory;
+import org.apache.cxf.endpoint.ServerImpl;
+import org.apache.cxf.frontend.ServerFactoryBean;
+
+public class CXFRouterSpringTest extends CxfRouterTest {
+    protected AbstractXmlApplicationContext applicationContext;
+    
+    @Override
+    protected void setUp() throws Exception {
+        applicationContext = createApplicationContext();
+        assertNotNull("Should have created a valid spring context", applicationContext);
+
+        super.setUp();
+    }
+
+    @Override
+    protected void tearDown() throws Exception {
+        super.tearDown();
+        if (applicationContext != null) {
+            applicationContext.destroy();
+        }
+    }
+    
+    protected RouteBuilder createRouteBuilder() {
+        return new RouteBuilder() {
+            public void configure() {
+                from("cxf:bean:routerEndpoint").to("cxf:bean:serviceEndpoint");              
+            }
+        };
+    }
+    
+    @Override
+    protected CamelContext createCamelContext() throws Exception {
+        return SpringCamelContext.springCamelContext(applicationContext);
+    }
+    
+    
+    protected ClassPathXmlApplicationContext createApplicationContext() {
+        return new ClassPathXmlApplicationContext("org/apache/camel/component/cxf/spring/CxfEndpointBeans.xml");
+    }
+
+}

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

Added: activemq/camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfEndpointTest.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfEndpointTest.java?rev=583092&view=auto
==============================================================================
--- activemq/camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfEndpointTest.java (added)
+++ activemq/camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfEndpointTest.java Tue Oct  9 03:17:57 2007
@@ -0,0 +1,44 @@
+/**
+ * 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 org.apache.camel.CamelContext;
+import org.apache.camel.spring.SpringCamelContext;
+import org.apache.cxf.frontend.ServerFactoryBean;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+import junit.framework.TestCase;
+
+public class CxfEndpointTest extends TestCase {
+   
+    public void testSpringCxfEndpoint() throws Exception {
+        ClassPathXmlApplicationContext ctx = 
+            new ClassPathXmlApplicationContext(new String[]{"org/apache/camel/component/cxf/spring/CxfEndpointBeans.xml"});
+        CamelContext camelContext = new SpringCamelContext(ctx);
+        CxfComponent cxfComponent = new CxfComponent(camelContext);
+        CxfEndpoint endpoint = (CxfEndpoint)cxfComponent.createEndpoint("cxf://bean:serviceEndpoint");
+        
+        assertTrue("The endpoint should be the spring context endpoint", endpoint.isSpringContextEndpoint());
+        ServerFactoryBean svf = new ServerFactoryBean();
+        endpoint.configure(svf);
+        assertEquals("Got the wrong endpoint address", svf.getAddress(), "http://localhost:9002/helloworld");
+        assertEquals("Got the wrong endpont service class", 
+            svf.getServiceClass().getCanonicalName(),
+            "org.apache.camel.component.cxf.HelloService");
+    }
+
+}

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

Modified: activemq/camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfRouterTest.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfRouterTest.java?rev=583092&r1=583091&r2=583092&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfRouterTest.java (original)
+++ activemq/camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfRouterTest.java Tue Oct  9 03:17:57 2007
@@ -44,8 +44,7 @@
     
     private String routerEndpointURI = "cxf://" + ROUTER_ADDRESS + "?" + SERVICE_CLASS + "&dataFormat=POJO";
     private String serviceEndpointURI = "cxf://" + SERVICE_ADDRESS + "?" + SERVICE_CLASS + "&dataFormat=POJO";
-    //private Endpoint routerEndpoint;
-    //private Endpoint resultEndpoint;
+    
     private ServerImpl server;
     
     
@@ -56,7 +55,7 @@
         startService();
     }
     
-    private void startService() {
+    protected void startService() {
         //start a service
         ServerFactoryBean svrBean = new ServerFactoryBean();
 
@@ -89,7 +88,7 @@
     }
 
     
-    public void testInvokingServerFromCXFClient() throws Exception {  
+    public void testInvokingServiceFromCXFClient() throws Exception {  
         Bus bus = BusFactory.getDefaultBus();
         
         ClientProxyFactoryBean proxyFactory = new ClientProxyFactoryBean();
@@ -102,7 +101,6 @@
         String result = client.echo("hello world");
         assertEquals("we should get the right answer from router", "hello world", result);
         
-        //Thread.sleep(200000);
-        
+                
     }
 }

Added: activemq/camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/spring/CxfEndpointBeanTest.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/spring/CxfEndpointBeanTest.java?rev=583092&view=auto
==============================================================================
--- activemq/camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/spring/CxfEndpointBeanTest.java (added)
+++ activemq/camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/spring/CxfEndpointBeanTest.java Tue Oct  9 03:17:57 2007
@@ -0,0 +1,19 @@
+package org.apache.camel.component.cxf.spring;
+
+import junit.framework.TestCase;
+import org.apache.cxf.configuration.spring.ConfigurerImpl;
+import org.apache.cxf.frontend.ServerFactoryBean;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+public class CxfEndpointBeanTest extends TestCase{
+    
+    public void testCxfEndpointBeanDefinitionParser() {
+        ClassPathXmlApplicationContext ctx = 
+            new ClassPathXmlApplicationContext(new String[]{"org/apache/camel/component/cxf/spring/CxfEndpointBeans.xml"});
+        
+        CxfEndpointBean routerEndpoint = (CxfEndpointBean)ctx.getBean("routerEndpoint");
+        assertEquals("Got the wrong endpoint address", routerEndpoint.getAddress(), "http://localhost:9000/router");
+        assertEquals("Got the wrong endpont service class", routerEndpoint.getServiceClass().getCanonicalName(), "org.apache.camel.component.cxf.HelloService");
+    }
+    
+}

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

Modified: activemq/camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/util/CxfEndpointUtilsTest.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/util/CxfEndpointUtilsTest.java?rev=583092&r1=583091&r2=583092&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/util/CxfEndpointUtilsTest.java (original)
+++ activemq/camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/util/CxfEndpointUtilsTest.java Tue Oct  9 03:17:57 2007
@@ -16,6 +16,10 @@
  */
 package org.apache.camel.component.cxf.util;
 
+import java.nio.ByteBuffer;
+import java.nio.CharBuffer;
+import java.nio.charset.CharacterCodingException;
+
 import javax.xml.namespace.QName;
 
 import org.apache.camel.CamelContext;
@@ -23,18 +27,19 @@
 import org.apache.camel.component.cxf.CxfEndpoint;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.easymock.classextension.EasyMock;
+import sun.nio.cs.ThreadLocalCoders;
+import sun.text.Normalizer;
 import junit.framework.TestCase;
 
 public class CxfEndpointUtilsTest extends TestCase {
-    // setup the
+    // set up the port name and service name
     private static final QName SERVICE_NAME =
         new QName("http://www.example.com/test", "ServiceName");
-    //private static final QName PORT_NAME =
-    //    new QName("http://www.example.com/test", "PortName");
+   
     static final String CXF_BASE_URI = "cxf://http://www.example.com/testaddress"
         + "?serviceClass=org.apache.camel.component.cxf.HelloService"
-        + "&portName=%7bhttp://www.example.com/test%7dPortName" 
-        + "&serviceName=%7bhttp://www.example.com/test%7dServiceName";
+        + "&portName={http://www.example.com/test}PortName" 
+        + "&serviceName={http://www.example.com/test}ServiceName";
         
     
     CxfEndpoint cxfEndpoint;
@@ -50,5 +55,6 @@
         assertEquals("We should get the right service name", service, SERVICE_NAME);        
     }
     
+   
       
 }

Added: activemq/camel/trunk/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/GreeterEndpointBeans.xml
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/GreeterEndpointBeans.xml?rev=583092&view=auto
==============================================================================
--- activemq/camel/trunk/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/GreeterEndpointBeans.xml (added)
+++ activemq/camel/trunk/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/GreeterEndpointBeans.xml Tue Oct  9 03:17:57 2007
@@ -0,0 +1,22 @@
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:cxf="http://activemq.apache.org/camel/schema/cxfEndpoint"      
+       xsi:schemaLocation="
+       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
+       http://activemq.apache.org/camel/schema/cxfEndpoint http://activemq.apache.org/camel/schema/cxf/cxfEndpoint.xsd
+    ">
+
+  
+  <cxf:cxfEndpoint id="routerEndpoint" address="http://localhost:9003/CamelContext/RouterPort" 
+    serviceClass="org.apache.hello_world_soap_http.GreeterImpl"/>
+  
+    
+  <cxf:cxfEndpoint id="serviceEndpoint" address="http://localhost:9000/SoapContext/SoapPort" 
+    wsdlURL="testutils/hello_world.wsdl"
+    serviceClass="org.apache.hello_world_soap_http.Greeter"
+    endpointName="s:SoapPort"
+    serviceName="s:SOAPService"
+    xmlns:s="http://apache.org/hello_world_soap_http" />
+ 
+
+</beans>
\ No newline at end of file

Propchange: activemq/camel/trunk/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/GreeterEndpointBeans.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Added: activemq/camel/trunk/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/spring/CxfEndpointBeans.xml
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/spring/CxfEndpointBeans.xml?rev=583092&view=auto
==============================================================================
--- activemq/camel/trunk/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/spring/CxfEndpointBeans.xml (added)
+++ activemq/camel/trunk/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/spring/CxfEndpointBeans.xml Tue Oct  9 03:17:57 2007
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    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.
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:cxf="http://activemq.apache.org/camel/schema/cxfEndpoint"      
+       xsi:schemaLocation="
+       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
+       http://activemq.apache.org/camel/schema/cxfEndpoint http://activemq.apache.org/camel/schema/cxf/cxfEndpoint.xsd
+    ">
+
+  
+  <cxf:cxfEndpoint id="routerEndpoint" address="http://localhost:9000/router" 
+    serviceClass="org.apache.camel.component.cxf.HelloService"/>
+  
+    
+  <cxf:cxfEndpoint id="serviceEndpoint" address="http://localhost:9002/helloworld" 
+    serviceClass="org.apache.camel.component.cxf.HelloService"/>
+ 
+
+</beans>

Propchange: activemq/camel/trunk/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/spring/CxfEndpointBeans.xml
------------------------------------------------------------------------------
    svn:eol-style = native