You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ni...@apache.org on 2011/08/30 11:19:11 UTC

svn commit: r1163153 - in /camel/trunk/components/camel-cxf/src: main/java/org/apache/camel/component/cxf/ main/java/org/apache/camel/component/cxf/spring/ test/java/org/apache/camel/component/cxf/spring/ test/resources/org/apache/camel/component/cxf/s...

Author: ningjiang
Date: Tue Aug 30 09:19:11 2011
New Revision: 1163153

URL: http://svn.apache.org/viewvc?rev=1163153&view=rev
Log:
CAMEL-3510 cxf namespace supports Camel properties placeholder out of the box

Added:
    camel/trunk/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/spring/testEndpoint.properties   (with props)
Modified:
    camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfEndpoint.java
    camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/spring/CxfEndpointBeanDefinitionParser.java
    camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/spring/CxfEndpointBeansRouterTest.java
    camel/trunk/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/spring/CxfEndpointBeansRouter.xml

Modified: camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfEndpoint.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfEndpoint.java?rev=1163153&r1=1163152&r2=1163153&view=diff
==============================================================================
--- camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfEndpoint.java (original)
+++ camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfEndpoint.java Tue Aug 30 09:19:11 2011
@@ -27,14 +27,10 @@ import javax.xml.namespace.QName;
 import javax.xml.ws.WebServiceProvider;
 import javax.xml.ws.handler.Handler;
 
+import org.apache.camel.*;
+import org.apache.camel.impl.DefaultCamelContext;
 import org.w3c.dom.Element;
 
-import org.apache.camel.CamelContext;
-import org.apache.camel.CamelException;
-import org.apache.camel.Consumer;
-import org.apache.camel.Processor;
-import org.apache.camel.Producer;
-import org.apache.camel.Service;
 import org.apache.camel.component.cxf.common.header.CxfHeaderFilterStrategy;
 import org.apache.camel.component.cxf.common.message.CxfConstants;
 import org.apache.camel.component.cxf.feature.MessageDataFormatFeature;
@@ -90,6 +86,8 @@ public class CxfEndpoint extends Default
     private Class<?> serviceClass;
     private QName portName;
     private QName serviceName;
+    private String portNameString;
+    private String serviceNameString;
     private String defaultOperationName;
     private String defaultOperationNamespace;
     // This is for invoking the CXFClient with wrapped parameters of unwrapped parameters
@@ -189,11 +187,11 @@ public class CxfEndpoint extends Default
         if (sfb instanceof JaxWsServerFactoryBean && handlers != null) {
             ((JaxWsServerFactoryBean)sfb).setHandlers(handlers);
         }
-        if (transportId != null) {
-            sfb.setTransportId(transportId);
+        if (getTransportId() != null) {
+            sfb.setTransportId(getTransportId());
         }
-        if (bindingId != null) {
-            sfb.setBindingId(bindingId);
+        if (getBindingId() != null) {
+            sfb.setBindingId(getBindingId());
         }
         
         // wsdl url
@@ -319,11 +317,11 @@ public class CxfEndpoint extends Default
         if (factoryBean instanceof JaxWsProxyFactoryBean && handlers != null) {
             ((JaxWsProxyFactoryBean)factoryBean).setHandlers(handlers);
         }
-        if (transportId != null) {
-            factoryBean.setTransportId(transportId);
+        if (getTransportId() != null) {
+            factoryBean.setTransportId(getTransportId());
         }
-        if (bindingId != null) {
-            factoryBean.setBindingId(bindingId);
+        if (getBindingId() != null) {
+            factoryBean.setBindingId(getBindingId());
         }
 
         // address
@@ -502,6 +500,18 @@ public class CxfEndpoint extends Default
         return answer;
     }
 
+    protected String resolvePropertyPlaceholders(String str) {
+        try {
+            if (getCamelContext() != null) {
+                return ((DefaultCamelContext)getCamelContext()).resolvePropertyPlaceholders(str);
+            } else {
+                return str;
+            }
+        } catch (Exception ex) {
+            throw new RuntimeCamelException(ex);
+        }
+    }
+
     // Properties
     // -------------------------------------------------------------------------
 
@@ -514,7 +524,7 @@ public class CxfEndpoint extends Default
     }
 
     public String getPublishedEndpointUrl() {
-        return publishedEndpointUrl;
+        return resolvePropertyPlaceholders(publishedEndpointUrl);
     }
 
     public void setPublishedEndpointUrl(String url) {
@@ -522,7 +532,7 @@ public class CxfEndpoint extends Default
     }
 
     public String getWsdlURL() {
-        return wsdlURL;
+        return resolvePropertyPlaceholders(wsdlURL);
     }
 
     public void setWsdlURL(String url) {
@@ -542,11 +552,11 @@ public class CxfEndpoint extends Default
     }
     
     public void setServiceClass(String type) throws ClassNotFoundException {
-        serviceClass = ClassLoaderUtils.loadClass(type, getClass());
+        serviceClass = ClassLoaderUtils.loadClass(resolvePropertyPlaceholders(type), getClass());
     }
 
     public void setServiceNameString(String service) {
-        serviceName = QName.valueOf(service);
+        serviceNameString = service;
     }
 
     public void setServiceName(QName service) {
@@ -554,10 +564,16 @@ public class CxfEndpoint extends Default
     }
 
     public QName getServiceName() {
+        if (serviceName == null && serviceNameString != null) {
+            serviceName = QName.valueOf(resolvePropertyPlaceholders(serviceNameString));
+        }
         return serviceName;
     }
 
     public QName getPortName() {
+        if (portName == null && portNameString != null) {
+            portName = QName.valueOf(resolvePropertyPlaceholders(portNameString));
+        }
         return portName;
     }
 
@@ -566,7 +582,7 @@ public class CxfEndpoint extends Default
     }
 
     public void setEndpointNameString(String port) {
-        portName = QName.valueOf(port);
+        portNameString = port;
     }
 
     public void setEndpointName(QName port) {
@@ -574,7 +590,7 @@ public class CxfEndpoint extends Default
     }
 
     public String getDefaultOperationName() {
-        return defaultOperationName;
+        return resolvePropertyPlaceholders(defaultOperationName);
     }
 
     public void setDefaultOperationName(String name) {
@@ -582,7 +598,7 @@ public class CxfEndpoint extends Default
     }
 
     public String getDefaultOperationNamespace() {
-        return defaultOperationNamespace;
+        return resolvePropertyPlaceholders(defaultOperationNamespace);
     }
 
     public void setDefaultOperationNamespace(String namespace) {
@@ -737,7 +753,7 @@ public class CxfEndpoint extends Default
     }
 
     public String getAddress() {
-        return address;
+        return resolvePropertyPlaceholders(address);
     }
 
     public void setMtomEnabled(boolean mtomEnabled) {
@@ -859,7 +875,7 @@ public class CxfEndpoint extends Default
     }
 
     public String getTransportId() {
-        return transportId;
+        return resolvePropertyPlaceholders(transportId);
     }
 
     public void setTransportId(String transportId) {
@@ -867,7 +883,7 @@ public class CxfEndpoint extends Default
     }
     
     public String getBindingId() {
-        return bindingId;
+        return resolvePropertyPlaceholders(bindingId);
     }
 
     public void setBindingId(String bindingId) {

Modified: camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/spring/CxfEndpointBeanDefinitionParser.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/spring/CxfEndpointBeanDefinitionParser.java?rev=1163153&r1=1163152&r2=1163153&view=diff
==============================================================================
--- camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/spring/CxfEndpointBeanDefinitionParser.java (original)
+++ camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/spring/CxfEndpointBeanDefinitionParser.java Tue Aug 30 09:19:11 2011
@@ -35,7 +35,8 @@ public class CxfEndpointBeanDefinitionPa
     }
 
     private boolean isSpringPlaceHolder(String value) {
-        if (value != null && value.startsWith("${") && value.endsWith("}")) {
+        if (value != null && (value.startsWith("${") && value.endsWith("}"))
+                || value.startsWith("{{") && value.endsWith("}}")) {
             return true;
         }
         return false;

Modified: camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/spring/CxfEndpointBeansRouterTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/spring/CxfEndpointBeansRouterTest.java?rev=1163153&r1=1163152&r2=1163153&view=diff
==============================================================================
--- camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/spring/CxfEndpointBeansRouterTest.java (original)
+++ camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/spring/CxfEndpointBeansRouterTest.java Tue Aug 30 09:19:11 2011
@@ -30,6 +30,8 @@ import org.apache.cxf.transport.http.HTT
 
 import org.junit.Test;
 
+import javax.xml.namespace.QName;
+
 public class CxfEndpointBeansRouterTest extends AbstractSpringBeanTestSupport {
 
     protected String[] getApplicationContextFiles() {
@@ -67,5 +69,21 @@ public class CxfEndpointBeansRouterTest 
                    ex instanceof org.apache.cxf.interceptor.Fault
                    || ex instanceof HTTPException);
     }
+
+    @Test
+    public void testCxfBeanWithCamelPropertiesHolder() throws Exception {
+        // get the camelContext from application context
+        CamelContext camelContext = (CamelContext) ctx.getBean("camel");
+        CxfEndpoint testEndpoint = (CxfEndpoint)camelContext.getEndpoint("cxf:bean:testEndpoint");
+        QName endpointName = QName.valueOf("{http://org.apache.camel.component.cxf}myEndpoint");
+        QName serviceName = QName.valueOf("{http://org.apache.camel.component.cxf}myService");
+
+        assertEquals("Got a wrong address", "http://localhost:9000/testEndpoint", testEndpoint.getAddress());
+        assertEquals("Got a wrong bindingId", "http://schemas.xmlsoap.org/wsdl/soap12/", testEndpoint.getBindingId());
+        assertEquals("Got a wrong transportId", "http://cxf.apache.org/transports/http", testEndpoint.getTransportId());
+        assertEquals("Got a wrong endpointName", endpointName, testEndpoint.getPortName());
+        assertEquals("Got a wrong WsdlURL", "wsdl/test.wsdl", testEndpoint.getWsdlURL());
+        assertEquals("Got a wrong serviceName", serviceName, testEndpoint.getServiceName());
+    }
    
 }

Modified: camel/trunk/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/spring/CxfEndpointBeansRouter.xml
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/spring/CxfEndpointBeansRouter.xml?rev=1163153&r1=1163152&r2=1163153&view=diff
==============================================================================
--- camel/trunk/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/spring/CxfEndpointBeansRouter.xml (original)
+++ camel/trunk/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/spring/CxfEndpointBeansRouter.xml Tue Aug 30 09:19:11 2011
@@ -32,8 +32,13 @@
   <cxf:cxfEndpoint id="routerEndpoint" address="http://localhost:${CXFTestSupport.port1}/CxfEndpointBeansRouterTest/router"
     serviceClass="org.apache.camel.component.cxf.HelloService"/>
 
+  <cxf:cxfEndpoint id="serviceEndpoint" address="http://localhost:${CXFTestSupport.port2}/CxfEndpointBeansRouterTest/service"
+    serviceClass="org.apache.camel.component.cxf.HelloService"/>
 
-  <cxf:cxfEndpoint id="serviceEndpoint" address="http://localhost:${CXFTestSupport.port2}/CxfEndpointBeansRouterTest/helloworld"
+  <cxf:cxfEndpoint id="testEndpoint" address="{{address}}"
+    bindingId="{{bindingId}}" transportId="{{transportId}}"
+    serviceName="{{serviceName}}" endpointName="{{endpointName}}"
+    wsdlURL="{{wsdlURL}}"
     serviceClass="org.apache.camel.component.cxf.HelloService"/>
 
   <!-- Setting the http conduit policy -->
@@ -46,6 +51,7 @@
   <bean id="myProcessor" class="org.apache.camel.component.cxf.spring.MyProcessor"/>
 
    <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
+    <propertyPlaceholder id="properties" location="org/apache/camel/component/cxf/spring/testEndpoint.properties"/>
     <route>
       <from uri="cxf:bean:routerEndpoint" />
       <process ref="myProcessor" />

Added: camel/trunk/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/spring/testEndpoint.properties
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/spring/testEndpoint.properties?rev=1163153&view=auto
==============================================================================
--- camel/trunk/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/spring/testEndpoint.properties (added)
+++ camel/trunk/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/spring/testEndpoint.properties Tue Aug 30 09:19:11 2011
@@ -0,0 +1,26 @@
+#
+#
+#    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.
+#
+#
+address=http://localhost:9000/testEndpoint
+bindingId=http://schemas.xmlsoap.org/wsdl/soap12/
+transportId=http://cxf.apache.org/transports/http
+serviceName={http://org.apache.camel.component.cxf}myService
+endpointName={http://org.apache.camel.component.cxf}myEndpoint
+wsdlURL=wsdl/test.wsdl
\ No newline at end of file

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

Propchange: camel/trunk/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/spring/testEndpoint.properties
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Propchange: camel/trunk/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/spring/testEndpoint.properties
------------------------------------------------------------------------------
    svn:mime-type = text/plain