Author: rmannibucau
Date: Mon Jul  8 14:31:49 2013
New Revision: 1500765

URL: http://svn.apache.org/r1500765
Log:
TOMEE-999 propagating cxf databinding to service (and not only server)

Modified:
    
tomee/tomee/trunk/server/openejb-cxf-transport/src/main/java/org/apache/openejb/server/cxf/transport/util/CxfUtil.java
    
tomee/tomee/trunk/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/CxfEndpoint.java
    
tomee/tomee/trunk/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/ejb/EjbEndpoint.java
    
tomee/tomee/trunk/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/pojo/PojoEndpoint.java

Modified: 
tomee/tomee/trunk/server/openejb-cxf-transport/src/main/java/org/apache/openejb/server/cxf/transport/util/CxfUtil.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/server/openejb-cxf-transport/src/main/java/org/apache/openejb/server/cxf/transport/util/CxfUtil.java?rev=1500765&r1=1500764&r2=1500765&view=diff
==============================================================================
--- 
tomee/tomee/trunk/server/openejb-cxf-transport/src/main/java/org/apache/openejb/server/cxf/transport/util/CxfUtil.java
 (original)
+++ 
tomee/tomee/trunk/server/openejb-cxf-transport/src/main/java/org/apache/openejb/server/cxf/transport/util/CxfUtil.java
 Mon Jul  8 14:31:49 2013
@@ -180,7 +180,7 @@ public final class CxfUtil {
         }
     }
 
-    private static void configureInterceptors(final 
AbstractBasicInterceptorProvider abip, final String prefix, final 
Collection<ServiceInfo> availableServices, final Properties beanConfig) {
+    public static void configureInterceptors(final 
AbstractBasicInterceptorProvider abip, final String prefix, final 
Collection<ServiceInfo> availableServices, final Properties beanConfig) {
         // interceptors
         final String inInterceptorsIds = beanConfig.getProperty(prefix + 
IN_INTERCEPTORS);
         if (inInterceptorsIds != null && !inInterceptorsIds.trim().isEmpty()) {
@@ -203,7 +203,7 @@ public final class CxfUtil {
         }
     }
 
-    private static List<AbstractFeature> createFeatures(final 
Collection<ServiceInfo> availableServices, final String featuresIds) {
+    public static List<AbstractFeature> createFeatures(final 
Collection<ServiceInfo> availableServices, final String featuresIds) {
         final List<?> features = ServiceInfos.resolve(availableServices, 
featuresIds.split(","));
         for (Object instance : features) {
             if (!AbstractFeature.class.isInstance(instance)) {
@@ -213,7 +213,7 @@ public final class CxfUtil {
         return (List<AbstractFeature>) features;
     }
 
-    private static List<Interceptor<? extends Message>> 
createInterceptors(final Collection<ServiceInfo> availableServices, final 
String ids) {
+    public static List<Interceptor<? extends Message>> 
createInterceptors(final Collection<ServiceInfo> availableServices, final 
String ids) {
         final List<?> instances = ServiceInfos.resolve(availableServices, 
ids.split(","));
         for (Object instance : instances) {
             if (!Interceptor.class.isInstance(instance)) {

Modified: 
tomee/tomee/trunk/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/CxfEndpoint.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/CxfEndpoint.java?rev=1500765&r1=1500764&r2=1500765&view=diff
==============================================================================
--- 
tomee/tomee/trunk/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/CxfEndpoint.java
 (original)
+++ 
tomee/tomee/trunk/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/CxfEndpoint.java
 Mon Jul  8 14:31:49 2013
@@ -18,6 +18,7 @@
 package org.apache.openejb.server.cxf;
 
 import org.apache.cxf.Bus;
+import org.apache.cxf.databinding.DataBinding;
 import org.apache.cxf.endpoint.Server;
 import org.apache.cxf.endpoint.ServerImpl;
 import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
@@ -27,7 +28,10 @@ import org.apache.cxf.jaxws.support.JaxW
 import org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean;
 import org.apache.cxf.service.Service;
 import org.apache.cxf.transport.http.HTTPTransportFactory;
+import org.apache.openejb.OpenEJBRuntimeException;
+import org.apache.openejb.assembler.classic.ServiceInfo;
 import org.apache.openejb.assembler.classic.util.ServiceConfiguration;
+import org.apache.openejb.assembler.classic.util.ServiceInfos;
 import org.apache.openejb.core.webservices.HandlerResolverImpl;
 import org.apache.openejb.core.webservices.PortData;
 import org.apache.openejb.server.cxf.transport.util.CxfUtil;
@@ -38,8 +42,10 @@ import javax.xml.ws.Binding;
 import javax.xml.ws.handler.Handler;
 import javax.xml.ws.http.HTTPBinding;
 import javax.xml.ws.soap.SOAPBinding;
+import java.util.Collection;
 import java.util.List;
 import java.util.Map;
+import java.util.Properties;
 import java.util.concurrent.Executor;
 
 public abstract class CxfEndpoint {
@@ -207,4 +213,33 @@ public abstract class CxfEndpoint {
                        this.server.stop();
                }
        }
-}
\ No newline at end of file
+
+    protected static JaxWsServiceFactoryBean configureService(final 
JaxWsServiceFactoryBean serviceFactory, final ServiceConfiguration 
configuration, final String prefix) {
+        final Properties beanConfig = configuration.getProperties();
+        if (beanConfig == null || beanConfig.isEmpty()) {
+            return serviceFactory;
+        }
+
+        final Collection<ServiceInfo> availableServices = 
configuration.getAvailableServices();
+
+        // databinding
+        final String databinding = beanConfig.getProperty(prefix + 
CxfUtil.DATABINDING);
+        if (databinding != null && !databinding.trim().isEmpty()) {
+            Object instance = ServiceInfos.resolve(availableServices, 
databinding);
+            if (instance == null) {  // maybe id == classname
+                try {
+                    instance = 
Thread.currentThread().getContextClassLoader().loadClass(databinding).newInstance();
+                } catch (Exception e) {
+                    // ignore
+                }
+            }
+            if (!DataBinding.class.isInstance(instance)) {
+                throw new OpenEJBRuntimeException(instance + " is not a " + 
DataBinding.class.getName()
+                        + ", please check configuration of service [id=" + 
databinding + "]");
+            }
+            serviceFactory.setDataBinding((DataBinding) instance);
+        }
+
+        return serviceFactory;
+    }
+}

Modified: 
tomee/tomee/trunk/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/ejb/EjbEndpoint.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/ejb/EjbEndpoint.java?rev=1500765&r1=1500764&r2=1500765&view=diff
==============================================================================
--- 
tomee/tomee/trunk/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/ejb/EjbEndpoint.java
 (original)
+++ 
tomee/tomee/trunk/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/ejb/EjbEndpoint.java
 Mon Jul  8 14:31:49 2013
@@ -52,7 +52,7 @@ public class EjbEndpoint extends CxfEndp
         String bindingURI = JaxWsUtils.getBindingURI(portData.getBindingID());
         implInfo = new JaxWsImplementorInfoImpl((Class) implementor, 
bindingURI);
 
-        serviceFactory = new JaxWsServiceFactoryBean(implInfo);
+        serviceFactory = configureService(new 
JaxWsServiceFactoryBean(implInfo), config, CXF_JAXWS_PREFIX);
         serviceFactory.setBus(bus);
         serviceFactory.setServiceClass(beanContext.getBeanClass());
 

Modified: 
tomee/tomee/trunk/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/pojo/PojoEndpoint.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/pojo/PojoEndpoint.java?rev=1500765&r1=1500764&r2=1500765&view=diff
==============================================================================
--- 
tomee/tomee/trunk/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/pojo/PojoEndpoint.java
 (original)
+++ 
tomee/tomee/trunk/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/pojo/PojoEndpoint.java
 Mon Jul  8 14:31:49 2013
@@ -55,7 +55,7 @@ public class PojoEndpoint extends CxfEnd
         }
         implInfo = new JaxWsImplementorInfoImpl(instance, bindingURI);
 
-        serviceFactory = new JaxWsServiceFactoryBean(implInfo);
+        serviceFactory = configureService(new 
JaxWsServiceFactoryBean(implInfo), config, CXF_JAXWS_PREFIX);
         serviceFactory.setBus(bus);
         serviceFactory.setServiceClass(instance);
 


Reply via email to