You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by wt...@apache.org on 2009/03/03 22:49:10 UTC
svn commit: r749772 - 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/
test/resources/org/apache/camel/component/cxf/
Author: wtam
Date: Tue Mar 3 21:49:10 2009
New Revision: 749772
URL: http://svn.apache.org/viewvc?rev=749772&view=rev
Log:
[CAMEL-1416] Using # notation to reference CXF serviceClass is not working
Added:
camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/ServiceClassRefTest.java (with props)
camel/trunk/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/ServiceClassRefTest-context.xml (with props)
Modified:
camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfComponent.java
camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfSpringEndpoint.java
camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/spring/CxfEndpointBeanDefinitionParser.java
Modified: camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfComponent.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfComponent.java?rev=749772&r1=749771&r2=749772&view=diff
==============================================================================
--- camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfComponent.java (original)
+++ camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfComponent.java Tue Mar 3 21:49:10 2009
@@ -16,6 +16,7 @@
*/
package org.apache.camel.component.cxf;
+import java.util.HashMap;
import java.util.Map;
import org.apache.camel.CamelContext;
@@ -60,6 +61,16 @@
CxfEndpointBean.class);
result = new CxfSpringEndpoint(this, bean);
+
+ // Apply Spring bean properties (including # notation referenced bean). Note that the
+ // Spring bean properties values can be overridden by property defined in URI query.
+ // The super class (DefaultComponent) will invoke "setProperties" after this method
+ // with to apply properties defined by URI query.
+ if (bean.getProperties() != null) {
+ Map<String, Object> copy = new HashMap<String, Object>();
+ copy.putAll(bean.getProperties());
+ setProperties(result, copy);
+ }
} else {
// endpoint URI does not specify a bean
Modified: camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfSpringEndpoint.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfSpringEndpoint.java?rev=749772&r1=749771&r2=749772&view=diff
==============================================================================
--- camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfSpringEndpoint.java (original)
+++ camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfSpringEndpoint.java Tue Mar 3 21:49:10 2009
@@ -17,16 +17,12 @@
package org.apache.camel.component.cxf;
import java.lang.reflect.Proxy;
-import java.util.HashMap;
-import java.util.Map;
-
import javax.xml.namespace.QName;
import org.apache.camel.CamelContext;
import org.apache.camel.component.cxf.spring.CxfEndpointBean;
import org.apache.camel.component.cxf.util.CxfEndpointUtils;
import org.apache.camel.spring.SpringCamelContext;
-import org.apache.camel.util.IntrospectionSupport;
import org.apache.camel.util.ObjectHelper;
import org.apache.cxf.Bus;
import org.apache.cxf.common.classloader.ClassLoaderUtils;
@@ -66,30 +62,11 @@
private void init(CxfEndpointBean bean) throws Exception {
this.bean = bean;
- // set properties from bean which can be overridden by endpoint URI
- setPropertiesBean();
-
// create configurer
configurer = new ConfigurerImpl(((SpringCamelContext)getCamelContext())
.getApplicationContext());
}
- /**
- * Read properties from the CxfEndpointBean and copy them to the
- * properties of this class. Note that the properties values can
- * be overridden by values in URI query as the DefaultComponent
- * will perform "setProperties" later (after the constructor).
- */
- private void setPropertiesBean() throws Exception {
- if (bean.getProperties() != null) {
- Map<String, Object> copy = new HashMap<String, Object>();
- copy.putAll(bean.getProperties());
-
- // pass the copy the method modifies the properties map
- IntrospectionSupport.setProperties(getCamelContext().getTypeConverter(),
- this, copy);
- }
- }
/**
*
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=749772&r1=749771&r2=749772&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 Mar 3 21:49:10 2009
@@ -73,25 +73,36 @@
}
}
+ /**
+ * Override mapToProperty() to handle the '#' reference notation ourselves. We put those
+ * properties with '#' in property map and let component to invoke setProperties() on the
+ * endpoint.
+ */
+ @Override
+ protected void mapToProperty(BeanDefinitionBuilder bean, String propertyName, String val) {
+ if (ID_ATTRIBUTE.equals(propertyName)) {
+ return;
+ }
+
+ if (org.springframework.util.StringUtils.hasText(val)) {
+ if (val.startsWith("#")) {
+ Map<String, Object> map = getPropertyMap(bean);
+ map.put(propertyName, val);
+ } else {
+ bean.addPropertyValue(propertyName, val);
+ }
+ }
+
+ }
@Override
protected void doParse(Element element, ParserContext ctx, BeanDefinitionBuilder bean) {
super.doParse(element, ctx, bean);
bean.setLazyInit(false);
- // put the id into the properties
- PropertyValue propertyValue = (PropertyValue)bean.getBeanDefinition().getPropertyValues()
- .getPropertyValue("properties");
-
- Map<String, Object> map = null;
- if (propertyValue == null) {
- map = new HashMap<String, Object>();
- bean.addPropertyValue("properties", map);
- } else {
- map = (Map<String, Object>)propertyValue.getValue();
- }
- String id = resolveId(element, bean.getBeanDefinition(), ctx);
- map.put("beanId", id);
+ // put the bean id into the property map
+ Map<String, Object> map = getPropertyMap(bean);
+ map.put("beanId", resolveId(element, bean.getBeanDefinition(), ctx));
}
@Override
@@ -111,6 +122,21 @@
protected boolean hasBusProperty() {
return true;
}
+
+ @SuppressWarnings("unchecked")
+ private Map<String, Object> getPropertyMap(BeanDefinitionBuilder bean) {
+ PropertyValue propertyValue = (PropertyValue)bean.getBeanDefinition().getPropertyValues()
+ .getPropertyValue("properties");
+
+ Map<String, Object> map = null;
+ if (propertyValue == null) {
+ map = new HashMap<String, Object>();
+ bean.addPropertyValue("properties", map);
+ } else {
+ map = (Map<String, Object>)propertyValue.getValue();
+ }
+ return map;
+ }
// To make the CxfEndpointBean clear without touching any Spring relates class
// , we implements the ApplicationContextAware here
Added: camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/ServiceClassRefTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/ServiceClassRefTest.java?rev=749772&view=auto
==============================================================================
--- camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/ServiceClassRefTest.java (added)
+++ camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/ServiceClassRefTest.java Tue Mar 3 21:49:10 2009
@@ -0,0 +1,40 @@
+/**
+ * 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.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit38.AbstractJUnit38SpringContextTests;
+
+/**
+ * Unit test to verify using '#' notation to reference serviceClass.
+ *
+ * @version $Revision$
+ */
+@ContextConfiguration
+public class ServiceClassRefTest extends AbstractJUnit38SpringContextTests {
+
+ @Autowired
+ protected CamelContext context;
+
+ public void testServiceClassNameCreatedByRefNotation() throws Exception {
+ CxfEndpoint endpoint = context.getEndpoint("cxf:bean:fromEndpoint", CxfEndpoint.class);
+ assertEquals("org.apache.camel.component.cxf.HelloServiceImpl", endpoint.getServiceClass());
+ }
+
+}
Propchange: camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/ServiceClassRefTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/ServiceClassRefTest.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: camel/trunk/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/ServiceClassRefTest-context.xml
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/ServiceClassRefTest-context.xml?rev=749772&view=auto
==============================================================================
--- camel/trunk/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/ServiceClassRefTest-context.xml (added)
+++ camel/trunk/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/ServiceClassRefTest-context.xml Tue Mar 3 21:49:10 2009
@@ -0,0 +1,42 @@
+<?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://camel.apache.org/schema/cxfEndpoint"
+
+ xsi:schemaLocation="
+ http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
+ http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
+ http://camel.apache.org/schema/cxfEndpoint http://camel.apache.org/schema/cxf/camel-cxf.xsd
+ ">
+
+ <bean id="myServiceClass" class="org.apache.camel.component.cxf.HelloServiceImpl"/>
+
+ <cxf:cxfEndpoint id="fromEndpoint" address="http://localhost:9000/helloworld"
+ serviceClass="#myServiceClass" />
+
+ <cxf:cxfEndpoint id="toEndpoint" address="http://localhost:9002/helloworld"
+ serviceClass="org.apache.camel.component.cxf.HelloService" />
+
+ <camelContext id="camelContext"
+ xmlns="http://camel.apache.org/schema/spring">
+ <route>
+ <from uri="cxf:bean:fromEndpoint"/>
+ <to uri="cxf:bean:toEndpoint"/>
+ </route>
+ </camelContext>
+
+</beans>
\ No newline at end of file
Propchange: camel/trunk/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/ServiceClassRefTest-context.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: camel/trunk/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/ServiceClassRefTest-context.xml
------------------------------------------------------------------------------
svn:keywords = Rev Date
Propchange: camel/trunk/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/ServiceClassRefTest-context.xml
------------------------------------------------------------------------------
svn:mime-type = text/xml