You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@camel.apache.org by Claus Ibsen <cl...@gmail.com> on 2011/08/30 11:23:03 UTC
Re: 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
The CamelContext API have that method
String resolvePropertyPlaceholders(String text) throws Exception;
So you do *not* need to depend on DefaultCamelContext, but just
CamelContext interface.
On Tue, Aug 30, 2011 at 11:19 AM, <ni...@apache.org> wrote:
> 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
>
>
>
--
Claus Ibsen
-----------------
FuseSource
Email: cibsen@fusesource.com
Web: http://fusesource.com
Twitter: davsclaus, fusenews
Blog: http://davsclaus.blogspot.com/
Author of Camel in Action: http://www.manning.com/ibsen/