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;