[jboss-cvs] JBossAS SVN: r69023 - in branches/Branch_4_2/ejb3/src/main/org/jboss: injection and 1 other directory.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Jan 16 05:49:40 EST 2008


Author: heiko.braun at jboss.com
Date: 2008-01-16 05:49:40 -0500 (Wed, 16 Jan 2008)
New Revision: 69023

Added:
   branches/Branch_4_2/ejb3/src/main/org/jboss/ejb3/metamodel/Webservices.java
Modified:
   branches/Branch_4_2/ejb3/src/main/org/jboss/ejb3/metamodel/EjbJarDD.java
   branches/Branch_4_2/ejb3/src/main/org/jboss/ejb3/metamodel/EnterpriseBean.java
   branches/Branch_4_2/ejb3/src/main/org/jboss/ejb3/metamodel/EnterpriseBeans.java
   branches/Branch_4_2/ejb3/src/main/org/jboss/ejb3/metamodel/JBossDDObjectFactory.java
   branches/Branch_4_2/ejb3/src/main/org/jboss/injection/WebServiceRefHandler.java
Log:
Fix JBAS-5139: Support injection-target properties within service-ref declarations

Modified: branches/Branch_4_2/ejb3/src/main/org/jboss/ejb3/metamodel/EjbJarDD.java
===================================================================
--- branches/Branch_4_2/ejb3/src/main/org/jboss/ejb3/metamodel/EjbJarDD.java	2008-01-16 10:45:20 UTC (rev 69022)
+++ branches/Branch_4_2/ejb3/src/main/org/jboss/ejb3/metamodel/EjbJarDD.java	2008-01-16 10:49:40 UTC (rev 69023)
@@ -52,6 +52,8 @@
    private String unauthenticatedPrincipal;
    private String jmxName;
 
+   private Webservices webservices;
+
    private HashMap<String, ResourceManager> resourceManagers = new HashMap();
 
    // both
@@ -161,6 +163,16 @@
       this.assemblyDescriptor = assemblyDescriptor;
    }
 
+   public Webservices getWebservices()
+   {
+      return webservices;
+   }
+
+   public void setWebservices(Webservices webservices)
+   {
+      this.webservices = webservices;
+   }
+
    public String toString()
    {
       StringBuffer sb = new StringBuffer(100);

Modified: branches/Branch_4_2/ejb3/src/main/org/jboss/ejb3/metamodel/EnterpriseBean.java
===================================================================
--- branches/Branch_4_2/ejb3/src/main/org/jboss/ejb3/metamodel/EnterpriseBean.java	2008-01-16 10:45:20 UTC (rev 69022)
+++ branches/Branch_4_2/ejb3/src/main/org/jboss/ejb3/metamodel/EnterpriseBean.java	2008-01-16 10:49:40 UTC (rev 69023)
@@ -33,7 +33,8 @@
 import org.jboss.metamodel.descriptor.InjectionTarget;
 import org.jboss.metamodel.descriptor.MessageDestinationRef; 
 import org.jboss.metamodel.descriptor.ResourceEnvRef;
-import org.jboss.metamodel.descriptor.ResourceRef; 
+import org.jboss.metamodel.descriptor.ResourceRef;
+import org.jboss.wsf.spi.serviceref.ServiceRefMetaData;
 
 /**
  * Represents an EJB element of the ejb-jar.xml deployment descriptor for the
@@ -154,6 +155,13 @@
          tmpRef.merge(ref);
    }
 
+   public void mergeServiceRef(ServiceRefMetaData ref)
+   {
+      ServiceRefMetaData tmpRef = (ServiceRefMetaData)serviceRefs.get(ref.getServiceRefName());
+      if (tmpRef != null)
+         tmpRef.merge(ref);
+   }
+
    public void mergeResourceRef(ResourceRef ref)
    {
       ResourceRef tmpRef = (ResourceRef)resourceRefs.get(ref.getResRefName());

Modified: branches/Branch_4_2/ejb3/src/main/org/jboss/ejb3/metamodel/EnterpriseBeans.java
===================================================================
--- branches/Branch_4_2/ejb3/src/main/org/jboss/ejb3/metamodel/EnterpriseBeans.java	2008-01-16 10:45:20 UTC (rev 69022)
+++ branches/Branch_4_2/ejb3/src/main/org/jboss/ejb3/metamodel/EnterpriseBeans.java	2008-01-16 10:49:40 UTC (rev 69023)
@@ -116,7 +116,7 @@
    
    public void addServiceRef(ServiceRefMetaData ref)
    {
-      currentEjb.addServiceRef(ref);
+      currentEjb.mergeServiceRef(ref);
    }
    
    public void setMethodAttributes(MethodAttributes attributes)

Modified: branches/Branch_4_2/ejb3/src/main/org/jboss/ejb3/metamodel/JBossDDObjectFactory.java
===================================================================
--- branches/Branch_4_2/ejb3/src/main/org/jboss/ejb3/metamodel/JBossDDObjectFactory.java	2008-01-16 10:45:20 UTC (rev 69022)
+++ branches/Branch_4_2/ejb3/src/main/org/jboss/ejb3/metamodel/JBossDDObjectFactory.java	2008-01-16 10:49:40 UTC (rev 69023)
@@ -52,7 +52,7 @@
  * @author Anil.Saldhana at jboss.com
  * @version <tt>$Revision$</tt>
  */ 
-public class JBossDDObjectFactory extends DDObjectFactory
+   public class JBossDDObjectFactory extends DDObjectFactory
 {
    private static final Logger log = Logger.getLogger(JBossDDObjectFactory.class);
 
@@ -135,7 +135,13 @@
       {
          child = new ResourceManager();
       }
+      else if (localName.equals("webservices"))
+      {
+         dd.setWebservices(new Webservices());
+         child = dd.getWebservices();
+      }
 
+
       return child;
    }
 
@@ -843,6 +849,30 @@
       }
    }
 
+   public void setValue(Webservices webservices, UnmarshallingContext navigator, String namespaceURI, String localName, String value)
+   {
+      if (localName.equals("context-root"))
+      {
+         webservices.setContextRoot(value);
+      }
+      else if (localName.equals("webservice-description-name"))
+      {
+         webservices.setDescriptionName(value);
+      }
+      else if (localName.equals("config-name"))
+      {
+         webservices.setConfigName(value);
+      }
+      else if (localName.equals("config-file"))
+      {
+         webservices.setConfigFile(value);
+      }
+      else if(localName.equals("wsdl-publish-location"))
+      {
+         webservices.setWsdlPublishLocation(value);
+      }
+
+   }
    /**
     * Called when a child element with simple content is read for DD.
     */

Added: branches/Branch_4_2/ejb3/src/main/org/jboss/ejb3/metamodel/Webservices.java
===================================================================
--- branches/Branch_4_2/ejb3/src/main/org/jboss/ejb3/metamodel/Webservices.java	                        (rev 0)
+++ branches/Branch_4_2/ejb3/src/main/org/jboss/ejb3/metamodel/Webservices.java	2008-01-16 10:49:40 UTC (rev 69023)
@@ -0,0 +1,65 @@
+package org.jboss.ejb3.metamodel;
+
+/**
+ * Represents the webservices element of jboss.xml
+ * @author Heiko.Braun at jboss.com
+ */
+public class Webservices
+{
+   private String contextRoot;
+   private String descriptionName;
+   private String configName;
+   private String configFile;
+   private String wsdlPublishLocation;
+
+   public String getContextRoot()
+   {
+      return contextRoot;
+   }
+
+   public void setContextRoot(String contextRoot)
+   {
+      this.contextRoot = contextRoot;
+   }
+
+
+   public String getDescriptionName()
+   {
+      return descriptionName;
+   }
+
+   public void setDescriptionName(String descriptionName)
+   {
+      this.descriptionName = descriptionName;
+   }
+
+   public String getConfigName()
+   {
+      return configName;
+   }
+
+   public void setConfigName(String configName)
+   {
+      this.configName = configName;
+   }
+
+   public String getConfigFile()
+   {
+      return configFile;
+   }
+
+   public void setConfigFile(String configFile)
+   {
+      this.configFile = configFile;
+   }
+
+   public String getWsdlPublishLocation()
+   {
+      return wsdlPublishLocation;
+   }
+
+   public void setWsdlPublishLocation(String wsdlPublishLocation)
+   {
+      this.wsdlPublishLocation = wsdlPublishLocation;
+   }
+}


Property changes on: branches/Branch_4_2/ejb3/src/main/org/jboss/ejb3/metamodel/Webservices.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Modified: branches/Branch_4_2/ejb3/src/main/org/jboss/injection/WebServiceRefHandler.java
===================================================================
--- branches/Branch_4_2/ejb3/src/main/org/jboss/injection/WebServiceRefHandler.java	2008-01-16 10:45:20 UTC (rev 69022)
+++ branches/Branch_4_2/ejb3/src/main/org/jboss/injection/WebServiceRefHandler.java	2008-01-16 10:49:40 UTC (rev 69023)
@@ -23,21 +23,21 @@
 
 // $Id$
 
+import org.jboss.logging.Logger;
+import org.jboss.metadata.serviceref.ServiceRefDelegate;
+import org.jboss.metamodel.descriptor.EnvironmentRefGroup;
+import org.jboss.wsf.spi.serviceref.ServiceRefMetaData;
+
+import javax.naming.Context;
+import javax.xml.ws.WebServiceRef;
+import javax.xml.ws.WebServiceRefs;
 import java.lang.reflect.AccessibleObject;
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Iterator;
 
-import javax.naming.Context;
-import javax.xml.ws.WebServiceRef;
-import javax.xml.ws.WebServiceRefs;
-
-import org.jboss.logging.Logger;
-import org.jboss.metadata.serviceref.ServiceRefDelegate;
-import org.jboss.metamodel.descriptor.EnvironmentRefGroup;
-import org.jboss.wsf.spi.serviceref.ServiceRefMetaData;
-
 /**
  * Handle @WebServiceRef annotations
  * 
@@ -95,43 +95,121 @@
    }
 
    public void handleMethodAnnotations(Method method, InjectionContainer container, Map<AccessibleObject, Injector> injectors)
-   {
-      WebServiceRef wsref = method.getAnnotation(WebServiceRef.class);
-      if (wsref == null) return;
+   {      
+      String serviceRefName = null;
 
+      // injector first
+      ServiceRefMetaData tmp = getServiceRefForInjectionTarget(method);
+      if(tmp!=null)
+      {
+         serviceRefName = tmp.getServiceRefName();
+      }
+      else
+      {
+         // annotation second
+         WebServiceRef wsref = method.getAnnotation(WebServiceRef.class);
+         if(wsref!=null)
+         {
+            serviceRefName = wsref.name();
+
+            if (serviceRefName.equals(""))
+               serviceRefName = InjectionUtil.getEncName(method).substring(4);
+         }         
+      }
+
+      if(null==serviceRefName)
+         return;
+
       if (!method.getName().startsWith("set"))
+      {
          throw new RuntimeException("@WebServiceRef can only be used with a set method: " + method);
+      }
 
-      String name = wsref.name();
-      if (name.equals(""))
-         name = InjectionUtil.getEncName(method).substring(4);
-      
-      String encName = "env/" + name;
+      String encName = "env/" + serviceRefName;
       Context encCtx = container.getEnc();
-      if (!container.getEncInjectors().containsKey(name))
+      if (!container.getEncInjectors().containsKey(serviceRefName))
       {
-         ServiceRefMetaData sref = getServiceRefForName(name);
-         container.getEncInjectors().put(name, new WebServiceRefInjector(encName, method, sref));
+         ServiceRefMetaData sref = getServiceRefForName(serviceRefName);
+         container.getEncInjectors().put(serviceRefName, new WebServiceRefInjector(encName, method, sref));
       }
 
       injectors.put(method, new JndiMethodInjector(method, encName, encCtx));
    }
 
+   private ServiceRefMetaData getServiceRefForInjectionTarget(Method method)
+   {
+      ServiceRefMetaData match = null;
+      Iterator<String> iterator = srefMap.keySet().iterator();
+      while(iterator.hasNext())
+      {
+         ServiceRefMetaData sref = srefMap.get(iterator.next());
+         for(String[] injectionTuple : sref.getInjectionTargets())
+         {
+            if(method.getDeclaringClass().getName().equals(injectionTuple[0])
+              && method.getName().equals(injectionTuple[1]))
+            {
+               match = sref;
+               break;
+            }
+         }
+      }
+
+      return match;
+   }
+
+   private ServiceRefMetaData getServiceRefForInjectionTarget(Field field)
+   {
+      ServiceRefMetaData match = null;
+      Iterator<String> iterator = srefMap.keySet().iterator();
+      while(iterator.hasNext())
+      {
+         ServiceRefMetaData sref = srefMap.get(iterator.next());
+         for(String[] injectionTuple : sref.getInjectionTargets())
+         {
+            if(field.getDeclaringClass().getName().equals(injectionTuple[0])
+              && field.getName().equals(injectionTuple[1]))
+            {
+               match = sref;
+               break;
+            }
+         }
+      }
+
+      return match;
+   }
+
    public void handleFieldAnnotations(Field field, InjectionContainer container, Map<AccessibleObject, Injector> injectors)
    {
-      WebServiceRef wsref = field.getAnnotation(WebServiceRef.class);
-      if (wsref == null) return;
+      String serviceRefName = null;
 
-      String name = wsref.name();
-      if (name.equals(""))
-         name = InjectionUtil.getEncName(field).substring(4);
+      // injector first
+      ServiceRefMetaData tmp = getServiceRefForInjectionTarget(field);
+      if(tmp!=null)
+      {
+         serviceRefName = tmp.getServiceRefName();
+      }
+      else
+      {
+         // annotation second
+         WebServiceRef wsref = field.getAnnotation(WebServiceRef.class);
+         if(wsref!=null)
+         {
+            serviceRefName = wsref.name();
 
-      String encName = "env/" + name;
+            if (serviceRefName.equals(""))
+               serviceRefName = InjectionUtil.getEncName(field).substring(4);
+         }
+      }
+
+      if(null==serviceRefName)
+         return;
+
+      String encName = "env/" + serviceRefName;
       Context encCtx = container.getEnc();
-      if (!container.getEncInjectors().containsKey(name))
+      if (!container.getEncInjectors().containsKey(serviceRefName))
       {
-         ServiceRefMetaData sref = getServiceRefForName(name);
-         container.getEncInjectors().put(name, new WebServiceRefInjector(encName, field, sref));
+         ServiceRefMetaData sref = getServiceRefForName(serviceRefName);
+         container.getEncInjectors().put(serviceRefName, new WebServiceRefInjector(encName, field, sref));
       }
 
       injectors.put(field, new JndiFieldInjector(field, encName, encCtx));




More information about the jboss-cvs-commits mailing list