[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