[jboss-cvs] JBossAS SVN: r109082 - in projects/metadata/common/trunk: src/main/java/org/jboss/metadata/annotation/creator/ws and 2 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Nov 3 06:57:52 EDT 2010


Author: richard.opalka at jboss.com
Date: 2010-11-03 06:57:46 -0400 (Wed, 03 Nov 2010)
New Revision: 109082

Modified:
   projects/metadata/common/trunk/.classpath
   projects/metadata/common/trunk/pom.xml
   projects/metadata/common/trunk/src/main/java/org/jboss/metadata/annotation/creator/ws/AbstractWebServiceRefProcessor.java
   projects/metadata/common/trunk/src/main/java/org/jboss/metadata/javaee/spec/ServiceReferenceMetaData.java
   projects/metadata/common/trunk/src/main/java/org/jboss/metadata/serviceref/ServiceReferenceHandler.java
Log:
[JBMETA-308] ensure service ref MD are complete - do not rely on JBossWS to properly setup it

Modified: projects/metadata/common/trunk/.classpath
===================================================================
--- projects/metadata/common/trunk/.classpath	2010-11-03 09:31:25 UTC (rev 109081)
+++ projects/metadata/common/trunk/.classpath	2010-11-03 10:57:46 UTC (rev 109082)
@@ -37,7 +37,7 @@
   <classpathentry kind="var" path="M2_REPO/apache-xerces/xercesImpl/2.9.1/xercesImpl-2.9.1.jar"/>
   <classpathentry kind="var" path="M2_REPO/apache-xerces/xml-apis/2.9.1/xml-apis-2.9.1.jar"/>
   <classpathentry kind="var" path="M2_REPO/xml-apis/xml-apis/1.0.b2/xml-apis-1.0.b2.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/ws/jbossws-spi/1.4.0.CR2/jbossws-spi-1.4.0.CR2.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/jboss/ws/jbossws-spi/1.4.0.CR3/jbossws-spi-1.4.0.CR3.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/jboss/jboss-vfs/3.0.0.CR1/jboss-vfs-3.0.0.CR1.jar"/>
   <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-</classpath>
\ No newline at end of file
+</classpath>

Modified: projects/metadata/common/trunk/pom.xml
===================================================================
--- projects/metadata/common/trunk/pom.xml	2010-11-03 09:31:25 UTC (rev 109081)
+++ projects/metadata/common/trunk/pom.xml	2010-11-03 10:57:46 UTC (rev 109082)
@@ -35,6 +35,37 @@
     <testOutputDirectory>${profile.testOutputDirectory}</testOutputDirectory>
     <plugins>
       <plugin>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <configuration>
+          <showDeprecation>false</showDeprecation>
+          <compilerArguments>
+            <endorseddirs>${project.build.directory}/endorsed</endorseddirs>
+          </compilerArguments>
+        </configuration>
+      </plugin>
+      <plugin>
+        <artifactId>maven-dependency-plugin</artifactId>
+        <executions>
+          <execution>
+            <phase>generate-sources</phase>
+            <goals>
+              <goal>copy</goal>
+            </goals>
+            <configuration>
+              <artifactItems>
+                <artifactItem>
+                  <groupId>org.jboss.spec.javax.xml.ws</groupId>
+                  <artifactId>jboss-jaxws-api_2.2_spec</artifactId>
+                  <type>jar</type>
+                  <overWrite>true</overWrite>
+                  <outputDirectory>${project.build.directory}/endorsed</outputDirectory>
+                </artifactItem>
+              </artifactItems>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-surefire-plugin</artifactId>
         <version>2.4.3</version>
@@ -134,6 +165,12 @@
   <dependencies>
 
     <dependency>
+      <groupId>org.jboss.spec.javax.xml.ws</groupId>
+      <artifactId>jboss-jaxws-api_2.2_spec</artifactId>
+      <version>1.0.0.Final</version>
+    </dependency>
+
+    <dependency>
       <groupId>org.jboss.logging</groupId>
       <artifactId>jboss-logging-spi</artifactId>
       <version>2.2.0.CR1</version>
@@ -173,7 +210,7 @@
     <dependency>
       <groupId>org.jboss.ws</groupId>
       <artifactId>jbossws-spi</artifactId>
-      <version>1.4.0.CR2</version>
+      <version>1.4.0.CR3</version>
     </dependency>
 
     <dependency>

Modified: projects/metadata/common/trunk/src/main/java/org/jboss/metadata/annotation/creator/ws/AbstractWebServiceRefProcessor.java
===================================================================
--- projects/metadata/common/trunk/src/main/java/org/jboss/metadata/annotation/creator/ws/AbstractWebServiceRefProcessor.java	2010-11-03 09:31:25 UTC (rev 109081)
+++ projects/metadata/common/trunk/src/main/java/org/jboss/metadata/annotation/creator/ws/AbstractWebServiceRefProcessor.java	2010-11-03 10:57:46 UTC (rev 109082)
@@ -23,6 +23,8 @@
 
 import java.lang.annotation.Annotation;
 import java.lang.reflect.AnnotatedElement;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
 import java.util.Collection;
 import java.util.Set;
 
@@ -110,11 +112,32 @@
       if(annotation.wsdlLocation().length() > 0)
          ref.setWsdlFile(annotation.wsdlLocation());
       if(annotation.type() != Object.class)
+      {
          ref.setServiceRefType(annotation.type().getName());
+      }
       else
          ref.setServiceRefType(getType(element));
-      if(annotation.value() != Object.class && annotation.value() != Service.class)
+
+      if(annotation.value() != Service.class)
+      {
          ref.setServiceInterface(annotation.value().getName());
+      }
+      else if (element instanceof Field)
+      {
+         final Class<?> targetClass = ((Field) element).getType();
+         if (Service.class.isAssignableFrom(targetClass))
+            ref.setServiceInterface(targetClass.getName());
+      }
+      else if (element instanceof Method)
+      {
+         final Class<?> targetClass = ((Method) element).getParameterTypes()[0];
+         if (Service.class.isAssignableFrom(targetClass))
+            ref.setServiceInterface(targetClass.getName());
+      }
+      else
+      {
+         ref.setServiceInterface(Service.class.getName());
+      }
       
       String injectionName = getInjectionName(element);
       Set<ResourceInjectionTargetMetaData> injectionTargets = ProcessorUtils.getInjectionTargets(injectionName, element);

Modified: projects/metadata/common/trunk/src/main/java/org/jboss/metadata/javaee/spec/ServiceReferenceMetaData.java
===================================================================
--- projects/metadata/common/trunk/src/main/java/org/jboss/metadata/javaee/spec/ServiceReferenceMetaData.java	2010-11-03 09:31:25 UTC (rev 109081)
+++ projects/metadata/common/trunk/src/main/java/org/jboss/metadata/javaee/spec/ServiceReferenceMetaData.java	2010-11-03 10:57:46 UTC (rev 109082)
@@ -21,13 +21,26 @@
 */
 package org.jboss.metadata.javaee.spec;
 
+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.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlTransient;
 import javax.xml.bind.annotation.XmlType;
 import javax.xml.namespace.QName;
+import javax.xml.ws.RespectBinding;
+import javax.xml.ws.Service;
+import javax.xml.ws.WebServiceRef;
+import javax.xml.ws.WebServiceRefs;
+import javax.xml.ws.soap.Addressing;
+import javax.xml.ws.soap.MTOM;
 
 import org.jboss.metadata.javaee.support.MergeableMappedMetaData;
 import org.jboss.metadata.javaee.support.ResourceInjectionMetaDataWithDescriptionGroup;
@@ -76,6 +89,18 @@
    // A flag that should be set when this service-ref has been bound.
    private transient boolean processed;
    
+   // The optional <handler-chain> element. JAX-WS handler chain declared in the JBoss JavaEE5 descriptor
+   private transient String handlerChain;
+   // @Addressing annotation metadata
+   private transient boolean addressingEnabled;
+   private transient boolean addressingRequired;
+   private transient String addressingResponses = "ALL";
+   // @MTOM annotation metadata
+   private transient boolean mtomEnabled;
+   private transient int mtomThreshold;
+   // @RespectBinding annotation metadata
+   private transient boolean respectBindingEnabled;
+   
    /**
     * Create a new ServiceReferenceMetaData.
     */
@@ -141,8 +166,99 @@
          setAnnotatedElement(override.getAnnotatedElement());
       else if(original != null && original.getAnnotatedElement() != null)
          setAnnotatedElement(original.getAnnotatedElement());
+      if(override != null && override.getHandlerChain() != null)
+         setHandlerChain(override.getHandlerChain());
+      else if (original != null && original.getHandlerChain() != null)
+         setHandlerChain(original.getHandlerChain());
+      if(override != null && override.isAddressingEnabled())
+         setAddressingEnabled(override.isAddressingEnabled());
+      else if (original != null && original.isAddressingEnabled())
+         setAddressingEnabled(original.isAddressingEnabled());
+      if(override != null && override.isAddressingRequired())
+         setAddressingRequired(override.isAddressingRequired());
+      else if (original != null && original.isAddressingRequired())
+         setAddressingRequired(original.isAddressingRequired());
+      if(override != null && !"ALL".equals(override.getAddressingResponses()))
+         setAddressingResponses(override.getAddressingResponses());
+      else if (original != null && !"ALL".equals(original.isAddressingRequired()))
+         setAddressingResponses(original.getAddressingResponses());
+      if(override != null && override.isMtomEnabled())
+         setMtomEnabled(override.isMtomEnabled());
+      else if (original != null && original.isMtomEnabled())
+         setMtomEnabled(original.isMtomEnabled());
+      if(override != null && override.getMtomThreshold() > 0)
+         setMtomThreshold(override.getMtomThreshold());
+      else if (original != null && original.getMtomThreshold() > 0)
+         setMtomThreshold(original.getMtomThreshold());
+      if(override != null && override.isRespectBindingEnabled())
+         setRespectBindingEnabled(override.isRespectBindingEnabled());
+      else if (original != null && original.isRespectBindingEnabled())
+         setRespectBindingEnabled(original.isRespectBindingEnabled());
    }
 
+   public String getHandlerChain()
+   {
+      return handlerChain;
+   }
+
+   public void setHandlerChain(String handlerChain)
+   {
+      this.handlerChain = handlerChain;
+   }
+
+   public void setAddressingEnabled(final boolean addressingEnabled) {
+      this.addressingEnabled = addressingEnabled;
+   }
+   
+   public boolean isAddressingEnabled() {
+      return this.addressingEnabled;
+   }
+
+   public void setAddressingRequired(final boolean addressingRequired) {
+      this.addressingRequired = addressingRequired;
+   }
+   
+   public boolean isAddressingRequired() {
+      return this.addressingRequired;
+   }
+   
+   public void setAddressingResponses(final String responsesTypes)
+   {
+      if (!"ANONYMOUS".equals(responsesTypes) && !"NON_ANONYMOUS".equals(responsesTypes) && !"ALL".equals(responsesTypes))
+         throw new IllegalArgumentException("Only ALL, ANONYMOUS or NON_ANONYMOUS strings are allowed");
+
+      this.addressingResponses = responsesTypes;
+   }
+   
+   public String getAddressingResponses() {
+      return this.addressingResponses;
+   }
+
+   public void setMtomEnabled(final boolean mtomEnabled) {
+      this.mtomEnabled = mtomEnabled;
+   }
+   
+   public boolean isMtomEnabled() {
+      return this.mtomEnabled;
+   }
+
+   public void setMtomThreshold(final int mtomThreshold)
+   {
+      this.mtomThreshold = mtomThreshold;
+   }
+   
+   public int getMtomThreshold() {
+      return this.mtomThreshold;
+   }
+
+   public void setRespectBindingEnabled(final boolean respectBindingEnabled) {
+      this.respectBindingEnabled = respectBindingEnabled;
+   }
+   
+   public boolean isRespectBindingEnabled() {
+      return this.respectBindingEnabled;
+   }
+
    /**
     * Get the serviceRefName.
     * 
@@ -349,6 +465,11 @@
    public void setAnnotatedElement(AnnotatedElement anElement)
    {
       this.anElement = anElement;
+      this.processAddressingAnnotation();
+      this.processMTOMAnnotation();
+      this.processRespectBindingAnnotation();
+      this.processHandlerChainAnnotation();
+      this.processServiceRefType();
    }
 
    @XmlTransient
@@ -373,6 +494,196 @@
       sb.append("\n ").append("serviceQname=").append(serviceQname);
       sb.append("\n ").append("portComponentRefs=").append(portComponentRef);
       sb.append("\n ").append("handlers=").append(handlers);
+      sb.append("\n ").append("addressingEnabled=" + addressingEnabled);
+      sb.append("\n ").append("addressingRequired=" + addressingRequired);
+      sb.append("\n ").append("addressingResponses=" + addressingResponses);
+      sb.append("\n ").append("mtomEnabled=" + mtomEnabled);
+      sb.append("\n ").append("mtomThreshold=" + mtomThreshold);
+      sb.append("\n ").append("respectBindingEnabled=" + respectBindingEnabled);
+      sb.append("\n ").append("handlerChain=" + handlerChain);
       return sb.toString();
    }
+   
+   private void processAddressingAnnotation()
+   {
+      final Addressing addressingAnnotation = this.getAnnotation(Addressing.class);
+
+      if (addressingAnnotation != null)
+      {
+         this.setAddressingEnabled(addressingAnnotation.enabled());
+         this.setAddressingRequired(addressingAnnotation.required());
+         this.setAddressingResponses(addressingAnnotation.responses().toString());
+      }
+   }
+
+   private void processMTOMAnnotation()
+   {
+      final MTOM mtomAnnotation = this.getAnnotation(MTOM.class);
+
+      if (mtomAnnotation != null)
+      {
+         this.setMtomEnabled(mtomAnnotation.enabled());
+         this.setMtomThreshold(mtomAnnotation.threshold());
+      }
+   }
+
+   private void processRespectBindingAnnotation()
+   {
+      final RespectBinding respectBindingAnnotation = this.getAnnotation(RespectBinding.class);
+
+      if (respectBindingAnnotation != null)
+      {
+         this.setRespectBindingEnabled(respectBindingAnnotation.enabled());
+      }
+   }
+   
+   private void processServiceRefType()
+   {
+      if (this.anElement instanceof Field)
+      {
+         final Class<?> targetClass = ((Field) this.anElement).getType();
+         this.setServiceRefType(targetClass.getName());
+         
+         if (Service.class.isAssignableFrom(targetClass))
+            this.setServiceInterface(targetClass.getName());
+      }
+      else if (this.anElement instanceof Method)
+      {
+         final Class<?> targetClass = ((Method) this.anElement).getParameterTypes()[0];
+         this.setServiceRefType(targetClass.getName());
+
+         if (Service.class.isAssignableFrom(targetClass))
+            this.setServiceInterface(targetClass.getName());
+      }
+      else
+      {
+         final WebServiceRef serviceRefAnnotation = this.getWebServiceRefAnnotation();
+         Class<?> targetClass = null;
+         if (serviceRefAnnotation != null && (serviceRefAnnotation.type() != Object.class))
+         {
+            targetClass = serviceRefAnnotation.type();
+            this.setServiceRefType(targetClass.getName());
+
+            if (Service.class.isAssignableFrom(targetClass))
+               this.setServiceInterface(targetClass.getName());
+         }
+      }
+   }
+
+   private void processHandlerChainAnnotation()
+   {
+      final HandlerChain handlerChainAnnotation = this.getAnnotation(HandlerChain.class);
+
+      if (handlerChainAnnotation != null)
+      {
+         // Set the handlerChain from @HandlerChain on the annotated element
+         String handlerChain = null;
+         if (handlerChainAnnotation.file().length() > 0)
+            handlerChain = handlerChainAnnotation.file();
+
+         // Resolve path to handler chain
+         if (handlerChain != null)
+         {
+            try
+            {
+               new URL(handlerChain);
+            }
+            catch (MalformedURLException ignored)
+            {
+               final Class<?> declaringClass = getDeclaringClass(this.anElement);
+
+               handlerChain = declaringClass.getPackage().getName().replace('.', '/') + "/" + handlerChain;
+            }
+
+            this.setHandlerChain(handlerChain);
+         }
+      }
+   }
+
+   private Class<?> getDeclaringClass(final AnnotatedElement annotatedElement)
+   {
+      Class<?> declaringClass = null;
+      if (annotatedElement instanceof Field)
+         declaringClass = ((Field) annotatedElement).getDeclaringClass();
+      else if (annotatedElement instanceof Method)
+         declaringClass = ((Method) annotatedElement).getDeclaringClass();
+      else if (annotatedElement instanceof Class)
+         declaringClass = (Class<?>) annotatedElement;
+
+      return declaringClass;
+   }
+
+   private <T extends Annotation> T getAnnotation(Class<T> annotationClass)
+   {
+      return this.anElement != null ? (T) this.anElement.getAnnotation(annotationClass) : null;
+   }
+
+   private WebServiceRef getWebServiceRefAnnotation()
+   {
+      final WebServiceRef webServiceRefAnnotation = this.getAnnotation(WebServiceRef.class);
+      final WebServiceRefs webServiceRefsAnnotation = this.getAnnotation(WebServiceRefs.class);
+
+      if (webServiceRefAnnotation == null && webServiceRefsAnnotation == null)
+      {
+         return null;
+      }
+
+      // Build the list of @WebServiceRef relevant annotations
+      final List<WebServiceRef> wsrefList = new ArrayList<WebServiceRef>();
+
+      if (webServiceRefAnnotation != null)
+      {
+         wsrefList.add(webServiceRefAnnotation);
+      }
+
+      if (webServiceRefsAnnotation != null)
+      {
+         for (final WebServiceRef webServiceRefAnn : webServiceRefsAnnotation.value())
+         {
+            wsrefList.add(webServiceRefAnn);
+         }
+      }
+
+      // Return effective @WebServiceRef annotation
+      WebServiceRef returnValue = null;
+      if (wsrefList.size() == 1)
+      {
+         returnValue = wsrefList.get(0);
+      }
+      else
+      {
+         for (WebServiceRef webServiceRefAnn : wsrefList)
+         {
+            if (this.getServiceRefName().endsWith(webServiceRefAnn.name()))
+            {
+               returnValue = webServiceRefAnn;
+               break;
+            }
+         }
+      }
+
+      return returnValue;
+   }
+
+   private Class<?> getTargetClass()
+   {
+      Class<?> targetClass = null;
+
+      if (this.anElement instanceof Field)
+      {
+         targetClass = ((Field) this.anElement).getType();
+      }
+      else if (this.anElement instanceof Method)
+      {
+         targetClass = ((Method) this.anElement).getParameterTypes()[0];
+      }
+      else
+      {
+         final WebServiceRef serviceRefAnnotation = this.getWebServiceRefAnnotation();
+         if (serviceRefAnnotation != null && (serviceRefAnnotation.type() != Object.class))
+            targetClass = serviceRefAnnotation.type();
+      }
+
+      return targetClass;
+   }
 }

Modified: projects/metadata/common/trunk/src/main/java/org/jboss/metadata/serviceref/ServiceReferenceHandler.java
===================================================================
--- projects/metadata/common/trunk/src/main/java/org/jboss/metadata/serviceref/ServiceReferenceHandler.java	2010-11-03 09:31:25 UTC (rev 109081)
+++ projects/metadata/common/trunk/src/main/java/org/jboss/metadata/serviceref/ServiceReferenceHandler.java	2010-11-03 10:57:46 UTC (rev 109082)
@@ -21,8 +21,6 @@
  */
 package org.jboss.metadata.serviceref;
 
-// $Id: ServiceRefDelegate.java 65538 2007-09-21 17:29:33Z scott.stark at jboss.org $
-
 import java.util.Iterator;
 import java.util.List;
 
@@ -65,7 +63,6 @@
  * 
  * @author Thomas.Diesler at jboss.org
  * @author <a href="mailto:ropalka at redhat.com">Richard Opalka</a>
- * @since 25-Oct-2007
  */
 public final class ServiceReferenceHandler
 {
@@ -87,7 +84,7 @@
       if (!sref.isProcessed())
       {
          final UnifiedServiceRefMetaData spiRef = getUnifiedServiceRefMetaData(vfsRoot, sref);
-         final Referenceable jndiReferenceable = delegate.createReferenceable(spiRef, loader);
+         final Referenceable jndiReferenceable = delegate.createReferenceable(spiRef);
          final String jndiFullName = encCtx.getNameInNamespace() + "/" + encName;
          log.info("Binding service reference to [jndi=" + jndiFullName + "]");
          Util.bind(encCtx, encName, jndiReferenceable);
@@ -95,30 +92,22 @@
       }
    }
 
-   public Referenceable createReferenceable(final UnifiedVirtualFile vfsRoot, final ClassLoader loader, final ServiceReferenceMetaData sref)
-   {
-      Referenceable referenceable = null;
-      
-      if (!sref.isProcessed())
-      {
-         final UnifiedServiceRefMetaData spiRef = getUnifiedServiceRefMetaData(vfsRoot, sref);
-         referenceable = delegate.createReferenceable(spiRef, loader);
-         sref.setProcessed(true);
-      }
-      
-      return referenceable;
-   }
-
    private UnifiedServiceRefMetaData getUnifiedServiceRefMetaData(UnifiedVirtualFile vfsRoot, ServiceReferenceMetaData sref)
    {
       UnifiedServiceRefMetaData result = new UnifiedServiceRefMetaData(vfsRoot);
       result.setServiceRefName(sref.getServiceRefName());
-      result.setServiceInterface(sref.getServiceInterface());
       result.setServiceRefType(sref.getServiceRefType());
+      result.setServiceInterface(sref.getServiceInterface());
       result.setWsdlFile(sref.getWsdlFile());
       result.setMappingFile(sref.getJaxrpcMappingFile());
       result.setServiceQName(sref.getServiceQname());
-      result.setAnnotatedElement(sref.getAnnotatedElement());
+      result.setAddressingEnabled(sref.isAddressingEnabled());
+      result.setAddressingRequired(sref.isAddressingRequired());
+      result.setAddressingResponses(sref.getAddressingResponses());
+      result.setMtomEnabled(sref.isMtomEnabled());
+      result.setMtomThreshold(sref.getMtomThreshold());
+      result.setRespectBindingEnabled(sref.isRespectBindingEnabled());
+      result.setHandlerChain(sref.getHandlerChain());
 
       List<? extends PortComponentRef> pcRefs = sref.getPortComponentRef();
       if (pcRefs != null)
@@ -172,12 +161,16 @@
       if (sref instanceof JBossServiceReferenceMetaData)
       {
          JBossServiceReferenceMetaData jbRef = (JBossServiceReferenceMetaData)sref;
-         result.setServiceImplClass(jbRef.getServiceClass());
+         if (jbRef.getServiceClass() != null)
+         {
+            result.setServiceImplClass(jbRef.getServiceClass());
+         }
          result.setConfigName(jbRef.getConfigName());
          result.setConfigFile(jbRef.getConfigFile());
          result.setWsdlOverride(jbRef.getWsdlOverride());
          result.setHandlerChain(jbRef.getHandlerChain());
       }
+      
       return result;
    }
 



More information about the jboss-cvs-commits mailing list