[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