[jboss-svn-commits] JBossWS SVN: r976 - in branches/tdiesler/trunk: . src/main/java/org/jboss/ws/metadata src/test src/test/java/org/jboss/test/ws/jaxws/asynchronous
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Mon Sep 18 09:56:10 EDT 2006
Author: thomas.diesler at jboss.com
Date: 2006-09-18 09:56:04 -0400 (Mon, 18 Sep 2006)
New Revision: 976
Modified:
branches/tdiesler/trunk/build-thirdparty.xml
branches/tdiesler/trunk/src/main/java/org/jboss/ws/metadata/EndpointMetaData.java
branches/tdiesler/trunk/src/main/java/org/jboss/ws/metadata/OperationMetaData.java
branches/tdiesler/trunk/src/test/build.xml
branches/tdiesler/trunk/src/test/java/org/jboss/test/ws/jaxws/asynchronous/AsynchronousProxyTestCase.java
Log:
partial commit
Modified: branches/tdiesler/trunk/build-thirdparty.xml
===================================================================
--- branches/tdiesler/trunk/build-thirdparty.xml 2006-09-18 13:55:47 UTC (rev 975)
+++ branches/tdiesler/trunk/build-thirdparty.xml 2006-09-18 13:56:04 UTC (rev 976)
@@ -91,7 +91,6 @@
<!-- The classpath for the jbossws core -->
<path id="jboss.core.classpath">
<pathelement location="${jboss.server.lib}/jboss-j2ee.jar"/>
- <pathelement location="${jboss.server.lib}/jboss-jaxrpc.jar"/>
<pathelement location="${jboss.server.deploy}/ejb3.deployer/jboss-annotations-ejb3.jar"/>
<pathelement location="${jboss.server.deploy}/ejb3.deployer/jboss-ejb3x.jar"/>
</path>
@@ -103,7 +102,7 @@
<pathelement location="${jboss.lib}/jboss-mbeans.jar"/>
<pathelement location="${jboss.lib}/jboss-system.jar"/>
<pathelement location="${jboss.server.lib}/jboss.jar"/>
- <pathelement location="${jboss.server.lib}/jbosssx.jar"/>
+ <pathelement location="${jboss.client}/jbosssx-client.jar"/>
<pathelement location="${jboss.server.deploy}/jboss-aop-jdk50.deployer/jboss-aop-jdk50.jar"/>
<pathelement location="${jboss.server.deploy}/jboss-aop-jdk50.deployer/jboss-aspect-library-jdk50.jar"/>
<pathelement location="${jboss.server.deploy}/ejb3.deployer/jboss-annotations-ejb3.jar"/>
Modified: branches/tdiesler/trunk/src/main/java/org/jboss/ws/metadata/EndpointMetaData.java
===================================================================
--- branches/tdiesler/trunk/src/main/java/org/jboss/ws/metadata/EndpointMetaData.java 2006-09-18 13:55:47 UTC (rev 975)
+++ branches/tdiesler/trunk/src/main/java/org/jboss/ws/metadata/EndpointMetaData.java 2006-09-18 13:56:04 UTC (rev 976)
@@ -26,7 +26,9 @@
import java.lang.reflect.Method;
import java.net.URLClassLoader;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import java.util.Properties;
import javax.jws.soap.SOAPBinding.ParameterStyle;
@@ -106,6 +108,8 @@
private List<HandlerMetaData> handlers = new ArrayList<HandlerMetaData>();
// True if the handlers are initialized
private boolean handlersInitialized;
+ // The operation meta data cache
+ private transient Map<Method,OperationMetaData> methodCache = new HashMap<Method,OperationMetaData>();
public EndpointMetaData(ServiceMetaData service, QName portName, Type type)
{
@@ -329,18 +333,19 @@
public OperationMetaData getOperation(QName xmlName)
{
OperationMetaData opMetaData = null;
- for (OperationMetaData auxOperation : operations)
+ for (OperationMetaData aux : operations)
{
- QName opQName = auxOperation.getQName();
- if (opQName.equals(xmlName))
+ QName opQName = aux.getQName();
+ String javaName = aux.getJavaName();
+ if (opQName.equals(xmlName) && !javaName.endsWith("Async"))
{
if (opMetaData == null)
{
- opMetaData = auxOperation;
+ opMetaData = aux;
}
else
{
- throw new WSException("Cannot uniquely indetify operation: " + xmlName);
+ throw new WSException("Cannot uniquely indentify operation: " + xmlName);
}
}
}
@@ -367,7 +372,7 @@
}
else
{
- throw new WSException("Cannot uniquely indetify operation: " + xmlName);
+ throw new WSException("Cannot uniquely indentify operation: " + xmlName);
}
}
}
@@ -378,13 +383,17 @@
public OperationMetaData getOperation(Method method)
{
- OperationMetaData opMetaData = null;
- for (OperationMetaData aux : operations)
+ OperationMetaData opMetaData = methodCache.get(method);
+ if (opMetaData == null)
{
- if (aux.getJavaMethod().equals(method))
+ for (OperationMetaData aux : operations)
{
- opMetaData = aux;
- break;
+ if (aux.getJavaMethod().equals(method))
+ {
+ methodCache.put(method, aux);
+ opMetaData = aux;
+ break;
+ }
}
}
return opMetaData;
Modified: branches/tdiesler/trunk/src/main/java/org/jboss/ws/metadata/OperationMetaData.java
===================================================================
--- branches/tdiesler/trunk/src/main/java/org/jboss/ws/metadata/OperationMetaData.java 2006-09-18 13:55:47 UTC (rev 975)
+++ branches/tdiesler/trunk/src/main/java/org/jboss/ws/metadata/OperationMetaData.java 2006-09-18 13:56:04 UTC (rev 976)
@@ -21,7 +21,8 @@
*/
package org.jboss.ws.metadata;
-// $Id$
+// $Id: OperationMetaData.java 740 2006-08-14 08:07:47Z thomas.diesler at jboss.com
+// $
import java.lang.reflect.Method;
import java.util.ArrayList;
@@ -45,8 +46,9 @@
import org.w3c.dom.Element;
/**
- * An Operation component describes an operation that a given interface supports.
- *
+ * An Operation component describes an operation that a given interface
+ * supports.
+ *
* @author Thomas.Diesler at jboss.org
* @author <a href="mailto:jason.greene at jboss.com">Jason T. Greene</a>
* @since 12-May-2004
@@ -60,13 +62,21 @@
private EndpointMetaData epMetaData;
private QName qname;
+
private QName responseName;
+
private String javaName;
+
private Method javaMethod;
+
private boolean oneWay;
+
private String soapAction;
+
private List<ParameterMetaData> parameters = new ArrayList<ParameterMetaData>();
+
private List<FaultMetaData> faults = new ArrayList<FaultMetaData>();
+
private ParameterMetaData returnParam;
public OperationMetaData(QName qname, String javaName)
@@ -159,7 +169,9 @@
return javaName;
}
- /** Lazily load the java method. The SEI class loader may not be available at creation time
+ /**
+ * Lazily load the java method. The SEI class loader may not be available at
+ * creation time
*/
public Method getJavaMethod()
{
@@ -195,40 +207,40 @@
}
else
{
- // Match the return parameter
- ParameterMetaData returnMetaData = getReturnParameter();
- if (returnMetaData != null)
+ boolean matchedMethodParams = compareMethodParams(methodTypes, true) || compareMethodParams(methodTypes, false);
+ boolean matchedReturnParam = true;
+
+ if (matchedMethodParams)
{
- if (!matchParameter(returnMetaData, returnType, true) && !matchParameter(returnMetaData, returnType, false))
+ ParameterMetaData returnMetaData = getReturnParameter();
+ if (returnMetaData != null)
{
- log.debug("Unmatched return meta data: " + returnType);
- continue;
+ matchedReturnParam = matchParameter(returnMetaData, returnType, true) || matchParameter(returnMetaData, returnType, false);
}
- }
- else
- {
- if (returnType != void.class)
+ if (returnMetaData == null && returnType != void.class)
{
- log.debug("Unmatched return meta data: " + returnType);
- continue;
+ matchedReturnParam = false;
}
}
- // compare params by java type name
- if (compareMethodParams(methodTypes, true))
+ if (matchedMethodParams && matchedReturnParam)
{
log.debug("Found best matching java method: " + method);
javaMethod = method;
break;
}
- // compare params by assignability
- else if (compareMethodParams(methodTypes, false))
+ if (matchedMethodParams == false)
{
- log.debug("Found possible matching java method: " + method);
- javaMethod = method;
- break;
+ log.debug("Method parameters don't match: " + method);
+ continue;
}
+
+ if (matchedReturnParam == false)
+ {
+ log.debug("Method return parameter doesn't match: " + method);
+ continue;
+ }
}
}
}
@@ -249,7 +261,9 @@
return javaMethod;
}
- /** Return true if this is a generic message style destination that takes a org.w3c.dom.Element
+ /**
+ * Return true if this is a generic message style destination that takes a
+ * org.w3c.dom.Element
*/
public boolean isMessageEndpoint()
{
@@ -265,26 +279,33 @@
return isMessageEndpoint;
}
- private boolean compareMethodParams(Class[] methodParams, boolean matchByTypeName)
+ private boolean compareMethodParams(Class[] methodParams, boolean matchByJavaTypeName)
{
- log.trace("Compare method params by type name: " + matchByTypeName);
+ log.trace("Compare method params by type name: " + matchByJavaTypeName);
- boolean pass = (parameters.size() == methodParams.length);
- if (pass == false)
+ boolean pass = true;
+ boolean countMatch = (parameters.size() == methodParams.length);
+
+ if (countMatch == false)
+ {
log.trace("Unmatched parameter count: " + parameters.size() + "!=" + methodParams.length);
-
- for (int i = 0; pass && i < methodParams.length; i++)
+ pass = false;
+ }
+ else
{
- ParameterMetaData paramMetaData = parameters.get(i);
- pass = matchParameter(paramMetaData, methodParams[i], matchByTypeName);
+ for (int i = 0; pass && i < methodParams.length; i++)
+ {
+ ParameterMetaData paramMetaData = parameters.get(i);
+ pass = matchParameter(paramMetaData, methodParams[i], matchByJavaTypeName);
+ }
}
return pass;
}
- private boolean matchParameter(ParameterMetaData paramMetaData, Class methodParam, boolean matchByTypeName)
+ private boolean matchParameter(ParameterMetaData paramMetaData, Class methodParam, boolean matchByJavaTypeName)
{
QName xmlType = paramMetaData.getXmlType();
- String javaType = paramMetaData.getJavaTypeName();
+ String javaTypeName = paramMetaData.getJavaTypeName();
boolean pass = true;
if (paramMetaData != returnParam && paramMetaData.getMode() != ParameterMode.IN)
@@ -304,21 +325,22 @@
// In case the parameter java type has not been initialized
// This happens when the UMDM is build from WSDL only (i.e. JAXWS Service)
TypeMappingImpl typeMapping = epMetaData.getServiceMetaData().getTypeMapping();
- if (javaType == null)
+ if (javaTypeName == null)
{
- javaType = methodParam.getName();
- paramMetaData.setJavaTypeName(javaType);
- log.debug("Set parameter java type from method param: " + javaType);
+ javaTypeName = methodParam.getName();
+ paramMetaData.setJavaTypeName(javaTypeName);
+ log.debug("Set parameter java type from method param: " + javaTypeName);
if (epMetaData.getType() == Type.JAXWS)
{
+ log.debug("Register parameter type from " + javaTypeName + " to " + xmlType);
typeMapping.register(methodParam, xmlType, new JAXBSerializerFactory(), new JAXBDeserializerFactory());
}
}
-
- if (matchByTypeName)
+
+ if (matchByJavaTypeName)
{
- pass = methodParam.getName().equals(javaType);
+ pass = methodParam.getName().equals(javaTypeName);
}
else
{
@@ -335,7 +357,7 @@
}
}
- String name = (matchByTypeName) ? paramMetaData.getJavaTypeName() : paramMetaData.getJavaType().getName();
+ String name = (matchByJavaTypeName) ? paramMetaData.getJavaTypeName() : paramMetaData.getJavaType().getName();
log.trace((pass ? "Matched" : "Unmatched") + " parameter: " + name + " == " + methodParam.getName());
return pass;
}
@@ -475,7 +497,8 @@
}
// A JSR-181 processor is REQUIRED to report an error if an
- // operation marked @Oneway has a return value, declares any checked exceptions or has any
+ // operation marked @Oneway has a return value, declares any checked
+ // exceptions or has any
// INOUT or OUT parameters.
private void assertOneWayOperation()
{
Modified: branches/tdiesler/trunk/src/test/build.xml
===================================================================
--- branches/tdiesler/trunk/src/test/build.xml 2006-09-18 13:55:47 UTC (rev 975)
+++ branches/tdiesler/trunk/src/test/build.xml 2006-09-18 13:56:04 UTC (rev 976)
@@ -405,7 +405,7 @@
-->
<target name="one-test" depends="init" if="test" description="Run a single unit test">
<junit printsummary="yes" showoutput="yes" dir="${build.test.dir}">
- <!-- jvmarg line="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5006"/ -->
+ <jvmarg line="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5006"/>
<jvmarg value="-Djava.security.manager"/>
<sysproperty key="java.security.policy" value="${test.etc.dir}/tst.policy"/>
<sysproperty key="jboss.home" value="${jboss.home}"/>
Modified: branches/tdiesler/trunk/src/test/java/org/jboss/test/ws/jaxws/asynchronous/AsynchronousProxyTestCase.java
===================================================================
--- branches/tdiesler/trunk/src/test/java/org/jboss/test/ws/jaxws/asynchronous/AsynchronousProxyTestCase.java 2006-09-18 13:55:47 UTC (rev 975)
+++ branches/tdiesler/trunk/src/test/java/org/jboss/test/ws/jaxws/asynchronous/AsynchronousProxyTestCase.java 2006-09-18 13:56:04 UTC (rev 976)
@@ -21,28 +21,20 @@
*/
package org.jboss.test.ws.jaxws.asynchronous;
-// $Id: $
+// $Id$
-import java.io.StringReader;
import java.net.MalformedURLException;
import java.net.URL;
-import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import javax.xml.namespace.QName;
-import javax.xml.transform.stream.StreamSource;
-import javax.xml.ws.AsyncHandler;
-import javax.xml.ws.Dispatch;
import javax.xml.ws.Response;
import javax.xml.ws.Service;
-import javax.xml.ws.Service.Mode;
import junit.framework.Test;
import org.jboss.test.ws.JBossWSTest;
import org.jboss.test.ws.JBossWSTestSetup;
-import org.jboss.ws.utils.DOMUtils;
-import org.xml.sax.InputSource;
/**
* Test JAXWS asynchrous proxy
@@ -61,24 +53,23 @@
return JBossWSTestSetup.newTestSetup(AsynchronousProxyTestCase.class, "jaxws-asynchronous.war");
}
- public void testInvokeSynch() throws Exception
+ public void _testInvokeSync() throws Exception
{
TestEndpoint port = createProxy();
String retStr = port.echo("Hello");
assertEquals("Hello", retStr);
}
-/*
- public void testInvokeAsynch() throws Exception
+ public void testInvokeAsync() throws Exception
{
- StreamSource reqObj = new StreamSource(new StringReader(reqPayload));
- Response response = createDispatch().invokeAsync(reqObj);
- StreamSource result = (StreamSource)response.get(1000, TimeUnit.MILLISECONDS);
- InputSource inputSource = new InputSource(result.getReader());
- assertEquals(DOMUtils.parse(expPayload), DOMUtils.parse(inputSource));
+ TestEndpoint port = createProxy();
+ Response response = port.echoAsync("Hello");
+ String retStr = (String) response.get(1000, TimeUnit.MILLISECONDS);
+ assertEquals("Hello", retStr);
}
- public void testInvokeAsynchHandler() throws Exception
+ /*
+ public void testInvokeAsyncHandler() throws Exception
{
AsyncHandler handler = new AsyncHandler()
{
@@ -106,7 +97,8 @@
assertTrue("Async handler called", asyncHandlerCalled);
}
-*/
+ */
+
private TestEndpoint createProxy() throws MalformedURLException
{
URL wsdlURL = new URL("http://" + getServerHost() + ":8080/jaxws-asynchronous?wsdl");
More information about the jboss-svn-commits
mailing list