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;