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/09/10 07:55:13 UTC
svn commit: r1167465 - in /camel/branches/camel-2.8.x: ./
components/camel-cxf/src/main/java/org/apache/camel/component/cxf/
Author: ningjiang
Date: Sat Sep 10 05:55:13 2011
New Revision: 1167465
URL: http://svn.apache.org/viewvc?rev=1167465&view=rev
Log:
Merged revisions 1167131 via svnmerge from
https://svn.apache.org/repos/asf/camel/trunk
........
r1167131 | ningjiang | 2011-09-09 20:30:08 +0800 (Fri, 09 Sep 2011) | 1 line
CAMEL-4430 Using the ClientFactoryBean instead of ProxyFactoryBean to create the Client for the CxfProducer
........
Modified:
camel/branches/camel-2.8.x/ (props changed)
camel/branches/camel-2.8.x/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfBlueprintEndpoint.java
camel/branches/camel-2.8.x/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfEndpoint.java
camel/branches/camel-2.8.x/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfSpringEndpoint.java
Propchange: camel/branches/camel-2.8.x/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sat Sep 10 05:55:13 2011
@@ -1 +1 @@
-/camel/trunk:1148706,1148710,1149570,1150651,1151000,1151054,1151087,1151362,1152170,1152755,1153620,1153812,1153829,1154684,1155230,1156108,1156260,1156277,1156479,1156524,1157348,1157749,1157798,1157831,1157878,1158153,1159171,1159174,1159326,1159457,1159460,1159606,1159682-1159683,1159867,1160547,1160637,1161010,1161082,1161524,1162309,1162395,1163231,1163420,1164557,1164633,1164973-1165000,1165152,1165157,1165658,1165971,1165987,1167098,1167448
+/camel/trunk:1148706,1148710,1149570,1150651,1151000,1151054,1151087,1151362,1152170,1152755,1153620,1153812,1153829,1154684,1155230,1156108,1156260,1156277,1156479,1156524,1157348,1157749,1157798,1157831,1157878,1158153,1159171,1159174,1159326,1159457,1159460,1159606,1159682-1159683,1159867,1160547,1160637,1161010,1161082,1161524,1162309,1162395,1163231,1163420,1164557,1164633,1164973-1165000,1165152,1165157,1165658,1165971,1165987,1167098,1167131,1167448
Propchange: camel/branches/camel-2.8.x/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.
Modified: camel/branches/camel-2.8.x/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfBlueprintEndpoint.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.8.x/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfBlueprintEndpoint.java?rev=1167465&r1=1167464&r2=1167465&view=diff
==============================================================================
--- camel/branches/camel-2.8.x/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfBlueprintEndpoint.java (original)
+++ camel/branches/camel-2.8.x/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfBlueprintEndpoint.java Sat Sep 10 05:55:13 2011
@@ -66,45 +66,6 @@ public class CxfBlueprintEndpoint extend
// Package private methods
// -------------------------------------------------------------------------
- /**
- * Create a CXF client object
- */
- Client createClient() throws Exception {
-
- // get service class
- if (getDataFormat().equals(DataFormat.POJO)) {
- ObjectHelper.notNull(getServiceClass(), CxfConstants.SERVICE_CLASS);
- }
-
- if (getWsdlURL() == null && getServiceClass() == null) {
- // no WSDL and serviceClass specified, set our default serviceClass
- setServiceClass(org.apache.camel.component.cxf.DefaultSEI.class.getName());
- setDefaultOperationNamespace(CxfConstants.DISPATCH_NAMESPACE);
- setDefaultOperationName(CxfConstants.DISPATCH_DEFAULT_OPERATION_NAMESPACE);
- if (getDataFormat().equals(DataFormat.PAYLOAD)) {
- setSkipPayloadMessagePartCheck(true);
- }
- }
-
- Class<?> cls = null;
- if (getServiceClass() != null) {
- //Fool CXF classes to load their settings and bindings from the CXF bundle
- cls = getServiceClass();
- // create client factory bean
- ClientProxyFactoryBean factoryBean = createClientFactoryBean(cls);
- // setup client factory bean
- setupClientFactoryBean(factoryBean, cls);
- return ((ClientProxy) Proxy.getInvocationHandler(factoryBean.create())).getClient();
- } else {
- checkName(getPortName(), "endpoint/port name");
- checkName(getServiceName(), "service name");
-
- ClientFactoryBean factoryBean = createClientFactoryBean();
- // setup client factory bean
- setupClientFactoryBean(factoryBean);
- return factoryBean.create();
- }
- }
protected void checkName(Object value, String name) {
if (ObjectHelper.isEmpty(value)) {
Modified: camel/branches/camel-2.8.x/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfEndpoint.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.8.x/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfEndpoint.java?rev=1167465&r1=1167464&r2=1167465&view=diff
==============================================================================
--- camel/branches/camel-2.8.x/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfEndpoint.java (original)
+++ camel/branches/camel-2.8.x/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfEndpoint.java Sat Sep 10 05:55:13 2011
@@ -48,6 +48,7 @@ import org.apache.camel.util.ObjectHelpe
import org.apache.cxf.Bus;
import org.apache.cxf.BusFactory;
import org.apache.cxf.common.classloader.ClassLoaderUtils;
+import org.apache.cxf.common.injection.ResourceInjector;
import org.apache.cxf.common.util.ClassHelper;
import org.apache.cxf.common.util.ModCountCopyOnWriteArrayList;
import org.apache.cxf.endpoint.Client;
@@ -64,9 +65,16 @@ import org.apache.cxf.interceptor.Interc
import org.apache.cxf.jaxws.JaxWsClientFactoryBean;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
+import org.apache.cxf.jaxws.context.WebServiceContextResourceResolver;
+import org.apache.cxf.jaxws.handler.AnnotationHandlerChainBuilder;
+import org.apache.cxf.jaxws.support.JaxWsEndpointImpl;
+import org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean;
import org.apache.cxf.message.Attachment;
import org.apache.cxf.message.Message;
import org.apache.cxf.message.MessageContentsList;
+import org.apache.cxf.resource.DefaultResourceManager;
+import org.apache.cxf.resource.ResourceManager;
+import org.apache.cxf.resource.ResourceResolver;
import org.apache.cxf.service.model.BindingOperationInfo;
import org.apache.cxf.service.model.MessagePartInfo;
import org.slf4j.Logger;
@@ -252,21 +260,21 @@ public class CxfEndpoint extends Default
* Create a client factory bean object. Notice that the serviceClass <b>must</b> be
* an interface.
*/
- protected ClientProxyFactoryBean createClientFactoryBean(Class<?> cls) throws CamelException {
+ protected ClientFactoryBean createClientFactoryBean(Class<?> cls) throws CamelException {
if (CxfEndpointUtils.hasWebServiceAnnotation(cls)) {
- return new JaxWsProxyFactoryBean(new JaxWsClientFactoryBean() {
+ return new JaxWsClientFactoryBean() {
@Override
protected Client createClient(Endpoint ep) {
return new CamelCxfClientImpl(getBus(), ep);
}
- });
+ };
} else {
- return new ClientProxyFactoryBean(new ClientFactoryBean() {
+ return new ClientFactoryBean() {
@Override
protected Client createClient(Endpoint ep) {
return new CamelCxfClientImpl(getBus(), ep);
}
- });
+ };
}
}
@@ -288,83 +296,46 @@ public class CxfEndpoint extends Default
};
}
- /**
- * Populate a client factory bean
- */
- protected void setupClientFactoryBean(ClientProxyFactoryBean factoryBean, Class<?> cls) {
- // service class
- factoryBean.setServiceClass(cls);
-
- factoryBean.setInInterceptors(in);
- factoryBean.setOutInterceptors(out);
- factoryBean.setOutFaultInterceptors(outFault);
- factoryBean.setInFaultInterceptors(inFault);
- factoryBean.setFeatures(features);
-
- if (factoryBean instanceof JaxWsProxyFactoryBean && handlers != null) {
- ((JaxWsProxyFactoryBean)factoryBean).setHandlers(handlers);
- }
- if (transportId != null) {
- factoryBean.setTransportId(transportId);
- }
- if (bindingId != null) {
- factoryBean.setBindingId(bindingId);
- }
-
- // address
- factoryBean.setAddress(getAddress());
-
- // wsdl url
- if (getWsdlURL() != null) {
- factoryBean.setWsdlURL(getWsdlURL());
- }
-
- // service name qname
- if (getServiceName() != null) {
- factoryBean.setServiceName(getServiceName());
- }
-
- // port name qname
- if (getPortName() != null) {
- factoryBean.setEndpointName(getPortName());
- }
-
- // apply feature here
- if (getDataFormat() == DataFormat.MESSAGE) {
- factoryBean.getFeatures().add(new MessageDataFormatFeature());
- } else if (getDataFormat() == DataFormat.PAYLOAD) {
- factoryBean.getFeatures().add(new PayLoadDataFormatFeature());
- factoryBean.setDataBinding(new HybridSourceDataBinding());
- }
-
- if (loggingFeatureEnabled) {
- factoryBean.getFeatures().add(new LoggingFeature());
- }
-
- // set the document-literal wrapped style
- if (getWrappedStyle() != null) {
- factoryBean.getServiceFactory().setWrapped(getWrappedStyle());
- }
-
- // set the properties on CxfProxyFactoryBean
- if (getProperties() != null) {
- if (factoryBean.getProperties() != null) {
- // add to existing properties
- factoryBean.getProperties().putAll(getProperties());
- } else {
- factoryBean.setProperties(getProperties());
+ protected void setupHandlers(ClientFactoryBean factoryBean, Client client) {
+ if (factoryBean instanceof JaxWsClientFactoryBean && handlers != null) {
+ AnnotationHandlerChainBuilder builder = new AnnotationHandlerChainBuilder();
+ JaxWsServiceFactoryBean sf = (JaxWsServiceFactoryBean)factoryBean.getServiceFactory();
+ List<Handler> chain = new ArrayList<Handler>(handlers);
+
+ chain.addAll(builder.buildHandlerChainFromClass(sf.getServiceClass(),
+ sf.getEndpointInfo().getName(),
+ sf.getServiceQName(),
+ factoryBean.getBindingId()));
+
+ if (!chain.isEmpty()) {
+ ResourceManager resourceManager = getBus().getExtension(ResourceManager.class);
+ List<ResourceResolver> resolvers = resourceManager.getResourceResolvers();
+ resourceManager = new DefaultResourceManager(resolvers);
+ resourceManager.addResourceResolver(new WebServiceContextResourceResolver());
+ ResourceInjector injector = new ResourceInjector(resourceManager);
+ for (Handler h : chain) {
+ if (Proxy.isProxyClass(h.getClass()) && getServiceClass() != null) {
+ injector.inject(h, getServiceClass());
+ injector.construct(h, getServiceClass());
+ } else {
+ injector.inject(h);
+ injector.construct(h);
+ }
+ }
}
- LOG.debug("ClientProxyFactoryBean: {} added properties: {}", factoryBean, properties);
- }
- factoryBean.setBus(getBus());
+ ((JaxWsEndpointImpl)client.getEndpoint()).getJaxwsBinding().setHandlerChain(chain);
+ }
}
- protected void setupClientFactoryBean(ClientFactoryBean factoryBean) {
+ protected void setupClientFactoryBean(ClientFactoryBean factoryBean, Class<?> cls) {
+ if (cls != null) {
+ factoryBean.setServiceClass(cls);
+ }
factoryBean.setInInterceptors(in);
factoryBean.setOutInterceptors(out);
factoryBean.setOutFaultInterceptors(outFault);
- factoryBean.setInFaultInterceptors(inFault);
+ factoryBean.setInFaultInterceptors(inFault);
factoryBean.setFeatures(features);
factoryBean.setTransportId(transportId);
factoryBean.setBindingId(bindingId);
@@ -434,17 +405,22 @@ public class CxfEndpoint extends Default
if (getServiceClass() != null) {
cls = getServiceClass();
// create client factory bean
- ClientProxyFactoryBean factoryBean = createClientFactoryBean(cls);
+ ClientFactoryBean factoryBean = createClientFactoryBean(cls);
// setup client factory bean
setupClientFactoryBean(factoryBean, cls);
- return ((ClientProxy) Proxy.getInvocationHandler(factoryBean.create())).getClient();
+ Client client = factoryBean.create();
+ // setup the handlers
+ setupHandlers(factoryBean, client);
+ return client;
} else {
+ // create the client without service class
+
checkName(portName, "endpoint/port name");
checkName(serviceName, "service name");
ClientFactoryBean factoryBean = createClientFactoryBean();
// setup client factory bean
- setupClientFactoryBean(factoryBean);
+ setupClientFactoryBean(factoryBean, null);
return factoryBean.create();
}
}
Modified: camel/branches/camel-2.8.x/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfSpringEndpoint.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.8.x/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfSpringEndpoint.java?rev=1167465&r1=1167464&r2=1167465&view=diff
==============================================================================
--- camel/branches/camel-2.8.x/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfSpringEndpoint.java (original)
+++ camel/branches/camel-2.8.x/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfSpringEndpoint.java Sat Sep 10 05:55:13 2011
@@ -110,7 +110,7 @@ public class CxfSpringEndpoint extends C
if (cls != null) {
// create client factory bean
- ClientProxyFactoryBean factoryBean = createClientFactoryBean(cls);
+ ClientFactoryBean factoryBean = createClientFactoryBean(cls);
// setup client factory bean
setupClientFactoryBean(factoryBean, cls);
@@ -130,13 +130,16 @@ public class CxfSpringEndpoint extends C
factoryBean.setEndpointName(new QName(getEndpointNamespace(), getEndpointLocalName()));
}
- return ((ClientProxy)Proxy.getInvocationHandler(factoryBean.create())).getClient();
+ Client client = factoryBean.create();
+ // setup the handlers
+ setupHandlers(factoryBean, client);
+ return client;
} else {
ClientFactoryBean factoryBean = createClientFactoryBean();
// setup client factory bean
- setupClientFactoryBean(factoryBean);
+ setupClientFactoryBean(factoryBean, null);
// fill in values that have not been filled.
QName serviceQName = null;