[jbossws-commits] JBossWS SVN: r13012 - stack/cxf/trunk/modules/client/src/main/java/org/jboss/wsf/stack/cxf/client.

jbossws-commits at lists.jboss.org jbossws-commits at lists.jboss.org
Thu Sep 23 04:35:23 EDT 2010


Author: richard.opalka at jboss.com
Date: 2010-09-23 04:35:22 -0400 (Thu, 23 Sep 2010)
New Revision: 13012

Modified:
   stack/cxf/trunk/modules/client/src/main/java/org/jboss/wsf/stack/cxf/client/ServiceObjectFactory.java
   stack/cxf/trunk/modules/client/src/main/java/org/jboss/wsf/stack/cxf/client/ServiceRefBinderJAXWS.java
   stack/cxf/trunk/modules/client/src/main/java/org/jboss/wsf/stack/cxf/client/ServiceReferenceable.java
Log:
[JBWS-3133] ServiceRef & PortComponentRef UMDM now respects @Addressing, @MTOM and @RespectBinding MDs

Modified: stack/cxf/trunk/modules/client/src/main/java/org/jboss/wsf/stack/cxf/client/ServiceObjectFactory.java
===================================================================
--- stack/cxf/trunk/modules/client/src/main/java/org/jboss/wsf/stack/cxf/client/ServiceObjectFactory.java	2010-09-23 08:31:11 UTC (rev 13011)
+++ stack/cxf/trunk/modules/client/src/main/java/org/jboss/wsf/stack/cxf/client/ServiceObjectFactory.java	2010-09-23 08:35:22 UTC (rev 13012)
@@ -28,6 +28,7 @@
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.net.URL;
+import java.util.Collection;
 import java.util.Hashtable;
 import java.util.LinkedList;
 import java.util.List;
@@ -52,12 +53,13 @@
 import org.jboss.logging.Logger;
 import org.jboss.wsf.spi.WSFException;
 import org.jboss.wsf.spi.deployment.UnifiedVirtualFile;
+import org.jboss.wsf.spi.metadata.j2ee.serviceref.UnifiedPortComponentRefMetaData;
 import org.jboss.wsf.spi.metadata.j2ee.serviceref.UnifiedServiceRefMetaData;
 import org.jboss.wsf.stack.cxf.client.configuration.JBossWSSpringBusFactory;
 
 /**
  * This ServiceObjectFactory reconstructs a javax.xml.ws.Service
- * for a given WSDL when the webservice client does a JNDI lookup
+ * for a given WSDL when the webservice client does a JNDI lookup.
  *
  * @see ServiceReferenceable
  *
@@ -89,185 +91,358 @@
     * @see javax.naming.spi.NamingManager#getObjectInstance
     * @see javax.naming.spi.NamingManager#getURLContext
     */
-   @SuppressWarnings(value="unchecked")
-   public Object getObjectInstance(Object obj, Name name, Context nameCtx, Hashtable environment) throws Exception
+   @SuppressWarnings(value = "unchecked")
+   public Object getObjectInstance(final Object obj, final Name name, final Context nameCtx, final Hashtable environment)
+         throws Exception
    {
       try
       {
-         Reference ref = (Reference)obj;
-
-         // Get the target class name
-         String targetClassName = (String)ref.get(ServiceReferenceable.TARGET_CLASS_NAME).getContent();
-
-         // Unmarshall the UnifiedServiceRef
-         UnifiedServiceRefMetaData serviceRef = unmarshallServiceRef(ref);
-         
-         Bus bus;
-         //Reset bus before constructing Service
-         BusFactory.setDefaultBus(null);
-         URL cxfConfig = getCXFConfiguration(serviceRef.getVfsRoot());
-         if (cxfConfig != null)
+         // references
+         final Reference ref = (Reference) obj;
+         final UnifiedServiceRefMetaData serviceRef = unmarshallServiceRef(ref);
+         // class names
+         final String serviceImplClass = this.getServiceClassName(ref, serviceRef);
+         final String targetClassName = this.getTargetClassName(ref, serviceRef, serviceImplClass);
+         // class instances
+         final Class<?> serviceClass = this.getClass(serviceImplClass);
+         final Class<?> targetClass = this.getClass(targetClassName);
+         // construct service
+         final Bus bus = this.getBus(serviceRef);
+         final Service serviceInstance = this.instantiateService(serviceRef, serviceClass);
+         if (serviceRef.getHandlerChain() != null)
          {
-            SpringBusFactory busFactory = new JBossWSSpringBusFactory();
-            bus = busFactory.createBus(cxfConfig);
-            BusFactory.setThreadDefaultBus(bus);
+            serviceInstance.setHandlerResolver(new HandlerResolverImpl(bus, serviceRef.getHandlerChain(),
+                  serviceInstance.getClass()));
          }
-         else
+         // construct port
+         final boolean instantiatePort = targetClassName != null && !targetClassName.equals(serviceImplClass);
+         if (instantiatePort)
          {
-            bus = BusFactory.getThreadDefaultBus();
+            final QName portQName = this.getPortQName(targetClassName, serviceImplClass, serviceRef);
+            final WebServiceFeature[] portFeatures = this.getFeatures(targetClassName, serviceImplClass, serviceRef);
+
+            return instantiatePort(serviceClass, targetClass, serviceInstance, portQName, portFeatures);
          }
 
-         //Add extension to configure stub properties using the UnifiedServiceRefMetaData 
-         Configurer configurer = bus.getExtension(Configurer.class);
-         bus.setExtension(new ServiceRefStubPropertyConfigurer(serviceRef, configurer), Configurer.class);
-         
-         String serviceRefName = serviceRef.getServiceRefName();
-         QName serviceQName = serviceRef.getServiceQName();
+         return serviceInstance;
+      }
+      catch (Exception ex)
+      {
+         WSFException.rethrow("Cannot create service", ex);
+      }
 
-         String serviceImplClass = serviceRef.getServiceImplClass();
-         if (serviceImplClass == null)
-            serviceImplClass = (String)ref.get(ServiceReferenceable.SERVICE_IMPL_CLASS).getContent();
+      return null;
+   }
 
-         // If the target defaults to javax.xml.ws.Service, use the service as the target
-         if (Service.class.getName().equals(targetClassName))
-            targetClassName = serviceImplClass;
+   private Class<?> getClass(final String className) throws ClassNotFoundException
+   {
+      if (className != null)
+      {
+         return Thread.currentThread().getContextClassLoader().loadClass(className);
+      }
 
-         log.debug("getObjectInstance [name=" + serviceRefName + ",service=" + serviceImplClass + ",target=" + targetClassName + "]");
+      return null;
+   }
 
-         // Load the service class
-         ClassLoader ctxLoader = Thread.currentThread().getContextClassLoader();
-         Class serviceClass = ctxLoader.loadClass(serviceImplClass);
-         Class targetClass = (targetClassName != null ? ctxLoader.loadClass(targetClassName) : null);
+   private Bus getBus(final UnifiedServiceRefMetaData serviceRefMD)
+   {
+      final Bus bus;
+      // Always reset bus before constructing Service
+      BusFactory.setDefaultBus(null);
 
-         if (Service.class.isAssignableFrom(serviceClass) == false)
-            throw new IllegalArgumentException("WebServiceRef type '" + serviceClass + "' is not assignable to javax.xml.ws.Service");
+      final URL cxfConfig = this.getCXFConfiguration(serviceRefMD.getVfsRoot());
+      if (cxfConfig != null)
+      {
+         final SpringBusFactory busFactory = new JBossWSSpringBusFactory();
+         bus = busFactory.createBus(cxfConfig);
+         BusFactory.setThreadDefaultBus(bus);
+      }
+      else
+      {
+         bus = BusFactory.getThreadDefaultBus();
+      }
 
-         List<WebServiceFeature> features = new LinkedList<WebServiceFeature>();
-         
-         // configure @Addressing feature
-         if (serviceRef.isAddressingEnabled()) {
-            final boolean required = serviceRef.isAddressingRequired();
-            final String refResponses = serviceRef.getAddressingResponses();
-            AddressingFeature.Responses responses = AddressingFeature.Responses.ALL;
-            if ("ANONYMOUS".equals(refResponses))
-               responses = AddressingFeature.Responses.ANONYMOUS;
-            if ("NON_ANONYMOUS".equals(refResponses))
-               responses = AddressingFeature.Responses.NON_ANONYMOUS;
-            
-            features.add(new AddressingFeature(true, required, responses));
-         }
+      //Add extension to configure stub properties using the UnifiedServiceRefMetaData 
+      Configurer configurer = bus.getExtension(Configurer.class);
+      bus.setExtension(new ServiceRefStubPropertyConfigurer(serviceRefMD, configurer), Configurer.class);
 
-         // configure @MTOM feature
-         if (serviceRef.isMtomEnabled()) {
-            features.add(new MTOMFeature(true, serviceRef.getMtomThreshold()));
-         }
+      return bus;
+   }
 
-         // configure @RespectBinding feature
-         if (serviceRef.isRespectBindingEnabled()) {
-            features.add(new RespectBindingFeature(true));
+   private String getServiceClassName(final Reference ref, final UnifiedServiceRefMetaData serviceRefMD)
+   {
+      String serviceClassName = serviceRefMD.getServiceImplClass();
+      if (serviceClassName == null)
+         serviceClassName = (String) ref.get(ServiceReferenceable.SERVICE_IMPL_CLASS).getContent();
+
+      return serviceClassName;
+   }
+
+   private String getTargetClassName(final Reference ref, final UnifiedServiceRefMetaData serviceRefMD,
+         final String serviceImplClass)
+   {
+      String targetClassName = serviceRefMD.getServiceRefType();
+      if (targetClassName == null)
+         targetClassName = (String) ref.get(ServiceReferenceable.TARGET_CLASS_NAME).getContent();
+
+      if (Service.class.getName().equals(targetClassName))
+         targetClassName = serviceImplClass;
+
+      return targetClassName;
+   }
+
+   private Object instantiatePort(final Class<?> serviceClass, final Class<?> targetClass, final Service target,
+         final QName portQName, final WebServiceFeature[] features) throws NoSuchMethodException,
+         InstantiationException, IllegalAccessException, InvocationTargetException
+   {
+      Object retVal = null;
+
+      Object port = null;
+      if (serviceClass != Service.class)
+      {
+         for (Method method : serviceClass.getDeclaredMethods())
+         {
+            String methodName = method.getName();
+            Class<?> retType = method.getReturnType();
+            if (methodName.startsWith("get") && targetClass.isAssignableFrom(retType))
+            {
+               port = method.invoke(target, new Object[0]);
+               retVal = port;
+               break;
+            }
          }
+      }
 
-         // Receives either a javax.xml.ws.Service or a dynamic proxy
-         Object target;
-         URL wsdlURL = serviceRef.getWsdlLocation();
-         WebServiceFeature[] wsFeatures = features.size() == 0 ? null : features.toArray(new WebServiceFeature[] {});
+      if (port == null)
+      {
+         Method method = getMethodFor(portQName, features, serviceClass);
+         Object[] args = getArgumentsFor(portQName, features, targetClass);
+         port = method.invoke(target, args);
+         retVal = port;
+      }
+
+      return retVal;
+   }
+
+   private Service instantiateService(final UnifiedServiceRefMetaData serviceRefMD, final Class<?> serviceClass)
+         throws NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException
+   {
+      final WebServiceFeature[] features = getFeatures(serviceRefMD);
+      final URL wsdlURL = serviceRefMD.getWsdlLocation();
+      final QName serviceQName = serviceRefMD.getServiceQName();
+
+      Service target = null;
+      if (serviceClass == Service.class)
+      {
          // Generic javax.xml.ws.Service
-         if (serviceClass == Service.class)
+         if (wsdlURL != null)
          {
-            if (wsdlURL != null)
+            if (features != null)
             {
-               if (wsFeatures != null) {
-                  target = Service.create(wsdlURL, serviceQName, wsFeatures);
-               } else {
-                  target = Service.create(wsdlURL, serviceQName);
-               }
+               target = Service.create(wsdlURL, serviceQName, features);
             }
             else
             {
-               throw new IllegalArgumentException("Cannot create generic javax.xml.ws.Service without wsdlLocation: " + serviceRefName);
+               target = Service.create(wsdlURL, serviceQName);
             }
          }
-         // Generated javax.xml.ws.Service subclass
          else
          {
-            if (wsdlURL != null)
+            throw new IllegalArgumentException("Cannot create generic javax.xml.ws.Service without wsdlLocation: "
+                  + serviceRefMD);
+         }
+      }
+      else
+      {
+         // Generated javax.xml.ws.Service subclass
+         if (wsdlURL != null)
+         {
+            if (features != null)
             {
-               if (wsFeatures != null) {
-                  Constructor ctor = serviceClass.getConstructor(new Class[] { URL.class, QName.class, WebServiceFeature[].class });
-                  target = ctor.newInstance(new Object[] { wsdlURL, serviceQName, wsFeatures });
-               } else {
-                  Constructor ctor = serviceClass.getConstructor(new Class[] { URL.class, QName.class });
-                  target = ctor.newInstance(new Object[] { wsdlURL, serviceQName });
-               }
+               Constructor<?> ctor = serviceClass.getConstructor(new Class[]
+               {URL.class, QName.class, WebServiceFeature[].class});
+               target = (Service) ctor.newInstance(new Object[]
+               {wsdlURL, serviceQName, features});
             }
             else
             {
-               if (wsFeatures != null) {
-                  Constructor ctor = serviceClass.getConstructor(new Class[] { WebServiceFeature[].class });
-                  target = ctor.newInstance(new Object[] { wsFeatures });
-               } else {
-                  target = (Service)serviceClass.newInstance();
-               }
+               Constructor<?> ctor = serviceClass.getConstructor(new Class[]
+               {URL.class, QName.class});
+               target = (Service) ctor.newInstance(new Object[]
+               {wsdlURL, serviceQName});
             }
          }
-
-         if (targetClassName != null && targetClassName.equals(serviceImplClass) == false)
+         else
          {
-            try
+            if (features != null)
             {
-               Object port = null;
-               if (serviceClass != Service.class)
-               {
-                  for (Method method : serviceClass.getDeclaredMethods())
-                  {
-                     String methodName = method.getName();
-                     Class retType = method.getReturnType();
-                     if (methodName.startsWith("get") && targetClass.isAssignableFrom(retType))
-                     {
-                        port = method.invoke(target, new Object[0]);
-                        target = port;
-                        break;
-                     }
-                  }
-               }
-
-               if (port == null)
-               {
-                  Method method = serviceClass.getMethod("getPort", new Class[] { Class.class });
-                  port = method.invoke(target, new Object[] { targetClass });
-                  target = port;
-               }
+               Constructor<?> ctor = serviceClass.getConstructor(new Class[]
+               {WebServiceFeature[].class});
+               target = (Service) ctor.newInstance(new Object[]
+               {features});
             }
-            catch (InvocationTargetException ex)
+            else
             {
-               throw ex.getTargetException();
+               target = (Service) serviceClass.newInstance();
             }
          }
+      }
 
-         if ((serviceRef.getHandlerChain() != null) && (target instanceof Service))
+      return target;
+   }
+
+   private WebServiceFeature[] getFeatures(final String targetClassName, final String serviceClassName,
+         final UnifiedServiceRefMetaData serviceRefMD)
+   {
+      if (targetClassName != null && !targetClassName.equals(serviceClassName))
+      {
+         final Collection<UnifiedPortComponentRefMetaData> portComponentRefs = serviceRefMD.getPortComponentRefs();
+         for (final UnifiedPortComponentRefMetaData portComponentRefMD : portComponentRefs)
          {
-            ((Service)target).setHandlerResolver(new HandlerResolverImpl(bus, serviceRef.getHandlerChain(), target.getClass()));
+            if (targetClassName.equals(portComponentRefMD.getServiceEndpointInterface()))
+            {
+               return getFeatures(portComponentRefMD);
+            }
          }
-         
-         
-         return target;
       }
-      catch (Throwable ex)
+
+      return null;
+   }
+
+   private QName getPortQName(final String targetClassName, final String serviceClassName,
+         final UnifiedServiceRefMetaData serviceRefMD)
+   {
+      if (targetClassName != null && !targetClassName.equals(serviceClassName))
       {
-         WSFException.rethrow("Cannot create service", ex);
-         return null;
+         final Collection<UnifiedPortComponentRefMetaData> portComponentRefs = serviceRefMD.getPortComponentRefs();
+         for (final UnifiedPortComponentRefMetaData portComponentRefMD : portComponentRefs)
+         {
+            if (targetClassName.equals(portComponentRefMD.getServiceEndpointInterface()))
+            {
+               return portComponentRefMD.getPortQName();
+            }
+         }
       }
+
+      return null;
    }
-   
-   private UnifiedServiceRefMetaData unmarshallServiceRef(Reference ref) throws ClassNotFoundException, NamingException
+
+   private Method getMethodFor(final QName portQName, final WebServiceFeature[] features, final Class<?> serviceClass)
+         throws NoSuchMethodException
    {
-      UnifiedServiceRefMetaData sref;
-      RefAddr refAddr = ref.get(ServiceReferenceable.SERVICE_REF_META_DATA);
-      ByteArrayInputStream bais = new ByteArrayInputStream((byte[])refAddr.getContent());
+      if ((portQName == null) && (features == null))
+         return serviceClass.getMethod("getPort", new Class[]
+         {Class.class});
+      if ((portQName != null) && (features == null))
+         return serviceClass.getMethod("getPort", new Class[]
+         {QName.class, Class.class});
+      if ((portQName == null) && (features != null))
+         return serviceClass.getMethod("getPort", new Class[]
+         {Class.class, WebServiceFeature[].class});
+      if ((portQName != null) && (features != null))
+         return serviceClass.getMethod("getPort", new Class[]
+         {QName.class, Class.class, WebServiceFeature[].class});
+
+      throw new IllegalStateException();
+   }
+
+   private Object[] getArgumentsFor(final QName portQName, final WebServiceFeature[] features,
+         final Class<?> targetClass) throws NoSuchMethodException
+   {
+      if ((portQName == null) && (features == null))
+         return new Object[]
+         {targetClass};
+      if ((portQName != null) && (features == null))
+         return new Object[]
+         {portQName, targetClass};
+      if ((portQName == null) && (features != null))
+         return new Object[]
+         {targetClass, features};
+      if ((portQName != null) && (features != null))
+         return new Object[]
+         {portQName, targetClass, features};
+
+      throw new IllegalStateException();
+   }
+
+   private WebServiceFeature[] getFeatures(final UnifiedServiceRefMetaData serviceRef)
+   {
+      List<WebServiceFeature> features = new LinkedList<WebServiceFeature>();
+
+      // configure @Addressing feature
+      if (serviceRef.isAddressingEnabled())
+      {
+         final boolean required = serviceRef.isAddressingRequired();
+         final String refResponses = serviceRef.getAddressingResponses();
+         AddressingFeature.Responses responses = AddressingFeature.Responses.ALL;
+         if ("ANONYMOUS".equals(refResponses))
+            responses = AddressingFeature.Responses.ANONYMOUS;
+         if ("NON_ANONYMOUS".equals(refResponses))
+            responses = AddressingFeature.Responses.NON_ANONYMOUS;
+
+         features.add(new AddressingFeature(true, required, responses));
+      }
+
+      // configure @MTOM feature
+      if (serviceRef.isMtomEnabled())
+      {
+         features.add(new MTOMFeature(true, serviceRef.getMtomThreshold()));
+      }
+
+      // configure @RespectBinding feature
+      if (serviceRef.isRespectBindingEnabled())
+      {
+         features.add(new RespectBindingFeature(true));
+      }
+
+      WebServiceFeature[] wsFeatures = features.size() == 0 ? null : features.toArray(new WebServiceFeature[]
+      {});
+      return wsFeatures;
+   }
+
+   private WebServiceFeature[] getFeatures(final UnifiedPortComponentRefMetaData portComponentRefMD)
+   {
+      List<WebServiceFeature> features = new LinkedList<WebServiceFeature>();
+      // configure @Addressing feature
+      if (portComponentRefMD.isAddressingEnabled())
+      {
+         final boolean required = portComponentRefMD.isAddressingRequired();
+         final String refResponses = portComponentRefMD.getAddressingResponses();
+         AddressingFeature.Responses responses = AddressingFeature.Responses.ALL;
+         if ("ANONYMOUS".equals(refResponses))
+            responses = AddressingFeature.Responses.ANONYMOUS;
+         if ("NON_ANONYMOUS".equals(refResponses))
+            responses = AddressingFeature.Responses.NON_ANONYMOUS;
+
+         features.add(new AddressingFeature(true, required, responses));
+      }
+
+      // configure @MTOM feature
+      if (portComponentRefMD.isMtomEnabled())
+      {
+         features.add(new MTOMFeature(true, portComponentRefMD.getMtomThreshold()));
+      }
+
+      // configure @RespectBinding feature
+      if (portComponentRefMD.isRespectBindingEnabled())
+      {
+         features.add(new RespectBindingFeature(true));
+      }
+
+      return features.size() == 0 ? null : features.toArray(new WebServiceFeature[]
+      {});
+   }
+
+   private UnifiedServiceRefMetaData unmarshallServiceRef(final Reference ref) throws ClassNotFoundException,
+         NamingException
+   {
+      final UnifiedServiceRefMetaData sref;
+      final RefAddr refAddr = ref.get(ServiceReferenceable.SERVICE_REF_META_DATA);
+      final ByteArrayInputStream bais = new ByteArrayInputStream((byte[]) refAddr.getContent());
       try
       {
          ObjectInputStream ois = new ObjectInputStream(bais);
-         sref = (UnifiedServiceRefMetaData)ois.readObject();
+         sref = (UnifiedServiceRefMetaData) ois.readObject();
          ois.close();
       }
       catch (IOException e)
@@ -275,33 +450,30 @@
          throw new NamingException("Cannot unmarshall service ref meta data, cause: " + e.toString());
       }
 
-      /* Verify it. There is some know coinstraints
-      if(sref.getServiceQName() == null)
-         throw new IllegalArgumentException("ServiceQName may not be null. " +
-           "Specify a service QName in the <service-ref> declaration, or thorugh the @WebServiceClient annotation.");
-      */
-
       return sref;
    }
-   
-   public URL getCXFConfiguration(UnifiedVirtualFile vfsRoot)
+
+   private URL getCXFConfiguration(final UnifiedVirtualFile vfsRoot)
    {
       URL url = null;
       try
       {
          url = vfsRoot.findChild("WEB-INF/jbossws-cxf.xml").toURL();
       }
-      catch (Exception e) {}
-      
+      catch (Exception e)
+      {
+      }
+
       if (url == null)
       {
          try
          {
             url = vfsRoot.findChild("META-INF/jbossws-cxf.xml").toURL();
          }
-         catch (Exception e) {}
+         catch (Exception e)
+         {
+         }
       }
       return url;
    }
 }
-

Modified: stack/cxf/trunk/modules/client/src/main/java/org/jboss/wsf/stack/cxf/client/ServiceRefBinderJAXWS.java
===================================================================
--- stack/cxf/trunk/modules/client/src/main/java/org/jboss/wsf/stack/cxf/client/ServiceRefBinderJAXWS.java	2010-09-23 08:31:11 UTC (rev 13011)
+++ stack/cxf/trunk/modules/client/src/main/java/org/jboss/wsf/stack/cxf/client/ServiceRefBinderJAXWS.java	2010-09-23 08:35:22 UTC (rev 13012)
@@ -106,31 +106,6 @@
          }
       }
 
-      if (addressingAnnotation != null)
-      {
-         if (addressingAnnotation.enabled())
-            serviceRef.setAddressingEnabled();
-         
-         if (addressingAnnotation.required())
-            serviceRef.setAddressingRequired();
-         
-         if (addressingAnnotation.responses() == AddressingFeature.Responses.ANONYMOUS)
-            serviceRef.setAddressingResponses("ANONYMOUS");
-         else if (addressingAnnotation.responses() == AddressingFeature.Responses.NON_ANONYMOUS)
-            serviceRef.setAddressingResponses("NON_ANONYMOUS");
-         else 
-            serviceRef.setAddressingResponses("ALL");
-      }
-      
-      if ((mtomAnnotation != null) && mtomAnnotation.enabled()) {
-         serviceRef.setMtomEnabled();
-         serviceRef.setMtomThreshold(mtomAnnotation.threshold());
-      }
-
-      if ((respectBindingAnnotation != null) && respectBindingAnnotation.enabled()) {
-         serviceRef.setRespectBindingEnabled();
-      }
-
       // Use the single @WebServiceRef
       if (wsrefList.size() == 1)
       {
@@ -252,6 +227,22 @@
          }
       }
 
+      if (addressingAnnotation != null)
+      {
+         serviceRef.setAddressingEnabled(addressingAnnotation.enabled());
+         serviceRef.setAddressingRequired(addressingAnnotation.required());
+         serviceRef.setAddressingResponses(addressingAnnotation.responses().toString());
+      }
+      
+      if (mtomAnnotation != null) {
+         serviceRef.setMtomEnabled(mtomAnnotation.enabled());
+         serviceRef.setMtomThreshold(mtomAnnotation.threshold());
+      }
+
+      if (respectBindingAnnotation != null) {
+         serviceRef.setRespectBindingEnabled(respectBindingAnnotation.enabled());
+      }
+
       // Do not use rebind, the binding should be unique
       // [JBWS-1499] - Revisit WebServiceRefHandler JNDI rebind
       Referenceable serviceReferenceable = buildServiceReferenceable(serviceImplClass, targetClassName, serviceRef);

Modified: stack/cxf/trunk/modules/client/src/main/java/org/jboss/wsf/stack/cxf/client/ServiceReferenceable.java
===================================================================
--- stack/cxf/trunk/modules/client/src/main/java/org/jboss/wsf/stack/cxf/client/ServiceReferenceable.java	2010-09-23 08:31:11 UTC (rev 13011)
+++ stack/cxf/trunk/modules/client/src/main/java/org/jboss/wsf/stack/cxf/client/ServiceReferenceable.java	2010-09-23 08:35:22 UTC (rev 13012)
@@ -86,4 +86,13 @@
       }
       return baos.toByteArray();
    }
+   
+   public String toString() {
+      final StringBuilder sb = new StringBuilder();
+      sb.append("\n").append(getClass().getName());
+      sb.append("\n serviceImplClass=" + serviceImplClass);
+      sb.append("\n targetClassName=" + targetClassName);
+      sb.append("\n serviceRef=" + this.serviceRef);
+      return sb.toString();
+   }
 }



More information about the jbossws-commits mailing list