Author: thomas.diesler(a)jboss.com
Date: 2007-01-22 05:22:58 -0500 (Mon, 22 Jan 2007)
New Revision: 2020
Modified:
trunk/integration-jboss50/src/main/java/org/jboss/ws/integration/jboss50/UnifiedServiceRefObjectFactory.java
trunk/integration-jboss50/src/main/java/org/jboss/ws/integration/jboss50/WebServiceRefHandler.java
trunk/integration-jboss50/src/main/java/org/jboss/ws/integration/jboss50/WebServiceRefHandlerMBean.java
trunk/jbossws-core/src/main/java/org/jboss/ws/core/jaxws/client/ServiceObjectFactory.java
trunk/jbossws-core/src/main/java/org/jboss/ws/core/jaxws/client/UnifiedServiceRef.java
trunk/jbossws-core/src/main/java/org/jboss/ws/core/jaxws/spi/ServiceDelegateImpl.java
trunk/jbossws-core/src/main/java/org/jboss/ws/metadata/builder/jaxws/JAXWSClientMetaDataBuilder.java
trunk/jbossws-core/src/main/java/org/jboss/ws/metadata/builder/jaxws/JAXWSMetaDataBuilder.java
trunk/jbossws-core/src/main/java/org/jboss/ws/metadata/umdm/ServiceMetaData.java
trunk/jbossws-tests/src/main/java/org/jboss/test/ws/jaxws/jsr181/handlerchain/HandlerChainClient.java
trunk/jbossws-tests/src/main/java/org/jboss/test/ws/jaxws/jsr181/handlerchain/JSR181HandlerChainTestCase.java
trunk/jbossws-tests/src/main/java/org/jboss/test/ws/jaxws/xop/MimeDeclarationTestCase.java
trunk/jbossws-tests/src/main/resources/jaxws/jsr181/handlerchain/META-INF/jboss-client.xml
Log:
Support service-ref/handler-chain
Modified:
trunk/integration-jboss50/src/main/java/org/jboss/ws/integration/jboss50/UnifiedServiceRefObjectFactory.java
===================================================================
---
trunk/integration-jboss50/src/main/java/org/jboss/ws/integration/jboss50/UnifiedServiceRefObjectFactory.java 2007-01-21
22:53:12 UTC (rev 2019)
+++
trunk/integration-jboss50/src/main/java/org/jboss/ws/integration/jboss50/UnifiedServiceRefObjectFactory.java 2007-01-22
10:22:58 UTC (rev 2020)
@@ -115,6 +115,10 @@
{
ref.setConfigFile(value);
}
+ else if (localName.equals("handler-chain"))
+ {
+ ref.setHandlerChain(value);
+ }
else if (localName.equals("wsdl-override"))
{
ref.setWsdlLocation(value);
Modified:
trunk/integration-jboss50/src/main/java/org/jboss/ws/integration/jboss50/WebServiceRefHandler.java
===================================================================
---
trunk/integration-jboss50/src/main/java/org/jboss/ws/integration/jboss50/WebServiceRefHandler.java 2007-01-21
22:53:12 UTC (rev 2019)
+++
trunk/integration-jboss50/src/main/java/org/jboss/ws/integration/jboss50/WebServiceRefHandler.java 2007-01-22
10:22:58 UTC (rev 2020)
@@ -23,12 +23,21 @@
// $Id$
+import java.lang.annotation.Annotation;
+import java.lang.reflect.AnnotatedElement;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.jws.HandlerChain;
import javax.management.MBeanServer;
import javax.naming.Context;
import javax.naming.NamingException;
import javax.xml.transform.Source;
import javax.xml.ws.Service;
import javax.xml.ws.WebServiceRef;
+import javax.xml.ws.WebServiceRefs;
import org.jboss.logging.Logger;
import org.jboss.mx.util.MBeanServerLocator;
@@ -49,14 +58,56 @@
// logging support
private static Logger log = Logger.getLogger(WebServiceRefHandler.class);
- public void setupWebServiceRef(Context encCtx, String encName, Class targetClass,
WebServiceRef wsref, VirtualFile vfsRoot, Source metadata) throws NamingException
+ public void setupWebServiceRef(Context encCtx, String encName, AnnotatedElement
anElement, VirtualFile vfsRoot, Source metadata) throws NamingException
{
+ WebServiceRef wsref = null;
+
+ // Build the list of @WebServiceRef relevant annotations
+ List<WebServiceRef> wsrefList = new ArrayList<WebServiceRef>();
+ for (Annotation an : anElement.getAnnotations())
+ {
+ if (an instanceof WebServiceRef)
+ wsrefList.add((WebServiceRef)an);
+
+ if (an instanceof WebServiceRefs)
+ {
+ WebServiceRefs wsrefs = (WebServiceRefs)an;
+ for (WebServiceRef aux : wsrefs.value())
+ wsrefList.add(aux);
+ }
+ }
+
+ // Use the single @WebServiceRef
+ if (wsrefList.size() == 1)
+ {
+ wsref = wsrefList.get(0);
+ }
+ else
+ {
+ for (WebServiceRef aux : wsrefList)
+ {
+ if (encName.endsWith("/" + aux.name()))
+ {
+ wsref = aux;
+ break;
+ }
+ }
+ }
+
+ if (wsref == null)
+ throw new IllegalArgumentException("@WebServiceRef must be present on:
" + anElement);
+
+ Class targetClass = null;
+ if (anElement instanceof Field)
+ targetClass = ((Field)anElement).getType();
+ else if (anElement instanceof Method)
+ targetClass = ((Method)anElement).getParameterTypes()[0];
+
String externalName = encCtx.getNameInNamespace() + "/" + encName;
- String refTypeName = (targetClass != null ? targetClass.getName() : null);
- log.debug("setupWebServiceRef [jndi=" + externalName +
",refType=" + refTypeName + "]");
+ String targetClassName = (targetClass != null ? targetClass.getName() : null);
+ log.debug("setupWebServiceRef [jndi=" + externalName +
",target=" + targetClassName + "]");
String serviceClassName = null;
- String targetClassName = null;
// #1 Use the explicit @WebServiceRef.value
if (wsref.value() != Object.class)
@@ -88,6 +139,11 @@
if (usRef.getWsdlLocation() == null && wsref.wsdlLocation().length()
> 0)
usRef.setWsdlLocation(wsref.wsdlLocation());
+ // Set the handlerChain from @HandlerChain on the annotated element
+ HandlerChain anHandlerChain = anElement.getAnnotation(HandlerChain.class);
+ if (usRef.getHandlerChain() == null && anHandlerChain != null &&
anHandlerChain.file().length() > 0)
+ usRef.setHandlerChain(anHandlerChain.file());
+
Util.rebind(encCtx, encName, new ServiceReferenceable(serviceClassName,
targetClassName, usRef));
}
catch (RuntimeException rte)
Modified:
trunk/integration-jboss50/src/main/java/org/jboss/ws/integration/jboss50/WebServiceRefHandlerMBean.java
===================================================================
---
trunk/integration-jboss50/src/main/java/org/jboss/ws/integration/jboss50/WebServiceRefHandlerMBean.java 2007-01-21
22:53:12 UTC (rev 2019)
+++
trunk/integration-jboss50/src/main/java/org/jboss/ws/integration/jboss50/WebServiceRefHandlerMBean.java 2007-01-22
10:22:58 UTC (rev 2020)
@@ -22,11 +22,12 @@
package org.jboss.ws.integration.jboss50;
+import java.lang.reflect.AnnotatedElement;
+
import javax.management.ObjectName;
import javax.naming.Context;
import javax.naming.NamingException;
import javax.xml.transform.Source;
-import javax.xml.ws.WebServiceRef;
import org.jboss.virtual.VirtualFile;
import org.jboss.ws.core.utils.ObjectNameFactory;
@@ -41,5 +42,5 @@
/** Binds a JAXWS WebServiceRef into the callers ENC
*/
- void setupWebServiceRef(Context encCtx, String encName, Class refType, WebServiceRef
wsref, VirtualFile vfsRoot, Source metadata) throws NamingException;
+ void setupWebServiceRef(Context encCtx, String encName, AnnotatedElement enElement,
VirtualFile vfsRoot, Source metadata) throws NamingException;
}
Modified:
trunk/jbossws-core/src/main/java/org/jboss/ws/core/jaxws/client/ServiceObjectFactory.java
===================================================================
---
trunk/jbossws-core/src/main/java/org/jboss/ws/core/jaxws/client/ServiceObjectFactory.java 2007-01-21
22:53:12 UTC (rev 2019)
+++
trunk/jbossws-core/src/main/java/org/jboss/ws/core/jaxws/client/ServiceObjectFactory.java 2007-01-22
10:22:58 UTC (rev 2020)
@@ -90,6 +90,9 @@
{
Reference ref = (Reference)obj;
+ // Get the target class name
+ String targetClassName =
(String)ref.get(ServiceReferenceable.TARGET_CLASS_NAME).getContent();
+
// Unmarshall the UnifiedServiceRef
UnifiedServiceRef usRef = unmarshallServiceRef(ref);
String serviceRefName = usRef.getServiceRefName();
@@ -99,21 +102,21 @@
if (serviceClassName == null)
serviceClassName =
(String)ref.get(ServiceReferenceable.SERVICE_CLASS_NAME).getContent();
+ // If the target defaults to javax.xml.ws.Service, user the service as the
target
+ if (Service.class.getName().equals(targetClassName))
+ targetClassName = serviceClassName;
+
log.debug("Service class name: " + serviceClassName);
+ log.debug("Target class name: " + targetClassName);
// Load the service class
ClassLoader ctxLoader = Thread.currentThread().getContextClassLoader();
Class serviceClass = ctxLoader.loadClass(serviceClassName);
+ Class targetClass = (targetClassName != null ?
ctxLoader.loadClass(targetClassName) : null);
if (Service.class.isAssignableFrom(serviceClass) == false)
throw new IllegalArgumentException("WebServiceRef type '" +
serviceClass + "' is not assignable to javax.xml.ws.Service");
- // Load the target class
- String targetClassName =
(String)ref.get(ServiceReferenceable.TARGET_CLASS_NAME).getContent();
- Class targetClass = (targetClassName != null ?
ctxLoader.loadClass(targetClassName) : null);
-
- log.debug("Target class name: " + serviceClassName);
-
// Receives either a javax.xml.ws.Service or a dynamic proxy
Object target;
Modified:
trunk/jbossws-core/src/main/java/org/jboss/ws/core/jaxws/client/UnifiedServiceRef.java
===================================================================
---
trunk/jbossws-core/src/main/java/org/jboss/ws/core/jaxws/client/UnifiedServiceRef.java 2007-01-21
22:53:12 UTC (rev 2019)
+++
trunk/jbossws-core/src/main/java/org/jboss/ws/core/jaxws/client/UnifiedServiceRef.java 2007-01-22
10:22:58 UTC (rev 2020)
@@ -47,6 +47,7 @@
private QName serviceQName;
private String configName;
private String configFile;
+ private String handlerChain;
private List<PortInfo> portInfos = new ArrayList<PortInfo>();
private String wsdlLocation;
@@ -90,41 +91,51 @@
this.serviceQName = serviceQName;
}
- public List<PortInfo> getPortInfos()
+ public String getConfigFile()
{
- return portInfos;
+ return configFile;
}
- public String getWsdlLocation()
+ public void setConfigFile(String configFile)
{
- return wsdlLocation;
+ this.configFile = configFile;
}
- public void setWsdlLocation(String wsdlLocation)
+ public String getConfigName()
{
- this.wsdlLocation = wsdlLocation;
+ return configName;
}
- public String getConfigFile()
+ public void setConfigName(String configName)
{
- return configFile;
+ this.configName = configName;
}
- public void setConfigFile(String configFile)
+ public String getHandlerChain()
{
- this.configFile = configFile;
+ return handlerChain;
}
- public String getConfigName()
+ public void setHandlerChain(String handlerChain)
{
- return configName;
+ this.handlerChain = handlerChain;
}
- public void setConfigName(String configName)
+ public List<PortInfo> getPortInfos()
{
- this.configName = configName;
+ return portInfos;
}
+ public String getWsdlLocation()
+ {
+ return wsdlLocation;
+ }
+
+ public void setWsdlLocation(String wsdlLocation)
+ {
+ this.wsdlLocation = wsdlLocation;
+ }
+
public String toString()
{
StringBuffer sb = new StringBuffer(100);
Modified:
trunk/jbossws-core/src/main/java/org/jboss/ws/core/jaxws/spi/ServiceDelegateImpl.java
===================================================================
---
trunk/jbossws-core/src/main/java/org/jboss/ws/core/jaxws/spi/ServiceDelegateImpl.java 2007-01-21
22:53:12 UTC (rev 2019)
+++
trunk/jbossws-core/src/main/java/org/jboss/ws/core/jaxws/spi/ServiceDelegateImpl.java 2007-01-22
10:22:58 UTC (rev 2020)
@@ -93,10 +93,6 @@
public ServiceDelegateImpl(URL wsdlURL, QName serviceName)
{
- // If this Service was constructed through the ServiceObjectFactory
- // this thread local association should be available
- usRef = ServiceObjectFactory.getUnifiedServiceRefAssociation();
-
if (wsdlURL != null)
{
JAXWSClientMetaDataBuilder builder = new JAXWSClientMetaDataBuilder();
@@ -108,6 +104,12 @@
serviceMetaData = new ServiceMetaData(wsMetaData, serviceName);
wsMetaData.addService(serviceMetaData);
}
+
+ // If this Service was constructed through the ServiceObjectFactory
+ // this thread local association should be available
+ usRef = ServiceObjectFactory.getUnifiedServiceRefAssociation();
+ if (usRef != null && usRef.getHandlerChain() != null)
+ serviceMetaData.setHandlerChain(usRef.getHandlerChain());
}
/**
@@ -196,7 +198,6 @@
private void assertSEIConstraints(Class seiClass)
{
-
if (seiClass == null)
throw new IllegalArgumentException("Service endpoint interface cannot be
null");
Modified:
trunk/jbossws-core/src/main/java/org/jboss/ws/metadata/builder/jaxws/JAXWSClientMetaDataBuilder.java
===================================================================
---
trunk/jbossws-core/src/main/java/org/jboss/ws/metadata/builder/jaxws/JAXWSClientMetaDataBuilder.java 2007-01-21
22:53:12 UTC (rev 2019)
+++
trunk/jbossws-core/src/main/java/org/jboss/ws/metadata/builder/jaxws/JAXWSClientMetaDataBuilder.java 2007-01-22
10:22:58 UTC (rev 2020)
@@ -192,8 +192,7 @@
epMetaData.configure(epMetaData);
// Process an optional @HandlerChain annotation
- if (wsClass.isAnnotationPresent(HandlerChain.class))
- processHandlerChain(epMetaData, wsClass);
+ processHandlerChain(epMetaData, wsClass);
// Process @WebMethod
processWebMethods(epMetaData, wsClass);
Modified:
trunk/jbossws-core/src/main/java/org/jboss/ws/metadata/builder/jaxws/JAXWSMetaDataBuilder.java
===================================================================
---
trunk/jbossws-core/src/main/java/org/jboss/ws/metadata/builder/jaxws/JAXWSMetaDataBuilder.java 2007-01-21
22:53:12 UTC (rev 2019)
+++
trunk/jbossws-core/src/main/java/org/jboss/ws/metadata/builder/jaxws/JAXWSMetaDataBuilder.java 2007-01-22
10:22:58 UTC (rev 2020)
@@ -152,10 +152,18 @@
if (wsClass.isAnnotationPresent(SOAPMessageHandlers.class))
throw new WSException("Cannot combine @HandlerChain with
@SOAPMessageHandlers");
+ // The explicit handler chain on the service has priority
+ String filename = epMetaData.getServiceMetaData().getHandlerChain();
+
HandlerChain anHandlerChain = wsClass.getAnnotation(HandlerChain.class);
+ if (filename == null && anHandlerChain != null)
+ filename = anHandlerChain.file();
+ // Nothing to do
+ if (filename == null)
+ return;
+
URL fileURL = null;
- String filename = anHandlerChain.file();
log.debug("processHandlerChain [" + filename + "] on: " +
wsClass.getName());
// Try the filename as URL
Modified:
trunk/jbossws-core/src/main/java/org/jboss/ws/metadata/umdm/ServiceMetaData.java
===================================================================
---
trunk/jbossws-core/src/main/java/org/jboss/ws/metadata/umdm/ServiceMetaData.java 2007-01-21
22:53:12 UTC (rev 2019)
+++
trunk/jbossws-core/src/main/java/org/jboss/ws/metadata/umdm/ServiceMetaData.java 2007-01-22
10:22:58 UTC (rev 2020)
@@ -72,6 +72,7 @@
private String wsdName;
private URL wsdlLocation;
private URL mappingLocation;
+ private String handlerChain;
private String wsdlPublishLocation;
// The type mapping that is maintained by this service
@@ -130,6 +131,16 @@
this.wsdlLocation = wsdlLocation;
}
+ public String getHandlerChain()
+ {
+ return handlerChain;
+ }
+
+ public void setHandlerChain(String handlerChain)
+ {
+ this.handlerChain = handlerChain;
+ }
+
public String getWsdlPublishLocation()
{
return wsdlPublishLocation;
@@ -367,7 +378,8 @@
buffer.append("\n qname=" + serviceName);
buffer.append("\n wsdName=" + wsdName);
buffer.append("\n wsdlFile=" + wsdlLocation);
- buffer.append("\n jaxrpcFile=" + mappingLocation);
+ buffer.append("\n mappingFile=" + mappingLocation);
+ buffer.append("\n handlerChain=" + handlerChain);
buffer.append("\n publishLocation=" + wsdlPublishLocation);
buffer.append("\n properties=" + properties);
buffer.append("\n" + types);
Modified:
trunk/jbossws-tests/src/main/java/org/jboss/test/ws/jaxws/jsr181/handlerchain/HandlerChainClient.java
===================================================================
---
trunk/jbossws-tests/src/main/java/org/jboss/test/ws/jaxws/jsr181/handlerchain/HandlerChainClient.java 2007-01-21
22:53:12 UTC (rev 2019)
+++
trunk/jbossws-tests/src/main/java/org/jboss/test/ws/jaxws/jsr181/handlerchain/HandlerChainClient.java 2007-01-22
10:22:58 UTC (rev 2020)
@@ -37,11 +37,13 @@
// provide logging
private static final Logger log = Logger.getLogger(HandlerChainClient.class);
- // Test on field
@WebServiceRef(name = "Service1")
@HandlerChain(file = "jaxws-handlers.xml")
static Service service1;
+ @WebServiceRef(name = "Service2")
+ static Service service2;
+
public static Map<String, String> testResult = new HashMap<String,
String>();
public static void main(String[] args) throws Exception
@@ -73,4 +75,10 @@
Endpoint port = service1.getPort(Endpoint.class);
return port.echo(reqStr);
}
+
+ public String testService2(String reqStr) throws Exception
+ {
+ Endpoint port = service2.getPort(Endpoint.class);
+ return port.echo(reqStr);
+ }
}
Modified:
trunk/jbossws-tests/src/main/java/org/jboss/test/ws/jaxws/jsr181/handlerchain/JSR181HandlerChainTestCase.java
===================================================================
---
trunk/jbossws-tests/src/main/java/org/jboss/test/ws/jaxws/jsr181/handlerchain/JSR181HandlerChainTestCase.java 2007-01-21
22:53:12 UTC (rev 2019)
+++
trunk/jbossws-tests/src/main/java/org/jboss/test/ws/jaxws/jsr181/handlerchain/JSR181HandlerChainTestCase.java 2007-01-22
10:22:58 UTC (rev 2020)
@@ -84,8 +84,20 @@
public void testHandlerChainOnWebServiceRef() throws Throwable
{
- new ClientLauncher().launch(HandlerChainClient.class.getName(),
"jbossws-client", new String[] { "testService1", "Kermit"
});
- String resStr = HandlerChainClient.testResult.get("testService1");
+ String resStr = invokeTestClient("testService1", "Kermit");
assertEquals("Kermit|LogOut|AuthOut|RoutOut|LogIn|AuthIn|RoutIn|endpoint|RoutOut|AuthOut|LogOut|RoutIn|AuthIn|LogIn",
resStr);
}
+
+ public void testHandlerChainOverride() throws Throwable
+ {
+ String resStr = invokeTestClient("testService2", "Kermit");
+
assertEquals("Kermit|LogOut|AuthOut|RoutOut|LogIn|AuthIn|RoutIn|endpoint|RoutOut|AuthOut|LogOut|RoutIn|AuthIn|LogIn",
resStr);
+ }
+
+ private String invokeTestClient(String testName, String reqStr) throws Throwable
+ {
+ new ClientLauncher().launch(HandlerChainClient.class.getName(),
"jbossws-client", new String[] { testName, reqStr });
+ String resStr = HandlerChainClient.testResult.get("testService1");
+ return resStr;
+ }
}
Modified:
trunk/jbossws-tests/src/main/java/org/jboss/test/ws/jaxws/xop/MimeDeclarationTestCase.java
===================================================================
---
trunk/jbossws-tests/src/main/java/org/jboss/test/ws/jaxws/xop/MimeDeclarationTestCase.java 2007-01-21
22:53:12 UTC (rev 2019)
+++
trunk/jbossws-tests/src/main/java/org/jboss/test/ws/jaxws/xop/MimeDeclarationTestCase.java 2007-01-22
10:22:58 UTC (rev 2020)
@@ -70,7 +70,7 @@
if(true)
{
- System.out.println("FIXME (JBWS-1460): @XmlMimeType on SEI parameter
declarations");
+ System.out.println("FIXME: [JBWS-1460] @XmlMimeType on SEI parameter
declarations");
return;
}
Modified:
trunk/jbossws-tests/src/main/resources/jaxws/jsr181/handlerchain/META-INF/jboss-client.xml
===================================================================
---
trunk/jbossws-tests/src/main/resources/jaxws/jsr181/handlerchain/META-INF/jboss-client.xml 2007-01-21
22:53:12 UTC (rev 2019)
+++
trunk/jbossws-tests/src/main/resources/jaxws/jsr181/handlerchain/META-INF/jboss-client.xml 2007-01-22
10:22:58 UTC (rev 2020)
@@ -10,4 +10,9 @@
<wsdl-override>http://@jbosstest.host.name@:8080/jaxws-jsr181-handlerchain/TestService?wsdl</wsdl-override>
</service-ref>
+ <service-ref>
+ <service-ref-name>Service2</service-ref-name>
+
<wsdl-override>http://@jbosstest.host.name@:8080/jaxws-jsr181-handlerchain/TestService?wsdl</wsdl-override>
+ </service-ref>
+
</jboss-client>
\ No newline at end of file