[jboss-cvs] JBossAS SVN: r74794 - in projects/metadata/trunk/src: main/java/org/jboss/metadata/annotation/creator/jboss and 5 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Jun 18 08:18:22 EDT 2008


Author: emuckenhuber
Date: 2008-06-18 08:18:22 -0400 (Wed, 18 Jun 2008)
New Revision: 74794

Added:
   projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ws/
   projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ws/AbstractWebServiceRefProcessor.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ws/ServiceReferenceHandlerChainsWrapper.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ws/WebServiceHandlerChainProcessor.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ws/WebServiceRefClassProcessor.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ws/WebServiceRefFieldProcessor.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ws/WebServiceRefMethodProcessor.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ws/WebServiceRefsClassProcessor.java
   projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/client/HandlerChainsTestCase.java
   projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/client/handlerchains/
   projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/client/handlerchains/AnnotatedClient.java
   projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/client/handlerchains/AnnotatedClientExternal.java
   projects/metadata/trunk/src/test/resources/org/jboss/test/metadata/annotation/client/handlerchains/
   projects/metadata/trunk/src/test/resources/org/jboss/test/metadata/annotation/client/handlerchains/handler-chains.xml
Removed:
   projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/AbstractWebServiceRefProcessor.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/WebServiceRefClassProcessor.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/WebServiceRefFieldProcessor.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/WebServiceRefMethodProcessor.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/WebServiceRefsClassProcessor.java
Modified:
   projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/AbstractComponentProcessor.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/jboss/AbstractComponentProcessor.java
Log:
[JBMETA-44] process HandlerChain for WebServiceRefs

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/AbstractComponentProcessor.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/AbstractComponentProcessor.java	2008-06-18 12:16:51 UTC (rev 74793)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/AbstractComponentProcessor.java	2008-06-18 12:18:22 UTC (rev 74794)
@@ -35,6 +35,10 @@
 import java.util.Set;
 
 import org.jboss.logging.Logger;
+import org.jboss.metadata.annotation.creator.ws.WebServiceRefClassProcessor;
+import org.jboss.metadata.annotation.creator.ws.WebServiceRefFieldProcessor;
+import org.jboss.metadata.annotation.creator.ws.WebServiceRefMethodProcessor;
+import org.jboss.metadata.annotation.creator.ws.WebServiceRefsClassProcessor;
 import org.jboss.metadata.annotation.finder.AnnotationFinder;
 import org.jboss.metadata.javaee.spec.AnnotatedEJBReferencesMetaData;
 import org.jboss.metadata.javaee.spec.EnvironmentRefsGroupMetaData;
@@ -92,7 +96,7 @@
       // @PostConstruct/@PreDestroy
       addMethodProcessor(new PostConstructMethodProcessor(finder));
       addMethodProcessor(new PreDestroyMethodProcessor(finder));
-      // @WebServiceRef
+      // @WebServiceRef (includes @HandlerChain)
       addMethodProcessor(new WebServiceRefMethodProcessor(finder));
       addFieldProcessor(new WebServiceRefFieldProcessor(finder));  
       addTypeProcessor(new WebServiceRefClassProcessor(finder));

Deleted: projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/AbstractWebServiceRefProcessor.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/AbstractWebServiceRefProcessor.java	2008-06-18 12:16:51 UTC (rev 74793)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/AbstractWebServiceRefProcessor.java	2008-06-18 12:18:22 UTC (rev 74794)
@@ -1,118 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2008, Red Hat Middleware LLC, and individual contributors as indicated
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jboss.metadata.annotation.creator;
-
-import java.lang.reflect.AnnotatedElement;
-import java.util.Set;
-
-import javax.xml.ws.WebServiceRef;
-
-import org.jboss.logging.Logger;
-import org.jboss.metadata.annotation.finder.AnnotationFinder;
-import org.jboss.metadata.javaee.spec.RemoteEnvironmentRefsGroupMetaData;
-import org.jboss.metadata.javaee.spec.ResourceInjectionTargetMetaData;
-import org.jboss.metadata.javaee.spec.ServiceReferenceMetaData;
-import org.jboss.metadata.javaee.spec.ServiceReferencesMetaData;
-
-/**
- * Base processor for @WebServiceRef annotations. 
- * @author Scott.Stark at jboss.org
- * @version $Revision: 67548 $
- */
-public abstract class AbstractWebServiceRefProcessor<E extends AnnotatedElement>
-   extends AbstractFinderUser
-{
-   private static Logger log = Logger.getLogger(AbstractWebServiceRefProcessor.class);
-
-
-   protected AbstractWebServiceRefProcessor(AnnotationFinder<AnnotatedElement> finder)
-   {
-      super(finder);
-   }
-   
-   public void process(RemoteEnvironmentRefsGroupMetaData refs, E element)
-   {
-      WebServiceRef annotation = finder.getAnnotation(element, WebServiceRef.class);
-      if(annotation == null)
-         return;
-      process(refs, element, annotation);
-   }
-   protected void process(RemoteEnvironmentRefsGroupMetaData refs, E element, WebServiceRef annotation)
-   {
-      boolean trace = log.isTraceEnabled();
-      String type = annotation.type().getName();
-      if(type.equals("java.lang.Object"))
-         type = getType(element);
-      if(trace)
-         log.trace("process: "+annotation+", type="+type);
-      ServiceReferencesMetaData srefs = refs.getServiceReferences();
-      if(srefs == null)
-      {
-         srefs = new ServiceReferencesMetaData();
-         refs.setServiceReferences(srefs);
-      }
-      ServiceReferenceMetaData ref = createServiceRef(annotation, element);
-      srefs.add(ref);
-      if(trace)
-         log.trace("created service-ref: "+ref);
-   }
-
-   /**
-    * Get the resource name based on the AnnotatedElement
-    * @param element
-    * @return
-    */
-   protected abstract String getName(E element);
-   protected abstract String getInjectionName(E element);
-   protected abstract String getType(E element);
-   protected abstract String getDeclaringClass(E element);
-
-   protected ServiceReferenceMetaData createServiceRef(WebServiceRef annotation, E element)
-   {
-      ServiceReferenceMetaData ref = new ServiceReferenceMetaData();
-      String name = annotation.name();
-      if(name.length() == 0)
-         name = getName(element);
-      ref.setServiceRefName(name);
-      if(annotation.mappedName().length() > 0)
-         ref.setMappedName(annotation.mappedName());
-      ref.setAnnotatedElement(element);
-      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)
-         ref.setServiceInterface(annotation.value().getName());
-      else
-         ref.setServiceInterface(ref.getServiceRefType());
-      
-      String injectionName = getInjectionName(element);
-      Set<ResourceInjectionTargetMetaData> injectionTargets = ProcessorUtils.getInjectionTargets(injectionName, element);
-      if(injectionTargets != null)
-         ref.setInjectionTargets(injectionTargets);
-
-      return ref;
-   }
-
-}

Deleted: projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/WebServiceRefClassProcessor.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/WebServiceRefClassProcessor.java	2008-06-18 12:16:51 UTC (rev 74793)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/WebServiceRefClassProcessor.java	2008-06-18 12:18:22 UTC (rev 74794)
@@ -1,68 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * Copyright 2008, Red Hat Middleware LLC, and individual contributors
- * as indicated by the @author tags. See the copyright.txt file in the
- * distribution for a full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jboss.metadata.annotation.creator;
-
-import java.lang.reflect.AnnotatedElement;
-
-import org.jboss.metadata.annotation.finder.AnnotationFinder;
-import org.jboss.metadata.javaee.spec.RemoteEnvironmentRefsGroupMetaData;
-
-/**
- * @author <a href="mailto:emuckenh at redhat.com">Emanuel Muckenhuber</a>
- * @version $Revision$
- */
-public class WebServiceRefClassProcessor
-   extends AbstractWebServiceRefProcessor<Class<?>>
-   implements Processor<RemoteEnvironmentRefsGroupMetaData, Class<?>>
-{
-
-   public WebServiceRefClassProcessor(AnnotationFinder<AnnotatedElement> finder)
-   {
-      super(finder);
-   }
-
-   @Override
-   protected String getName(Class<?> element)
-   {
-      String name = element.getSimpleName();
-      return name;
-   }
-
-   @Override
-   protected String getInjectionName(Class<?> element)
-   {
-      return null;
-   }
-
-   @Override
-   protected String getType(Class<?> element)
-   {
-      return element.getName();
-   }
-
-   @Override
-   protected String getDeclaringClass(Class<?> element)
-   {
-      return element.getName();
-   }
-
-}

Deleted: projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/WebServiceRefFieldProcessor.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/WebServiceRefFieldProcessor.java	2008-06-18 12:16:51 UTC (rev 74793)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/WebServiceRefFieldProcessor.java	2008-06-18 12:18:22 UTC (rev 74794)
@@ -1,69 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2007, Red Hat Middleware LLC, and individual contributors
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jboss.metadata.annotation.creator;
-
-import java.lang.reflect.AnnotatedElement;
-import java.lang.reflect.Field;
-
-import org.jboss.metadata.annotation.finder.AnnotationFinder;
-import org.jboss.metadata.javaee.spec.RemoteEnvironmentRefsGroupMetaData;
-
-/**
- * @author Scott.Stark at jboss.org
- * @version $Revision: 72354 $
- */
-public class WebServiceRefFieldProcessor
-   extends AbstractWebServiceRefProcessor<Field>
-   implements Processor<RemoteEnvironmentRefsGroupMetaData, Field>
-{
-
-   /**
-    * @param finder
-    */
-   public WebServiceRefFieldProcessor(AnnotationFinder<AnnotatedElement> finder)
-   {
-      super(finder);
-   }
-
-   @Override
-   protected String getName(Field element)
-   {
-      String name = element.getName();
-      return name;
-   }
-   @Override
-   protected String getInjectionName(Field element)
-   {
-      return element.getName();
-   }
-   @Override
-   protected String getType(Field element)
-   {
-      return element.getType().getName();
-   }
-   @Override
-   protected String getDeclaringClass(Field element)
-   {
-      return element.getDeclaringClass().getName();
-   }
-
-}

Deleted: projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/WebServiceRefMethodProcessor.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/WebServiceRefMethodProcessor.java	2008-06-18 12:16:51 UTC (rev 74793)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/WebServiceRefMethodProcessor.java	2008-06-18 12:18:22 UTC (rev 74794)
@@ -1,79 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * Copyright 2008, Red Hat Middleware LLC, and individual contributors
- * as indicated by the @author tags. See the copyright.txt file in the
- * distribution for a full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jboss.metadata.annotation.creator;
-
-import java.lang.reflect.AnnotatedElement;
-import java.lang.reflect.Method;
-
-import org.jboss.metadata.annotation.finder.AnnotationFinder;
-import org.jboss.metadata.javaee.spec.RemoteEnvironmentRefsGroupMetaData;
-
-/**
- * @author <a href="mailto:emuckenh at redhat.com">Emanuel Muckenhuber</a>
- * @version $Revision$
- */
-public class WebServiceRefMethodProcessor
-   extends AbstractWebServiceRefProcessor<Method>
-   implements Processor<RemoteEnvironmentRefsGroupMetaData, Method>
-{
-
-   public WebServiceRefMethodProcessor(AnnotationFinder<AnnotatedElement> finder)
-   {
-      super(finder);
-   }
-
-   @Override
-   protected String getName(Method element)
-   {
-      String name = element.getName().substring(3);
-      if (name.length() > 1)
-      {
-         name = name.substring(0, 1).toLowerCase() + name.substring(1);
-      }
-      else
-      {
-         name = name.toLowerCase();
-      }
-      return name;
-   }
-
-   @Override
-   protected String getInjectionName(Method element)
-   {
-      return element.getName();
-   }
-
-   @Override
-   protected String getType(Method element)
-   {
-      if(element.getParameterTypes().length != 1)
-         throw new IllegalStateException("The method requires one parameter: "+ element);
-      
-      return element.getParameterTypes()[0].getName();
-   }
-
-   @Override
-   protected String getDeclaringClass(Method element)
-   {
-      return element.getDeclaringClass().getName();
-   }
-}

Deleted: projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/WebServiceRefsClassProcessor.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/WebServiceRefsClassProcessor.java	2008-06-18 12:16:51 UTC (rev 74793)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/WebServiceRefsClassProcessor.java	2008-06-18 12:18:22 UTC (rev 74794)
@@ -1,80 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * Copyright 2008, Red Hat Middleware LLC, and individual contributors
- * as indicated by the @author tags. See the copyright.txt file in the
- * distribution for a full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jboss.metadata.annotation.creator;
-
-import java.lang.reflect.AnnotatedElement;
-
-import javax.xml.ws.WebServiceRef;
-import javax.xml.ws.WebServiceRefs;
-
-import org.jboss.metadata.annotation.finder.AnnotationFinder;
-import org.jboss.metadata.javaee.spec.RemoteEnvironmentRefsGroupMetaData;
-
-/**
- * @author <a href="mailto:emuckenh at redhat.com">Emanuel Muckenhuber</a>
- * @version $Revision$
- */
-public class WebServiceRefsClassProcessor 
-   extends WebServiceRefClassProcessor
-   implements Processor<RemoteEnvironmentRefsGroupMetaData, Class<?>>
-{
-
-   public WebServiceRefsClassProcessor(AnnotationFinder<AnnotatedElement> finder)
-   {
-      super(finder);
-   }
-   
-   @Override
-   public void process(RemoteEnvironmentRefsGroupMetaData refsMetaData, Class<?> type)
-   {
-      WebServiceRefs annotation = finder.getAnnotation(type, WebServiceRefs.class);
-      if(annotation == null)
-         return;
-      
-      WebServiceRef[] references = annotation.value();
-      if(references != null)
-      {
-         for(WebServiceRef reference : references)
-            super.process(refsMetaData, type, reference);
-      }
-   }
-
-   @Override
-   protected String getName(Class<?> element)
-   {
-      String name = element.getSimpleName();
-      return name;
-   }
-
-   @Override
-   protected String getType(Class<?> element)
-   {
-      return element.getName();
-   }
-
-   @Override
-   protected String getDeclaringClass(Class<?> element)
-   {
-      return element.getName();
-   }
-
-}

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/jboss/AbstractComponentProcessor.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/jboss/AbstractComponentProcessor.java	2008-06-18 12:16:51 UTC (rev 74793)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/jboss/AbstractComponentProcessor.java	2008-06-18 12:18:22 UTC (rev 74794)
@@ -48,7 +48,10 @@
 import org.jboss.metadata.annotation.creator.ResourceFieldProcessor;
 import org.jboss.metadata.annotation.creator.ResourceMethodProcessor;
 import org.jboss.metadata.annotation.creator.ResourcesClassProcessor;
-import org.jboss.metadata.annotation.creator.WebServiceRefFieldProcessor;
+import org.jboss.metadata.annotation.creator.ws.WebServiceRefClassProcessor;
+import org.jboss.metadata.annotation.creator.ws.WebServiceRefFieldProcessor;
+import org.jboss.metadata.annotation.creator.ws.WebServiceRefMethodProcessor;
+import org.jboss.metadata.annotation.creator.ws.WebServiceRefsClassProcessor;
 import org.jboss.metadata.annotation.finder.AnnotationFinder;
 import org.jboss.metadata.ejb.jboss.JBossEnvironmentRefsGroupMetaData;
 import org.jboss.metadata.javaee.jboss.JBossServiceReferencesMetaData;
@@ -108,8 +111,11 @@
       // @PostConstruct/@PreDestroy
       addMethodProcessor(new PostConstructMethodProcessor(finder));
       addMethodProcessor(new PreDestroyMethodProcessor(finder));
-      // @WebServiceRef
+      // @WebServiceRef (includes @HandlerChain)
+      addMethodProcessor(new WebServiceRefMethodProcessor(finder));
       addFieldProcessor(new WebServiceRefFieldProcessor(finder));  
+      addTypeProcessor(new WebServiceRefClassProcessor(finder));
+      addTypeProcessor(new WebServiceRefsClassProcessor(finder));
    }
 
    public void addFieldProcessor(Processor processor)

Copied: projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ws/AbstractWebServiceRefProcessor.java (from rev 74790, projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/AbstractWebServiceRefProcessor.java)
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ws/AbstractWebServiceRefProcessor.java	                        (rev 0)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ws/AbstractWebServiceRefProcessor.java	2008-06-18 12:18:22 UTC (rev 74794)
@@ -0,0 +1,129 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.metadata.annotation.creator.ws;
+
+import java.lang.reflect.AnnotatedElement;
+import java.util.Set;
+
+import javax.xml.ws.WebServiceRef;
+
+import org.jboss.logging.Logger;
+import org.jboss.metadata.annotation.creator.AbstractFinderUser;
+import org.jboss.metadata.annotation.creator.ProcessorUtils;
+import org.jboss.metadata.annotation.finder.AnnotationFinder;
+import org.jboss.metadata.javaee.spec.RemoteEnvironmentRefsGroupMetaData;
+import org.jboss.metadata.javaee.spec.ResourceInjectionTargetMetaData;
+import org.jboss.metadata.javaee.spec.ServiceReferenceMetaData;
+import org.jboss.metadata.javaee.spec.ServiceReferencesMetaData;
+
+/**
+ * Base processor for @WebServiceRef annotations.
+ * Delegates @HandlerChain to WebServiceHandlerChainProcessor.
+ * 
+ * @author Scott.Stark at jboss.org
+ * @version $Revision: 67548 $
+ */
+public abstract class AbstractWebServiceRefProcessor<E extends AnnotatedElement>
+   extends AbstractFinderUser
+{
+   /** The logger. */
+   private static Logger log = Logger.getLogger(AbstractWebServiceRefProcessor.class);
+
+   /** The WebServiceHandlerChainProcessor */
+   private WebServiceHandlerChainProcessor<E> handlerChainProcessor;
+
+   protected AbstractWebServiceRefProcessor(AnnotationFinder<AnnotatedElement> finder)
+   {
+      super(finder);
+      // The handlerChainProcessor only needs to process the class if there is a @WebServiceRef
+      handlerChainProcessor = new WebServiceHandlerChainProcessor<E>(finder);
+   }
+   
+   public void process(RemoteEnvironmentRefsGroupMetaData refs, E element)
+   {
+      WebServiceRef annotation = finder.getAnnotation(element, WebServiceRef.class);
+      if(annotation == null)
+         return;
+      process(refs, element, annotation);
+   }
+   protected void process(RemoteEnvironmentRefsGroupMetaData refs, E element, WebServiceRef annotation)
+   {
+      boolean trace = log.isTraceEnabled();
+      String type = annotation.type().getName();
+      if(type.equals("java.lang.Object"))
+         type = getType(element);
+      if(trace)
+         log.trace("process: "+annotation+", type="+type);
+      ServiceReferencesMetaData srefs = refs.getServiceReferences();
+      if(srefs == null)
+      {
+         srefs = new ServiceReferencesMetaData();
+         refs.setServiceReferences(srefs);
+      }
+      ServiceReferenceMetaData ref = createServiceRef(annotation, element);
+      srefs.add(ref);
+      if(trace)
+         log.trace("created service-ref: "+ref);
+      
+      /** Delegate to handlerChainProcessor */
+      handlerChainProcessor.process(ref, element);
+   }
+
+   /**
+    * Get the resource name based on the AnnotatedElement
+    * @param element
+    * @return
+    */
+   protected abstract String getName(E element);
+   protected abstract String getInjectionName(E element);
+   protected abstract String getType(E element);
+   protected abstract String getDeclaringClass(E element);
+
+   protected ServiceReferenceMetaData createServiceRef(WebServiceRef annotation, E element)
+   {
+      ServiceReferenceMetaData ref = new ServiceReferenceMetaData();
+      String name = annotation.name();
+      if(name.length() == 0)
+         name = getName(element);
+      ref.setServiceRefName(name);
+      if(annotation.mappedName().length() > 0)
+         ref.setMappedName(annotation.mappedName());
+      ref.setAnnotatedElement(element);
+      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)
+         ref.setServiceInterface(annotation.value().getName());
+      else
+         ref.setServiceInterface(ref.getServiceRefType());
+      
+      String injectionName = getInjectionName(element);
+      Set<ResourceInjectionTargetMetaData> injectionTargets = ProcessorUtils.getInjectionTargets(injectionName, element);
+      if(injectionTargets != null)
+         ref.setInjectionTargets(injectionTargets);
+
+      return ref;
+   }
+}

Added: projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ws/ServiceReferenceHandlerChainsWrapper.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ws/ServiceReferenceHandlerChainsWrapper.java	                        (rev 0)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ws/ServiceReferenceHandlerChainsWrapper.java	2008-06-18 12:18:22 UTC (rev 74794)
@@ -0,0 +1,60 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.metadata.annotation.creator.ws;
+
+import javax.xml.bind.annotation.XmlNs;
+import javax.xml.bind.annotation.XmlNsForm;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
+
+import org.jboss.metadata.javaee.spec.JavaEEMetaDataConstants;
+import org.jboss.metadata.javaee.spec.ServiceReferenceHandlerChainsMetaData;
+import org.jboss.xb.annotations.JBossXmlSchema;
+
+/**
+ * Defines a XmlRoot for ServiceReferenceHandlerChainsMetaData, as it needs to be
+ * parsed for @HandlerChain.
+ * 
+ * @author <a href="mailto:emuckenh at redhat.com">Emanuel Muckenhuber</a>
+ * @version $Revision$
+ */
+ at XmlRootElement(name= "handler-chains", namespace = JavaEEMetaDataConstants.JAVAEE_NS)
+ at JBossXmlSchema(
+   xmlns={@XmlNs(namespaceURI = JavaEEMetaDataConstants.JAVAEE_NS, prefix = "javaee"),
+         @XmlNs(namespaceURI = "http://org.jboss.ws/jaxws/handlerscope", prefix = "ns1")
+         },
+   ignoreUnresolvedFieldOrClass=false,
+   namespace=JavaEEMetaDataConstants.JAVAEE_NS,
+   elementFormDefault=XmlNsForm.QUALIFIED)
+ at XmlType(name = "service-ref_handler-chainsType")
+public class ServiceReferenceHandlerChainsWrapper extends ServiceReferenceHandlerChainsMetaData
+{
+   /** The serialVersionUID */
+   private static final long serialVersionUID = 1;
+   
+   public ServiceReferenceHandlerChainsWrapper()
+   {
+      super();
+   }
+   
+}
+

Added: projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ws/WebServiceHandlerChainProcessor.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ws/WebServiceHandlerChainProcessor.java	                        (rev 0)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ws/WebServiceHandlerChainProcessor.java	2008-06-18 12:18:22 UTC (rev 74794)
@@ -0,0 +1,204 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.metadata.annotation.creator.ws;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.lang.reflect.AnnotatedElement;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import javax.jws.HandlerChain;
+
+import org.jboss.logging.Logger;
+import org.jboss.metadata.annotation.creator.AbstractFinderUser;
+import org.jboss.metadata.annotation.creator.Processor;
+import org.jboss.metadata.annotation.finder.AnnotationFinder;
+import org.jboss.metadata.javaee.spec.ServiceReferenceHandlerChainsMetaData;
+import org.jboss.metadata.javaee.spec.ServiceReferenceMetaData;
+import org.jboss.xb.binding.JBossXBException;
+import org.jboss.xb.binding.Unmarshaller;
+import org.jboss.xb.binding.UnmarshallerFactory;
+import org.jboss.xb.binding.sunday.unmarshalling.DefaultSchemaResolver;
+
+/**
+ * @HandlerChain processor
+ * 
+ * @author <a href="mailto:emuckenh at redhat.com">Emanuel Muckenhuber</a>
+ * @version $Revision $
+ */
+public class WebServiceHandlerChainProcessor<E extends AnnotatedElement>
+      extends AbstractFinderUser
+      implements Processor<ServiceReferenceMetaData, E>
+{
+   
+   /** The logger. */
+   private static Logger log = Logger.getLogger(WebServiceHandlerChainProcessor.class);
+
+   /** The default schema resolver. */
+   private static final DefaultSchemaResolver resolver;
+
+   static
+   {
+      resolver = new DefaultSchemaResolver();
+      resolver.addClassBindingForLocation("javaee_web_services_1_2.xsd", ServiceReferenceHandlerChainsWrapper.class);
+   }
+
+   public WebServiceHandlerChainProcessor(AnnotationFinder<AnnotatedElement> finder)
+   {
+      super(finder);
+   }
+
+   public void process(ServiceReferenceMetaData refs, E type)
+   {
+      HandlerChain annotation = finder.getAnnotation(type, HandlerChain.class);
+      if (annotation == null)
+         return;
+
+      if (annotation.file() != null && annotation.file().length() > 1)
+      {
+         log.trace("processing HandlerChain for element: " + type);
+         process(refs, type, annotation);
+      }
+   }
+
+   protected void process(ServiceReferenceMetaData refs, E element, HandlerChain annotation)
+   {
+      String fileName = annotation.file();
+      ServiceReferenceHandlerChainsMetaData handlerChains = null;
+      try
+      {
+         // get inputStream for the file
+         InputStream in = getResourceInputStream(element, fileName);
+         
+         // unmarshal
+         handlerChains = unmarshall(in);
+      }
+      catch (Exception e)
+      {
+         throw new IllegalStateException("Could not process file: "+ fileName, e);
+      }
+      
+      if (handlerChains == null)
+         return;
+
+      // Merge if there are already handlerChains 
+      if (refs.getHandlerChains() != null)
+      {
+         ServiceReferenceHandlerChainsMetaData merged = new ServiceReferenceHandlerChainsMetaData();
+         merged.merge(handlerChains, refs.getHandlerChains());
+         refs.setHandlerChains(merged);
+      }
+      else
+      {
+         refs.setHandlerChains(handlerChains);
+      }
+   }
+
+   /**
+    * Unmarshal
+    * 
+    * @param in the input stream of the file
+    * @return ServiceReferenceHandlerChainsMetaData
+    * @throws JBossXBException
+    */
+   protected ServiceReferenceHandlerChainsMetaData unmarshall(InputStream in) throws JBossXBException
+   {
+      if(in == null)
+         throw new IllegalArgumentException("InputStream may not be null.");
+      
+      Unmarshaller unmarshaller = UnmarshallerFactory.newInstance().newUnmarshaller();
+      return (ServiceReferenceHandlerChainsMetaData) unmarshaller.unmarshal(in, resolver);
+   }
+   
+   /**
+    * Returns the InputStream of a specified file.
+    * 
+    * 1. An absolute java.net.URL in externalForm (ex: http://myhandlers.foo.com/handlerfile1.xml).
+    * 2. A relative path from the source file or class file (ex: bar/handlerfile1.xml). 
+    * 
+    * @param type the declaring class
+    * @param file the specified filename
+    * @return the InputStream of the file or throws an IllegalStateException if the file was not found
+    * @throws MalformedURLException, IOException, IllegalStateException
+    */
+   protected InputStream getResourceInputStream(E type, String file) throws MalformedURLException, IOException, IllegalStateException
+   {
+      // If the filename is a url
+      if(file.startsWith("http://") )
+      {
+         URL url = new URL(file);
+         if(url != null)
+            return url.openStream();
+      }
+      
+      String fileName = file;
+      // Resolve file name
+      Class<?> declaredClass = resolveDeclaringClass(type);
+      InputStream in = declaredClass.getResourceAsStream(fileName);
+      if (in != null)
+         return in;
+      
+      // If it's not an absolute fileName resolve the name manually (package / fileName) 
+      if (!file.startsWith("/"))
+      {
+         String baseName = declaredClass.getName();
+         int index = baseName.lastIndexOf('.');
+         if (index != -1)
+         {
+            fileName = baseName.substring(0, index).replace('.', '/') + "/" + file;
+         }
+      }
+      else
+      {
+         fileName = file.substring(1);
+      }
+
+      in = declaredClass.getResourceAsStream(fileName);
+      if (in != null)
+         return in;
+
+      throw new IllegalStateException("could not find file: " + file);
+   }
+
+   /**
+    * Resolves the declaring class of an AnnotatedElement.
+    * 
+    * @param element
+    * @return the declaring class
+    */
+   private Class<?> resolveDeclaringClass(E element)
+   {
+      if(element == null)
+         throw new IllegalArgumentException("element may not be null.");
+      
+      if(element instanceof Class)
+         return (Class<?>) element;
+      else if(element instanceof Method)
+         return ((Method) element).getDeclaringClass();
+      else
+         return ((Field) element).getDeclaringClass();
+   }
+   
+}
\ No newline at end of file

Copied: projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ws/WebServiceRefClassProcessor.java (from rev 74790, projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/WebServiceRefClassProcessor.java)
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ws/WebServiceRefClassProcessor.java	                        (rev 0)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ws/WebServiceRefClassProcessor.java	2008-06-18 12:18:22 UTC (rev 74794)
@@ -0,0 +1,69 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.metadata.annotation.creator.ws;
+
+import java.lang.reflect.AnnotatedElement;
+
+import org.jboss.metadata.annotation.creator.Processor;
+import org.jboss.metadata.annotation.finder.AnnotationFinder;
+import org.jboss.metadata.javaee.spec.RemoteEnvironmentRefsGroupMetaData;
+
+/**
+ * @author <a href="mailto:emuckenh at redhat.com">Emanuel Muckenhuber</a>
+ * @version $Revision$
+ */
+public class WebServiceRefClassProcessor
+   extends AbstractWebServiceRefProcessor<Class<?>>
+   implements Processor<RemoteEnvironmentRefsGroupMetaData, Class<?>>
+{
+
+   public WebServiceRefClassProcessor(AnnotationFinder<AnnotatedElement> finder)
+   {
+      super(finder);
+   }
+
+   @Override
+   protected String getName(Class<?> element)
+   {
+      String name = element.getSimpleName();
+      return name;
+   }
+
+   @Override
+   protected String getInjectionName(Class<?> element)
+   {
+      return null;
+   }
+
+   @Override
+   protected String getType(Class<?> element)
+   {
+      return element.getName();
+   }
+
+   @Override
+   protected String getDeclaringClass(Class<?> element)
+   {
+      return element.getName();
+   }
+
+}

Copied: projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ws/WebServiceRefFieldProcessor.java (from rev 74790, projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/WebServiceRefFieldProcessor.java)
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ws/WebServiceRefFieldProcessor.java	                        (rev 0)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ws/WebServiceRefFieldProcessor.java	2008-06-18 12:18:22 UTC (rev 74794)
@@ -0,0 +1,70 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2007, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.metadata.annotation.creator.ws;
+
+import java.lang.reflect.AnnotatedElement;
+import java.lang.reflect.Field;
+
+import org.jboss.metadata.annotation.creator.Processor;
+import org.jboss.metadata.annotation.finder.AnnotationFinder;
+import org.jboss.metadata.javaee.spec.RemoteEnvironmentRefsGroupMetaData;
+
+/**
+ * @author Scott.Stark at jboss.org
+ * @version $Revision: 72354 $
+ */
+public class WebServiceRefFieldProcessor
+   extends AbstractWebServiceRefProcessor<Field>
+   implements Processor<RemoteEnvironmentRefsGroupMetaData, Field>
+{
+
+   /**
+    * @param finder
+    */
+   public WebServiceRefFieldProcessor(AnnotationFinder<AnnotatedElement> finder)
+   {
+      super(finder);
+   }
+
+   @Override
+   protected String getName(Field element)
+   {
+      String name = element.getName();
+      return name;
+   }
+   @Override
+   protected String getInjectionName(Field element)
+   {
+      return element.getName();
+   }
+   @Override
+   protected String getType(Field element)
+   {
+      return element.getType().getName();
+   }
+   @Override
+   protected String getDeclaringClass(Field element)
+   {
+      return element.getDeclaringClass().getName();
+   }
+
+}

Copied: projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ws/WebServiceRefMethodProcessor.java (from rev 74790, projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/WebServiceRefMethodProcessor.java)
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ws/WebServiceRefMethodProcessor.java	                        (rev 0)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ws/WebServiceRefMethodProcessor.java	2008-06-18 12:18:22 UTC (rev 74794)
@@ -0,0 +1,80 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.metadata.annotation.creator.ws;
+
+import java.lang.reflect.AnnotatedElement;
+import java.lang.reflect.Method;
+
+import org.jboss.metadata.annotation.creator.Processor;
+import org.jboss.metadata.annotation.finder.AnnotationFinder;
+import org.jboss.metadata.javaee.spec.RemoteEnvironmentRefsGroupMetaData;
+
+/**
+ * @author <a href="mailto:emuckenh at redhat.com">Emanuel Muckenhuber</a>
+ * @version $Revision$
+ */
+public class WebServiceRefMethodProcessor
+   extends AbstractWebServiceRefProcessor<Method>
+   implements Processor<RemoteEnvironmentRefsGroupMetaData, Method>
+{
+
+   public WebServiceRefMethodProcessor(AnnotationFinder<AnnotatedElement> finder)
+   {
+      super(finder);
+   }
+
+   @Override
+   protected String getName(Method element)
+   {
+      String name = element.getName().substring(3);
+      if (name.length() > 1)
+      {
+         name = name.substring(0, 1).toLowerCase() + name.substring(1);
+      }
+      else
+      {
+         name = name.toLowerCase();
+      }
+      return name;
+   }
+
+   @Override
+   protected String getInjectionName(Method element)
+   {
+      return element.getName();
+   }
+
+   @Override
+   protected String getType(Method element)
+   {
+      if(element.getParameterTypes().length != 1)
+         throw new IllegalStateException("The method requires one parameter: "+ element);
+      
+      return element.getParameterTypes()[0].getName();
+   }
+
+   @Override
+   protected String getDeclaringClass(Method element)
+   {
+      return element.getDeclaringClass().getName();
+   }
+}

Copied: projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ws/WebServiceRefsClassProcessor.java (from rev 74790, projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/WebServiceRefsClassProcessor.java)
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ws/WebServiceRefsClassProcessor.java	                        (rev 0)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ws/WebServiceRefsClassProcessor.java	2008-06-18 12:18:22 UTC (rev 74794)
@@ -0,0 +1,81 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.metadata.annotation.creator.ws;
+
+import java.lang.reflect.AnnotatedElement;
+
+import javax.xml.ws.WebServiceRef;
+import javax.xml.ws.WebServiceRefs;
+
+import org.jboss.metadata.annotation.creator.Processor;
+import org.jboss.metadata.annotation.finder.AnnotationFinder;
+import org.jboss.metadata.javaee.spec.RemoteEnvironmentRefsGroupMetaData;
+
+/**
+ * @author <a href="mailto:emuckenh at redhat.com">Emanuel Muckenhuber</a>
+ * @version $Revision$
+ */
+public class WebServiceRefsClassProcessor 
+   extends WebServiceRefClassProcessor
+   implements Processor<RemoteEnvironmentRefsGroupMetaData, Class<?>>
+{
+
+   public WebServiceRefsClassProcessor(AnnotationFinder<AnnotatedElement> finder)
+   {
+      super(finder);
+   }
+   
+   @Override
+   public void process(RemoteEnvironmentRefsGroupMetaData refsMetaData, Class<?> type)
+   {
+      WebServiceRefs annotation = finder.getAnnotation(type, WebServiceRefs.class);
+      if(annotation == null)
+         return;
+      
+      WebServiceRef[] references = annotation.value();
+      if(references != null)
+      {
+         for(WebServiceRef reference : references)
+            super.process(refsMetaData, type, reference);
+      }
+   }
+
+   @Override
+   protected String getName(Class<?> element)
+   {
+      String name = element.getSimpleName();
+      return name;
+   }
+
+   @Override
+   protected String getType(Class<?> element)
+   {
+      return element.getName();
+   }
+
+   @Override
+   protected String getDeclaringClass(Class<?> element)
+   {
+      return element.getName();
+   }
+
+}

Added: projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/client/HandlerChainsTestCase.java
===================================================================
--- projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/client/HandlerChainsTestCase.java	                        (rev 0)
+++ projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/client/HandlerChainsTestCase.java	2008-06-18 12:18:22 UTC (rev 74794)
@@ -0,0 +1,117 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.test.metadata.annotation.client;
+
+import java.lang.reflect.AnnotatedElement;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+
+import org.jboss.metadata.annotation.creator.client.ApplicationClient5MetaDataCreator;
+import org.jboss.metadata.annotation.creator.ws.WebServiceHandlerChainProcessor;
+import org.jboss.metadata.annotation.finder.AnnotationFinder;
+import org.jboss.metadata.annotation.finder.DefaultAnnotationFinder;
+import org.jboss.metadata.client.spec.ApplicationClient5MetaData;
+import org.jboss.metadata.javaee.spec.ServiceReferenceHandlerChainMetaData;
+import org.jboss.metadata.javaee.spec.ServiceReferenceHandlerChainsMetaData;
+import org.jboss.metadata.javaee.spec.ServiceReferenceMetaData;
+import org.jboss.metadata.javaee.spec.ServiceReferencesMetaData;
+import org.jboss.test.metadata.annotation.client.handlerchains.AnnotatedClient;
+import org.jboss.test.metadata.annotation.client.handlerchains.AnnotatedClientExternal;
+import org.jboss.test.metadata.common.PackageScanner;
+import org.jboss.test.metadata.javaee.AbstractJavaEEMetaDataTest;
+
+/**
+ * @author <a href="mailto:emuckenh at redhat.com">Emanuel Muckenhuber</a>
+ * @version $Revision$
+ */
+public class HandlerChainsTestCase extends AbstractJavaEEMetaDataTest
+{
+
+   AnnotationFinder<AnnotatedElement> finder = new DefaultAnnotationFinder<AnnotatedElement>();
+   
+   public HandlerChainsTestCase(String name)
+   {
+      super(name);
+   }
+
+   public void testHandlerChainsProcessor()
+   {
+      ServiceReferenceMetaData metaData = new ServiceReferenceMetaData();
+      
+      WebServiceHandlerChainProcessor<Class<?>> processor = new WebServiceHandlerChainProcessor<Class<?>>(finder);
+      processor.process(metaData, AnnotatedClient.class);
+      
+      ServiceReferenceHandlerChainsMetaData handlerChains = metaData.getHandlerChains();
+      assertNotNull(handlerChains);
+      assertNotNull(handlerChains.getHandlers());
+      assertEquals(10, handlerChains.getHandlers().size());
+      ServiceReferenceHandlerChainMetaData serviceHandlerChain = handlerChains.getHandlers().get(0);
+      assertNotNull(serviceHandlerChain);
+      assertEquals(" SOAP11ServerHandler ", serviceHandlerChain.getHandler().get(0).getHandlerName());
+      assertEquals(" org.jboss.test.ws.jaxws.handlerscope.ProtocolHandler ", serviceHandlerChain.getHandler().get(0).getHandlerClass());
+      
+   }
+
+   public void testAssembledHandlerChainsProcessors()
+   {
+      enableTrace("org.jboss.metadata.annotation.creator");
+      
+      Collection<Class<?>> classes = new HashSet<Class<?>>();
+      classes.add(AnnotatedClient.class);
+      ApplicationClient5MetaDataCreator creator = new ApplicationClient5MetaDataCreator(finder);
+      ApplicationClient5MetaData clientMD = creator.create(classes);
+      
+      ServiceReferencesMetaData serviceRefs = clientMD.getServiceReferences();
+      assertNotNull(serviceRefs);
+      assertEquals(3, serviceRefs.size());
+      
+      ServiceReferenceMetaData serviceRef = serviceRefs.get("endpoint");
+      assertNotNull(serviceRef);
+      ServiceReferenceHandlerChainsMetaData handlerChains = serviceRef.getHandlerChains();
+      assertNotNull(handlerChains);
+      assertNotNull(handlerChains.getHandlers());
+      assertEquals(10, handlerChains.getHandlers().size());
+      ServiceReferenceHandlerChainMetaData serviceHandlerChain = handlerChains.getHandlers().get(0);
+      assertNotNull(serviceHandlerChain);
+      assertEquals(" SOAP11ServerHandler ", serviceHandlerChain.getHandler().get(0).getHandlerName());
+      assertEquals(" org.jboss.test.ws.jaxws.handlerscope.ProtocolHandler ", serviceHandlerChain.getHandler().get(0).getHandlerClass());
+   }
+   
+   public void testHandlerChainWithExternalReference()
+   {
+      try
+      {
+         Collection<Class<?>> classes = new HashSet<Class<?>>();
+         classes.add(AnnotatedClientExternal.class);
+         ApplicationClient5MetaDataCreator creator = new ApplicationClient5MetaDataCreator(finder);
+         creator.create(classes);
+         
+         fail("@HandlerChain points to a non existing host.");
+      }
+      catch(Exception e)
+      {
+         // ok
+      }
+   }
+}
+

Added: projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/client/handlerchains/AnnotatedClient.java
===================================================================
--- projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/client/handlerchains/AnnotatedClient.java	                        (rev 0)
+++ projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/client/handlerchains/AnnotatedClient.java	2008-06-18 12:18:22 UTC (rev 74794)
@@ -0,0 +1,50 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.test.metadata.annotation.client.handlerchains;
+
+import javax.jws.HandlerChain;
+import javax.xml.ws.WebServiceRef;
+
+import org.jboss.test.metadata.annotation.ws.TestEndpoint;
+
+/**
+ * @author <a href="mailto:emuckenh at redhat.com">Emanuel Muckenhuber</a>
+ * @version $Revision$
+ */
+ at WebServiceRef
+ at HandlerChain(file = "handler-chains.xml")
+public class AnnotatedClient
+{
+
+   @WebServiceRef
+   @HandlerChain(file = "handler-chains.xml")
+   TestEndpoint endpoint;
+   
+   @WebServiceRef
+   @HandlerChain(file = "handler-chains.xml")
+   public void setTestEndpoint(TestEndpoint endpoint)
+   {
+      
+   }
+   
+}
+

Added: projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/client/handlerchains/AnnotatedClientExternal.java
===================================================================
--- projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/client/handlerchains/AnnotatedClientExternal.java	                        (rev 0)
+++ projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/client/handlerchains/AnnotatedClientExternal.java	2008-06-18 12:18:22 UTC (rev 74794)
@@ -0,0 +1,37 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.test.metadata.annotation.client.handlerchains;
+
+import javax.jws.HandlerChain;
+import javax.xml.ws.WebServiceRef;
+
+/**
+ * @author <a href="mailto:emuckenh at redhat.com">Emanuel Muckenhuber</a>
+ * @version $Revision$
+ */
+ at WebServiceRef
+ at HandlerChain(file = "http://point.to.nowhere:6666/handler-chains.xml")
+public class AnnotatedClientExternal
+{
+
+}
+

Added: projects/metadata/trunk/src/test/resources/org/jboss/test/metadata/annotation/client/handlerchains/handler-chains.xml
===================================================================
--- projects/metadata/trunk/src/test/resources/org/jboss/test/metadata/annotation/client/handlerchains/handler-chains.xml	                        (rev 0)
+++ projects/metadata/trunk/src/test/resources/org/jboss/test/metadata/annotation/client/handlerchains/handler-chains.xml	2008-06-18 12:18:22 UTC (rev 74794)
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<handler-chains xmlns="http://java.sun.com/xml/ns/javaee"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xmlns:ns1="http://org.jboss.ws/jaxws/handlerscope"
+  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee javaee_web_services_1_2.xsd">
+
+	<handler-chain>
+    <protocol-bindings>##SOAP11_HTTP</protocol-bindings>
+		<handler>
+			<handler-name> SOAP11ServerHandler </handler-name>
+			<handler-class> org.jboss.test.ws.jaxws.handlerscope.ProtocolHandler </handler-class>
+		</handler>
+	</handler-chain>
+  
+	<handler-chain>
+    <protocol-bindings>##SOAP12_HTTP</protocol-bindings>
+		<handler>
+			<handler-name> SOAP12ServerHandler </handler-name>
+			<handler-class> org.jboss.test.ws.jaxws.handlerscope.ProtocolHandler </handler-class>
+		</handler>
+	</handler-chain>
+  
+	<handler-chain>
+    <protocol-bindings>##SOAP11_HTTP ##SOAP12_HTTP</protocol-bindings>
+		<handler>
+			<handler-name> SOAPServerHandler </handler-name>
+			<handler-class> org.jboss.test.ws.jaxws.handlerscope.ProtocolHandler </handler-class>
+		</handler>
+	</handler-chain>
+  
+	<handler-chain>
+    <service-name-pattern>ns1:SOAPEndpointService</service-name-pattern>
+		<handler>
+			<handler-name> ServiceServerHandler </handler-name>
+			<handler-class> org.jboss.test.ws.jaxws.handlerscope.ProtocolHandler </handler-class>
+		</handler>
+	</handler-chain>
+  
+	<handler-chain>
+    <service-name-pattern>ns1:SOAPEndpointSer*</service-name-pattern>
+		<handler>
+			<handler-name> ServiceWildcardServerHandler </handler-name>
+			<handler-class> org.jboss.test.ws.jaxws.handlerscope.ProtocolHandler </handler-class>
+		</handler>
+	</handler-chain>
+  
+	<handler-chain>
+    <service-name-pattern>ns1:InvalidService</service-name-pattern>
+		<handler>
+			<handler-name> InvalidServiceServerHandler </handler-name>
+			<handler-class> org.jboss.test.ws.jaxws.handlerscope.ProtocolHandler </handler-class>
+		</handler>
+	</handler-chain>
+  
+	<handler-chain>
+    <port-name-pattern>ns1:SOAPEndpointPort</port-name-pattern>
+		<handler>
+			<handler-name> PortServerHandler </handler-name>
+			<handler-class> org.jboss.test.ws.jaxws.handlerscope.ProtocolHandler </handler-class>
+		</handler>
+	</handler-chain>
+  
+	<handler-chain>
+    <port-name-pattern>ns1:SOAPEndpointPo*</port-name-pattern>
+		<handler>
+			<handler-name> PortWildcardServerHandler </handler-name>
+			<handler-class> org.jboss.test.ws.jaxws.handlerscope.ProtocolHandler </handler-class>
+		</handler>
+	</handler-chain>
+  
+	<handler-chain>
+    <port-name-pattern>ns1:InvalidPort</port-name-pattern>
+		<handler>
+			<handler-name> InvalidPortServerHandler </handler-name>
+			<handler-class> org.jboss.test.ws.jaxws.handlerscope.ProtocolHandler </handler-class>
+		</handler>
+	</handler-chain>
+  
+	<handler-chain>
+		<handler>
+			<handler-name> GeneralServerHandler </handler-name>
+			<handler-class> org.jboss.test.ws.jaxws.handlerscope.ProtocolHandler </handler-class>
+		</handler>
+	</handler-chain>
+  
+</handler-chains>
\ No newline at end of file




More information about the jboss-cvs-commits mailing list