[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