[jbossws-commits] JBossWS SVN: r13132 - in stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core: jaxws/client and 1 other directory.

jbossws-commits at lists.jboss.org jbossws-commits at lists.jboss.org
Fri Oct 15 06:10:02 EDT 2010


Author: richard.opalka at jboss.com
Date: 2010-10-15 06:10:02 -0400 (Fri, 15 Oct 2010)
New Revision: 13132

Modified:
   stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxrpc/client/NativeServiceRefBinderJAXRPC.java
   stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/client/NativeServiceRefBinderJAXWS.java
Log:
refactoring

Modified: stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxrpc/client/NativeServiceRefBinderJAXRPC.java
===================================================================
--- stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxrpc/client/NativeServiceRefBinderJAXRPC.java	2010-10-15 10:07:46 UTC (rev 13131)
+++ stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxrpc/client/NativeServiceRefBinderJAXRPC.java	2010-10-15 10:10:02 UTC (rev 13132)
@@ -21,39 +21,22 @@
  */
 package org.jboss.ws.core.jaxrpc.client;
 
-import java.lang.reflect.AnnotatedElement;
+import javax.naming.Referenceable;
 
-import javax.naming.Context;
-import javax.naming.NamingException;
-
-import org.jboss.logging.Logger;
-import org.jboss.util.naming.Util;
+import org.jboss.wsf.common.serviceref.AbstractServiceRefBinderJAXRPC;
 import org.jboss.wsf.spi.metadata.j2ee.serviceref.UnifiedServiceRefMetaData;
-import org.jboss.wsf.spi.serviceref.ServiceRefBinder;
 
 /**
- * Binds a JAXRPC Service object in the client's ENC for every service-ref element in the
- * deployment descriptor.
+ * Binds a JAXRPC Service object to the client's ENC.
  *
  * @author Thomas.Diesler at jboss.org
- * @since 04-Nov-2006
+ * @author <a href="mailto:ropalka at redhat.com">Richard Opalka</a>
  */
-public class NativeServiceRefBinderJAXRPC implements ServiceRefBinder
+public final class NativeServiceRefBinderJAXRPC extends AbstractServiceRefBinderJAXRPC
 {
-   // logging support
-   private static Logger log = Logger.getLogger(NativeServiceRefBinderJAXRPC.class);
-
-   /**
-    * Binds a Service into the callers ENC for every service-ref element
-    */
-   public void setupServiceRef(Context encCtx, String encName, AnnotatedElement ignored, UnifiedServiceRefMetaData serviceRef, ClassLoader loader)
-         throws NamingException
+   @Override
+   protected Referenceable createReferenceable(final UnifiedServiceRefMetaData serviceRefUMDM)
    {
-      String externalName = encCtx.getNameInNamespace() + "/" + encName;
-      log.info("setupServiceRef [jndi=" + externalName + "]");
-
-      // Do not use rebind, the binding should be unique
-      ServiceReferenceable ref = new ServiceReferenceable(serviceRef);
-      Util.bind(encCtx, encName, ref);
+      return new ServiceReferenceable(serviceRefUMDM);
    }
 }

Modified: stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/client/NativeServiceRefBinderJAXWS.java
===================================================================
--- stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/client/NativeServiceRefBinderJAXWS.java	2010-10-15 10:07:46 UTC (rev 13131)
+++ stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/client/NativeServiceRefBinderJAXWS.java	2010-10-15 10:10:02 UTC (rev 13132)
@@ -21,240 +21,23 @@
  */
 package org.jboss.ws.core.jaxws.client;
 
-import java.lang.annotation.Annotation;
-import java.lang.reflect.AnnotatedElement;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.jws.HandlerChain;
-import javax.naming.Context;
-import javax.naming.NamingException;
 import javax.naming.Referenceable;
-import javax.xml.namespace.QName;
-import javax.xml.ws.RespectBinding;
-import javax.xml.ws.Service;
-import javax.xml.ws.WebServiceClient;
-import javax.xml.ws.WebServiceRef;
-import javax.xml.ws.WebServiceRefs;
-import javax.xml.ws.soap.Addressing;
-import javax.xml.ws.soap.AddressingFeature;
-import javax.xml.ws.soap.MTOM;
 
-import org.jboss.logging.Logger;
-import org.jboss.util.naming.Util;
-import org.jboss.wsf.spi.WSFException;
+import org.jboss.wsf.common.serviceref.AbstractServiceRefBinderJAXWS;
 import org.jboss.wsf.spi.metadata.j2ee.serviceref.UnifiedServiceRefMetaData;
-import org.jboss.wsf.spi.serviceref.ServiceRefBinder;
 
 /**
- * Binds a JAXWS Service object in the client's ENC
+ * Binds a JAXWS Service object to the client's ENC.
  *
  * @author Thomas.Diesler at jboss.org
- * @since 17-Jan-2007
+ * @author <a href="mailto:ropalka at redhat.com">Richard Opalka</a>
  */
-public class NativeServiceRefBinderJAXWS implements ServiceRefBinder
+public final class NativeServiceRefBinderJAXWS extends AbstractServiceRefBinderJAXWS
 {
-   // logging support
-   private static Logger log = Logger.getLogger(NativeServiceRefBinderJAXWS.class);
-   
-   public void setupServiceRef(Context encCtx, String encName, AnnotatedElement ignored, UnifiedServiceRefMetaData serviceRef, ClassLoader loader) throws NamingException
+   @Override
+   protected Referenceable createReferenceable(final String serviceImplClass, final String targetClassName,
+         final UnifiedServiceRefMetaData serviceRefUMDM)
    {
-      WebServiceRef wsref = null;
-
-      if (null == loader)
-         throw new IllegalArgumentException("There needs to be a classloader available");
-
-      // Build the list of @WebServiceRef relevant annotations
-      List<WebServiceRef> wsrefList = new ArrayList<WebServiceRef>();
-      Addressing addressingAnnotation = null;
-      MTOM mtomAnnotation = null;
-      RespectBinding respectBindingAnnotation = null;
-
-      AnnotatedElement anElement = (AnnotatedElement)serviceRef.getAnnotatedElement();
-      if (anElement != null)
-      {
-         for (Annotation an : anElement.getAnnotations())
-         {
-            if (an instanceof Addressing) {
-               addressingAnnotation = (Addressing)an;
-               continue;
-            }
-            
-            if (an instanceof MTOM) {
-               mtomAnnotation = (MTOM)an;
-               continue;
-            }
-            
-            if (an instanceof RespectBinding) {
-               respectBindingAnnotation = (RespectBinding)an;
-               continue;
-            }
-            
-            if (an instanceof WebServiceRef) {
-               wsrefList.add((WebServiceRef)an);
-               continue;
-            }
-
-            if (an instanceof WebServiceRefs)
-            {
-               WebServiceRefs wsrefs = (WebServiceRefs)an;
-               for (WebServiceRef aux : wsrefs.value())
-                  wsrefList.add(aux);
-            }
-         }
-      }
-
-      // Use the single @WebServiceRef
-      if (wsrefList.size() == 1)
-      {
-         wsref = wsrefList.get(0);
-      }
-      else
-      {
-         for (WebServiceRef aux : wsrefList)
-         {
-            if (encName.endsWith("/" + aux.name()))
-            {
-               wsref = aux;
-               break;
-            }
-         }
-      }
-
-      Class targetClass = null;
-      if (anElement instanceof Field)
-      {
-         targetClass = ((Field)anElement).getType();
-      }
-      else if (anElement instanceof Method)
-      {
-         targetClass = ((Method)anElement).getParameterTypes()[0];
-      }
-      else
-      {
-         if (wsref != null && (wsref.type() != Object.class))
-            targetClass = wsref.type();
-      }
-
-      String targetClassName = (targetClass != null ? targetClass.getName() : null);
-      String externalName = encCtx.getNameInNamespace() + "/" + encName;
-      if (log.isDebugEnabled())
-         log.debug("setupServiceRef [jndi=" + externalName + ",target=" + targetClassName + "]");
-
-      String serviceImplClass = null;
-
-      // #1 Use the explicit @WebServiceRef.value
-      if (wsref != null && wsref.value() != Service.class)
-         serviceImplClass = wsref.value().getName();
-
-      // #2 Use the target ref type
-      if (serviceImplClass == null && targetClass != null && Service.class.isAssignableFrom(targetClass))
-         serviceImplClass = targetClass.getName();
-
-      // #3 Use <service-interface>
-      if (serviceImplClass == null && serviceRef.getServiceInterface() != null)
-         serviceImplClass = serviceRef.getServiceInterface();
-
-      // #4 Use javax.xml.ws.Service
-      if (serviceImplClass == null)
-         serviceImplClass = Service.class.getName();
-
-      // #1 Use the explicit @WebServiceRef.type
-      if (wsref != null && wsref.type() != Object.class)
-         targetClassName = wsref.type().getName();
-
-      // #2 Use the target ref type
-      if (targetClassName == null && targetClass != null && Service.class.isAssignableFrom(targetClass) == false)
-         targetClassName = targetClass.getName();
-
-      // Set the wsdlLocation if there is no override already
-      if (serviceRef.getWsdlOverride() == null && wsref != null && wsref.wsdlLocation().length() > 0)
-         serviceRef.setWsdlOverride(wsref.wsdlLocation());
-
-      // Set the handlerChain from @HandlerChain on the annotated element
-      String handlerChain = serviceRef.getHandlerChain();
-      if (anElement != null)
-      {
-         HandlerChain anHandlerChain = anElement.getAnnotation(HandlerChain.class);
-         if (handlerChain == null && anHandlerChain != null && anHandlerChain.file().length() > 0)
-            handlerChain = anHandlerChain.file();
-      }
-
-      // Resolve path to handler chain
-      if (handlerChain != null)
-      {
-         try
-         {
-            new URL(handlerChain);
-         }
-         catch (MalformedURLException ex)
-         {
-            Class declaringClass = null;
-            if (anElement instanceof Field)
-               declaringClass = ((Field)anElement).getDeclaringClass();
-            else if (anElement instanceof Method)
-               declaringClass = ((Method)anElement).getDeclaringClass();
-            else if (anElement instanceof Class)
-               declaringClass = (Class)anElement;
-
-            handlerChain = declaringClass.getPackage().getName().replace('.', '/') + "/" + handlerChain;
-         }
-
-         serviceRef.setHandlerChain(handlerChain);
-      }
-
-      // Extract service QName for target service
-      if (null == serviceRef.getServiceQName())
-      {
-         try
-         {
-            Class serviceClass = loader.loadClass(serviceImplClass);
-            if (serviceClass.getAnnotation(WebServiceClient.class) != null)
-            {
-               WebServiceClient clientDecl = (WebServiceClient)serviceClass.getAnnotation(WebServiceClient.class);
-               serviceRef.setServiceQName(new QName(clientDecl.targetNamespace(), clientDecl.name()));
-               //use the @WebServiceClien(wsdlLocation=...) if the service ref wsdl location returned at this time would be null
-               if (clientDecl.wsdlLocation().length() > 0 && serviceRef.getWsdlLocation() == null)
-               {
-                  serviceRef.setWsdlOverride(clientDecl.wsdlLocation());
-               }
-            }
-         }
-         catch (ClassNotFoundException e)
-         {
-            WSFException.rethrow("Cannot extract service QName for target service", e);
-         }
-      }
-
-      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);
-      Util.bind(encCtx, encName, serviceReferenceable);
-
+      return new ServiceReferenceable(serviceImplClass, targetClassName, serviceRefUMDM);
    }
-
-   protected Referenceable buildServiceReferenceable(String serviceImplClass, String targetClassName, UnifiedServiceRefMetaData serviceRef)
-   {
-      return new ServiceReferenceable(serviceImplClass, targetClassName, serviceRef);
-   }
 }



More information about the jbossws-commits mailing list