Author: mmerz
Date: Fri Jan  7 10:19:16 2005
New Revision: 124555

URL: http://svn.apache.org/viewcvs?view=rev&rev=124555
Log:
- First cut at compile time validation. Now, apt produces errors immediately at 
compile time for invalid .jws files. Note that endpoint interfaces are expected 
to have .java extensions; implementation beans are expected to have .jws 
extensions.
- Fixes for several 181 compliance bugs through serialization of the object 
model. Needs more tests and verifications.
- More drt reorgs.


Added:
   
incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/processor/reflection/WsmAnnotationProcessorEndpointInterface2Test.javax
      - copied, changed from r124172, 
incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/processor/reflection/WsmAnnotationProcessorEndpointInterface2Test.java
   incubator/beehive/trunk/wsm/drt/webapp/WEB-INF/src/web/Bar.jwsx
      - copied unchanged from r124549, 
incubator/beehive/trunk/wsm/drt/webapp/WEB-INF/src/web/Bar2.jws
Removed:
   incubator/beehive/trunk/wsm/drt/tests/AddressBookWSDL.xml
   incubator/beehive/trunk/wsm/drt/tests/FooWSDL.xml
   
incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/processor/reflection/WsmAnnotationProcessorEndpointInterface2Test.java
   incubator/beehive/trunk/wsm/drt/webapp/WEB-INF/src/web/Bar2.jws
Modified:
   incubator/beehive/trunk/wsm/drt/build.xml
   
incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/processor/apt/WsmAnnotationProcessorEndpointInterfaceTest.java
   
incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/processor/apt/WsmAnnotationProcessorTest.java
   
incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/processor/reflection/WsmAnnotationProcessorEndpointInterface3Test.java
   
incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/processor/reflection/WsmAnnotationProcessorEndpointInterfaceTest.java
   
incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/processor/reflection/WsmAnnotationProcessorTest.java
   
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/AnnotationMetadata.java
   
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/InitParamInfo.java
   
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/Jsr181MethodMetadataImpl.java
   
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/Jsr181ParameterMetadataImpl.java
   
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/Jsr181TypeMetadata.java
   
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/Jsr181TypeMetadataImpl.java
   
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/SOAPBindingInfo.java
   
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/SOAPMessageHandlerInfo.java
   
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/SecurityRolesInfo.java
   
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/processor/apt/WsmAnnotationProcessor.java
   
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/processor/apt/WsmAnnotationProcessorFactory.java
   
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/util/bytecode/ClassReader.java
   
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/util/bytecode/ParamNameExtractor.java
   
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/util/bytecode/ParamReader.java

Modified: incubator/beehive/trunk/wsm/drt/build.xml
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/wsm/drt/build.xml?view=diff&rev=124555&p1=incubator/beehive/trunk/wsm/drt/build.xml&r1=124554&p2=incubator/beehive/trunk/wsm/drt/build.xml&r2=124555
==============================================================================
--- incubator/beehive/trunk/wsm/drt/build.xml   (original)
+++ incubator/beehive/trunk/wsm/drt/build.xml   Fri Jan  7 10:19:16 2005
@@ -75,9 +75,9 @@
         <echo message="--------------------------------------------------"/>
     </target>
     
-    <target name="build" depends="dirs,build.tests,build.webapp"/>
+    <target name="build" depends="dirs, build.webapp, build.tests"/>
     
-    <target name="clean" depends="clean.tests,clean.webapp" />
+    <target name="clean" depends="clean.tests, clean.webapp" />
     
     <target name="dirs">
         <mkdir dir="${build.classes}"/>
@@ -86,7 +86,7 @@
         <mkdir dir="${drt.logs}"/>
     </target>
     
-    <target name="build.tests" depends="dirs,xbean">
+    <target name="build.tests" depends="dirs, xbean, build.webapp">
         <!-- Build the test source directory -->
         <javac srcdir="${tests.src}"
             destdir="${build.tests}"
@@ -162,23 +162,5 @@
         </junit>
         <fail if="wsmdrtfailed" message="One or more tests in the WSM DRT 
failed." />
     </target>
-    
-<!-- OBSOLETED - WILL BE REMOVED       
-   <target name="single-test" depends="build">
-        <junit failureproperty="wsmdrtfailed" printsummary="on" fork="yes">
-            <classpath>
-                <pathelement location="${build.tests}"/>
-                <path refid="drt.classpath"/>
-            </classpath>
-            <formatter type="plain"/>
-            <batchtest filtertrace="off" todir="${drt.logs}">
-                <fileset dir="tests">
-                    <include name="**/${testclass}.java"/>
-                    < -Dtestclass=xxxxx  must be set in the command line >
-                </fileset>
-            </batchtest>
-        </junit>
-        <fail if="wsmdrtfailed" message="One or more tests in the WSM DRT 
failed." />
-    </target>
--->
+
 </project>

Deleted: /incubator/beehive/trunk/wsm/drt/tests/AddressBookWSDL.xml
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/wsm/drt/tests/AddressBookWSDL.xml?view=auto&rev=124554
==============================================================================

Deleted: /incubator/beehive/trunk/wsm/drt/tests/FooWSDL.xml
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/wsm/drt/tests/FooWSDL.xml?view=auto&rev=124554
==============================================================================

Modified: 
incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/processor/apt/WsmAnnotationProcessorEndpointInterfaceTest.java
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/processor/apt/WsmAnnotationProcessorEndpointInterfaceTest.java?view=diff&rev=124555&p1=incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/processor/apt/WsmAnnotationProcessorEndpointInterfaceTest.java&r1=124554&p2=incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/processor/apt/WsmAnnotationProcessorEndpointInterfaceTest.java&r2=124555
==============================================================================
--- 
incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/processor/apt/WsmAnnotationProcessorEndpointInterfaceTest.java
  (original)
+++ 
incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/processor/apt/WsmAnnotationProcessorEndpointInterfaceTest.java
  Fri Jan  7 10:19:16 2005
@@ -19,9 +19,11 @@
  */
 
 import com.sun.tools.apt.Main;
+
 import org.apache.beehive.wsm.jsr181.model.BarTestCase;
+import org.apache.beehive.wsm.jsr181.model.Jsr181TypeMetadataImpl;
 import org.apache.beehive.wsm.jsr181.model.Jsr181ParameterMetadata;
-import 
org.apache.beehive.wsm.jsr181.processor.reflection.WsmReflectionAnnotationProcessor;
+//import 
org.apache.beehive.wsm.jsr181.processor.reflection.WsmReflectionAnnotationProcessor;
 
 /**
  * Test case verifies that a source file can be read and its annotations can be
@@ -33,7 +35,7 @@
     public void setUp() throws Exception {
 
         // check if we have an object model
-        objectModel = 
WsmReflectionAnnotationProcessor.getInstance().getObjectModel(Class.forName(CLASSNAME));
+        objectModel = Jsr181TypeMetadataImpl.load(Class.forName(CLASSNAME));
         if (null == objectModel) {
             throw new Exception ("No object model found.");
         }
@@ -47,7 +49,6 @@
     /**
      * We can't derive default values for WebParam from binaries. Thus, we use
      * our own default name "in<number>".
-     */
     @Override
     public void testWebParamGoLocoFirst() throws Exception {
         final int paramNo = 0;
@@ -58,11 +59,11 @@
                 int.class,
                 param.getJavaType());
     }
+     */
 
     /**
      * We can't derive default values for WebParam from binaries. Thus, we use
      * our own default name "in<number>".
-     */
     @Override
     public void testWebParamDropMoneyFirst() throws Exception {
         final int paramNo = 0;
@@ -73,5 +74,5 @@
                 int.class,
                 param.getJavaType());
     }
-}
-
+     */
+}
\ No newline at end of file

Modified: 
incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/processor/apt/WsmAnnotationProcessorTest.java
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/processor/apt/WsmAnnotationProcessorTest.java?view=diff&rev=124555&p1=incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/processor/apt/WsmAnnotationProcessorTest.java&r1=124554&p2=incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/processor/apt/WsmAnnotationProcessorTest.java&r2=124555
==============================================================================
--- 
incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/processor/apt/WsmAnnotationProcessorTest.java
   (original)
+++ 
incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/processor/apt/WsmAnnotationProcessorTest.java
   Fri Jan  7 10:19:16 2005
@@ -20,8 +20,9 @@
 
 import com.sun.tools.apt.Main;
 import org.apache.beehive.wsm.jsr181.model.FooTestCase;
+import org.apache.beehive.wsm.jsr181.model.Jsr181TypeMetadataImpl;
 import org.apache.beehive.wsm.jsr181.model.Jsr181ParameterMetadata;
-import 
org.apache.beehive.wsm.jsr181.processor.reflection.WsmReflectionAnnotationProcessor;
+//import 
org.apache.beehive.wsm.jsr181.processor.reflection.WsmReflectionAnnotationProcessor;
 
 /**
  * Test case verifies that a source file can be read and its annotations can be
@@ -33,7 +34,7 @@
     public void setUp() throws Exception {
 
         // check if we have an object model
-        objectModel = 
WsmReflectionAnnotationProcessor.getInstance().getObjectModel(Class.forName(CLASSNAME));
+        objectModel = Jsr181TypeMetadataImpl.load(Class.forName(CLASSNAME));
 
         if (null == objectModel) {
             throw new Exception ("No object model found.");

Deleted: 
/incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/processor/reflection/WsmAnnotationProcessorEndpointInterface2Test.java
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/processor/reflection/WsmAnnotationProcessorEndpointInterface2Test.java?view=auto&rev=124554
==============================================================================

Copied: 
incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/processor/reflection/WsmAnnotationProcessorEndpointInterface2Test.javax
 (from r124172, 
incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/processor/reflection/WsmAnnotationProcessorEndpointInterface2Test.java)
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/processor/reflection/WsmAnnotationProcessorEndpointInterface2Test.javax?view=diff&rev=124555&p1=incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/processor/reflection/WsmAnnotationProcessorEndpointInterface2Test.java&r1=124172&p2=incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/processor/reflection/WsmAnnotationProcessorEndpointInterface2Test.javax&r2=124555
==============================================================================
--- 
incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/processor/reflection/WsmAnnotationProcessorEndpointInterface2Test.java
  (original)
+++ 
incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/processor/reflection/WsmAnnotationProcessorEndpointInterface2Test.javax
 Fri Jan  7 10:19:16 2005
@@ -19,6 +19,7 @@
  */
 
 import org.apache.beehive.wsm.jsr181.model.Bar2TestCase;
+import org.apache.beehive.wsm.jsr181.model.Jsr181TypeMetadataImpl;
 
 public class WsmAnnotationProcessorEndpointInterface2Test extends Bar2TestCase 
{
     @Override
@@ -34,8 +35,7 @@
     public void testConsistency() throws Exception {
         Class clazz = Class.forName(CLASSNAME);
         try {
-            objectModel = 
WsmReflectionAnnotationProcessor.getInstance().getObjectModel(clazz);
-            objectModel.validate();
+            objectModel = Jsr181TypeMetadataImpl.load(clazz);
             fail("Failed to generate error for the service implementation 
which doesn't implement the methods declared "
                     + "in the corresponding endpoint interface.");
         } catch (Exception e) {

Modified: 
incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/processor/reflection/WsmAnnotationProcessorEndpointInterface3Test.java
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/processor/reflection/WsmAnnotationProcessorEndpointInterface3Test.java?view=diff&rev=124555&p1=incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/processor/reflection/WsmAnnotationProcessorEndpointInterface3Test.java&r1=124554&p2=incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/processor/reflection/WsmAnnotationProcessorEndpointInterface3Test.java&r2=124555
==============================================================================
--- 
incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/processor/reflection/WsmAnnotationProcessorEndpointInterface3Test.java
  (original)
+++ 
incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/processor/reflection/WsmAnnotationProcessorEndpointInterface3Test.java
  Fri Jan  7 10:19:16 2005
@@ -19,6 +19,7 @@
  */
 
 import org.apache.beehive.wsm.jsr181.model.Bar3TestCase;
+import org.apache.beehive.wsm.jsr181.model.Jsr181TypeMetadataImpl;
 
 public class WsmAnnotationProcessorEndpointInterface3Test extends Bar3TestCase 
{
 
@@ -35,7 +36,7 @@
     public void testConsistency() throws Exception {
         Class clazz = Class.forName(CLASSNAME);
         try {
-            objectModel = 
WsmReflectionAnnotationProcessor.getInstance().getObjectModel(clazz);
+            objectModel = Jsr181TypeMetadataImpl.load(clazz);
         } catch (Exception e) {
             fail("The processor must not throw an exception.");
         }

Modified: 
incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/processor/reflection/WsmAnnotationProcessorEndpointInterfaceTest.java
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/processor/reflection/WsmAnnotationProcessorEndpointInterfaceTest.java?view=diff&rev=124555&p1=incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/processor/reflection/WsmAnnotationProcessorEndpointInterfaceTest.java&r1=124554&p2=incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/processor/reflection/WsmAnnotationProcessorEndpointInterfaceTest.java&r2=124555
==============================================================================
--- 
incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/processor/reflection/WsmAnnotationProcessorEndpointInterfaceTest.java
   (original)
+++ 
incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/processor/reflection/WsmAnnotationProcessorEndpointInterfaceTest.java
   Fri Jan  7 10:19:16 2005
@@ -19,9 +19,7 @@
  */
 
 import org.apache.beehive.wsm.jsr181.model.BarTestCase;
-import org.apache.beehive.wsm.jsr181.model.Jsr181ParameterMetadata;
-import org.apache.beehive.wsm.jsr181.model.Jsr181TypeMetadata;
-import org.apache.beehive.wsm.jsr181.processor.apt.WebServiceMetadataViewer;
+import org.apache.beehive.wsm.jsr181.model.Jsr181TypeMetadataImpl;
 
 /**
  * Test case verifies that a class file can be read and its annotations can be
@@ -32,43 +30,11 @@
 
     @Override
     public void setUp() throws Exception {
-        Class clazz = Class.forName(CLASSNAME);
-        objectModel = 
WsmReflectionAnnotationProcessor.getInstance().getObjectModel(clazz);
-        WebServiceMetadataViewer.print((Jsr181TypeMetadata) objectModel);
+        objectModel = Jsr181TypeMetadataImpl.load(Class.forName(CLASSNAME));
     }
 
     @Override
     public void tearDown() throws Exception {
         // empty
-    }
-
-    /**
-     * We can't derive default values for WebParam from binaries. Thus, we use
-     * our own default name "in<number>".
-     */
-    @Override
-    public void testWebParamGoLocoFirst() throws Exception {
-        final int paramNo = 0;
-        Jsr181ParameterMetadata param = getParam("GoLocoCheetorama", paramNo);
-        assertNotNull("Cannot find first param for WebMethod 
GoLocoCheetorama()", param);
-        assertEquals("Invalid wpName", "in" + paramNo, param.getWpName());
-        assertEquals("Invalid return type: " + param.getJavaType(),
-                int.class,
-                param.getJavaType());
-    }
-
-    /**
-     * We can't derive default values for WebParam from binaries. Thus, we use
-     * our own default name "in<number>".
-     */
-    @Override
-    public void testWebParamDropMoneyFirst() throws Exception {
-        final int paramNo = 0;
-        Jsr181ParameterMetadata param = getParam("dropMoney", paramNo);
-        assertNotNull("Cannot find first param for WebMethod dropMoeny()", 
param);
-        assertEquals("Invalid wpName", "in" + paramNo, param.getWpName());
-        assertEquals("Invalid return type: " + param.getJavaType(),
-                int.class,
-                param.getJavaType());
     }
 }

Modified: 
incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/processor/reflection/WsmAnnotationProcessorTest.java
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/processor/reflection/WsmAnnotationProcessorTest.java?view=diff&rev=124555&p1=incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/processor/reflection/WsmAnnotationProcessorTest.java&r1=124554&p2=incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/processor/reflection/WsmAnnotationProcessorTest.java&r2=124555
==============================================================================
--- 
incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/processor/reflection/WsmAnnotationProcessorTest.java
    (original)
+++ 
incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/processor/reflection/WsmAnnotationProcessorTest.java
    Fri Jan  7 10:19:16 2005
@@ -19,7 +19,7 @@
  */
 
 import org.apache.beehive.wsm.jsr181.model.FooTestCase;
-import org.apache.beehive.wsm.jsr181.model.Jsr181ParameterMetadata;
+import org.apache.beehive.wsm.jsr181.model.Jsr181TypeMetadataImpl;
 
 /**
  * Test case verifies that a class file can be read and its annotations can be
@@ -30,28 +30,12 @@
 
     @Override
     public void setUp() throws Exception {
-        Class clazz = Class.forName(CLASSNAME);
-        objectModel = 
WsmReflectionAnnotationProcessor.getInstance().getObjectModel(clazz);
+        objectModel = Jsr181TypeMetadataImpl.load(Class.forName(CLASSNAME));
     }
 
     @Override
     public void tearDown() throws Exception {
         // empty
     }
-
-    /**
-     * We can't derive default values for WebParam from binaries. Thus, we use
-     * our own default name "in<number>".
-    @Override
-    public void testWebParamGoLocoFirst() throws Exception {
-        final int paramNo = 0;
-        Jsr181ParameterMetadata param = getParam("GoLoco", paramNo);
-        assertNotNull("Cannot find first param for WebMethod GoLoco()", param);
-        assertEquals("Invalid wpName", "in" + paramNo, param.getWpName());
-        assertEquals("Invalid return type: " + param.getJavaType(),
-                int.class,
-                param.getJavaType());
-    }
-     */
 }
 

Copied: incubator/beehive/trunk/wsm/drt/webapp/WEB-INF/src/web/Bar.jwsx (from 
r124549, incubator/beehive/trunk/wsm/drt/webapp/WEB-INF/src/web/Bar2.jws)
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/wsm/drt/webapp/WEB-INF/src/web/Bar.jwsx?view=diff&rev=124555&p1=incubator/beehive/trunk/wsm/drt/webapp/WEB-INF/src/web/Bar2.jws&r1=124549&p2=incubator/beehive/trunk/wsm/drt/webapp/WEB-INF/src/web/Bar.jwsx&r2=124555
==============================================================================

Deleted: /incubator/beehive/trunk/wsm/drt/webapp/WEB-INF/src/web/Bar2.jws
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/wsm/drt/webapp/WEB-INF/src/web/Bar2.jws?view=auto&rev=124554
==============================================================================

Modified: 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/AnnotationMetadata.java
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/AnnotationMetadata.java?view=diff&rev=124555&p1=incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/AnnotationMetadata.java&r1=124554&p2=incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/AnnotationMetadata.java&r2=124555
==============================================================================
--- 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/AnnotationMetadata.java
 (original)
+++ 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/AnnotationMetadata.java
 Fri Jan  7 10:19:16 2005
@@ -18,6 +18,8 @@
  * $Header:$Factory
  */
 
+import java.io.Serializable;
+
 /**
  * @author Daryoush
  *

Modified: 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/InitParamInfo.java
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/InitParamInfo.java?view=diff&rev=124555&p1=incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/InitParamInfo.java&r1=124554&p2=incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/InitParamInfo.java&r2=124555
==============================================================================
--- 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/InitParamInfo.java
      (original)
+++ 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/InitParamInfo.java
      Fri Jan  7 10:19:16 2005
@@ -20,7 +20,7 @@
  * $Header:$
  */
 
-public class InitParamInfo {
+public class InitParamInfo implements java.io.Serializable {
 
     String name;
 

Modified: 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/Jsr181MethodMetadataImpl.java
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/Jsr181MethodMetadataImpl.java?view=diff&rev=124555&p1=incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/Jsr181MethodMetadataImpl.java&r1=124554&p2=incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/Jsr181MethodMetadataImpl.java&r2=124555
==============================================================================
--- 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/Jsr181MethodMetadataImpl.java
   (original)
+++ 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/Jsr181MethodMetadataImpl.java
   Fri Jan  7 10:19:16 2005
@@ -30,7 +30,7 @@
 import javax.jws.WebResult;
 import javax.jws.security.SecurityRoles;
 
-public class Jsr181MethodMetadataImpl implements Jsr181MethodMetadata {
+public class Jsr181MethodMetadataImpl implements Jsr181MethodMetadata, 
java.io.Serializable {
     private String wmOperationName;
     private String wmAction;
     private boolean oneway = false;
@@ -237,5 +237,68 @@
 
     public Class getJavaReturnType() {
         return javaReturnType;
+    }
+
+    public String getSignature() {
+        StringBuilder sb = new StringBuilder(getJavaMethodName());
+        sb.append('(');
+        boolean firstParam = true;
+        if (null != params) {
+            for (Jsr181ParameterMetadata p : params) {
+                if (firstParam) {
+                    firstParam = false;
+                }
+                else {
+                    sb.append(',');
+                }
+                sb.append(p.getJavaType());
+            }
+        }
+        sb.append(')');
+        return sb.toString();
+    }
+
+
+    
+    public String toString() {
+        return getSignature();
+/*
+        String signature = getJavaReturnType().toString() + " " + 
getJavaMethodName() + "( ";
+        for (Jsr181ParameterMetadata p : params) {
+            signature += p.getJavaType().toString() + " ";
+        }
+        return signature + ")";
+ */
+    }
+    
+    public boolean equals(Object o) {
+        if (! (o instanceof Jsr181MethodMetadataImpl)) {
+            return false;
+        }
+        Jsr181MethodMetadataImpl m = (Jsr181MethodMetadataImpl) o;
+
+        // check name
+        if (! getJavaMethodName().equals(m.getJavaMethodName())) {
+            return false;
+        }
+        
+        // check return type
+        if (! getJavaReturnType().equals(m.getJavaReturnType())) {
+            return false;
+        }
+        
+        // check all parameters (types, not names!)
+        if (params.size() != m.params.size()) {
+            return false;
+        }
+        for (int i = 0; i < params.size(); i++) {
+            if (! 
m.params.get(i).getJavaType().equals(params.get(i).getJavaType())) {
+                return false;
+            }
+        }
+
+        // check exceptions?
+        
+        return true;
     }
 }

Modified: 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/Jsr181ParameterMetadataImpl.java
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/Jsr181ParameterMetadataImpl.java?view=diff&rev=124555&p1=incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/Jsr181ParameterMetadataImpl.java&r1=124554&p2=incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/Jsr181ParameterMetadataImpl.java&r2=124555
==============================================================================
--- 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/Jsr181ParameterMetadataImpl.java
        (original)
+++ 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/Jsr181ParameterMetadataImpl.java
        Fri Jan  7 10:19:16 2005
@@ -23,7 +23,7 @@
 
 import javax.jws.WebParam;
 
-public class Jsr181ParameterMetadataImpl  implements Jsr181ParameterMetadata {
+public class Jsr181ParameterMetadataImpl  implements Jsr181ParameterMetadata, 
java.io.Serializable {
     private String wpName;
     private String wpTargetNamespace;
     private WebParam.Mode wpMode;

Modified: 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/Jsr181TypeMetadata.java
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/Jsr181TypeMetadata.java?view=diff&rev=124555&p1=incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/Jsr181TypeMetadata.java&r1=124554&p2=incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/Jsr181TypeMetadata.java&r2=124555
==============================================================================
--- 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/Jsr181TypeMetadata.java
 (original)
+++ 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/Jsr181TypeMetadata.java
 Fri Jan  7 10:19:16 2005
@@ -94,4 +94,6 @@
     String getServiceImplementationBean();
     
     String getServiceEndpointInterface();
+    
+    void merge(Jsr181TypeMetadata objectModel) throws Exception;
 }

Modified: 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/Jsr181TypeMetadataImpl.java
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/Jsr181TypeMetadataImpl.java?view=diff&rev=124555&p1=incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/Jsr181TypeMetadataImpl.java&r1=124554&p2=incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/Jsr181TypeMetadataImpl.java&r2=124555
==============================================================================
--- 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/Jsr181TypeMetadataImpl.java
     (original)
+++ 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/Jsr181TypeMetadataImpl.java
     Fri Jan  7 10:19:16 2005
@@ -19,6 +19,11 @@
  */
 
 import java.io.IOException;
+import java.io.InputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.OutputStream;
+
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Method;
 import java.lang.reflect.Type;
@@ -51,7 +56,7 @@
 import org.w3c.dom.NodeList;
 import org.xmlsoap.schemas.wsdl.DefinitionsDocument;
 
-public class Jsr181TypeMetadataImpl implements Jsr181TypeMetadata  {
+public class Jsr181TypeMetadataImpl implements Jsr181TypeMetadata, 
java.io.Serializable {
     private String wsName;
     private String wsServiceName;
     private String wsWsdlLocation;
@@ -130,8 +135,8 @@
         // initilize instance
         WebService seiWsAnnotation = null;
         if (0 < seiClassName.length()) {
-            seiWsAnnotation = (WebService)
-                    AnnotationModel.getAnnotationOfType(annotations, 
WebService.class);
+            seiWsAnnotation =
+                (WebService) AnnotationModel.getAnnotationOfType(annotations, 
WebService.class);
         }
         initFromAnnotation(sibWsAnnotation, seiWsAnnotation);
 
@@ -160,11 +165,17 @@
             // @SOAPMessageHandlers
             else if (a.annotationType() == 
javax.jws.soap.SOAPMessageHandlers.class) {
                 initFromAnnotation((javax.jws.soap.SOAPMessageHandlers) a);
-            } else {
-                // TODO: What to do with annotations that are not specified in
-                // 181? For now ignore them. Later: delegation model?
-                
-                // todo: note that @WebService is "handled" in here, too
+            }
+
+            // @WebService
+            else if (a.annotationType() == javax.jws.WebService.class) {
+                // ignore -- already done (see above)
+                // todo: why can't we do this here?
+            }
+            
+            // Unknown annotation
+            else {
+                throw new Exception("Invalid annotation: " + 
a.annotationType().getName());
             }
         }
         
@@ -376,6 +387,9 @@
         }
     }
 
+    /**
+     * @param handlerNode
+     */
     private void processHandlerNode(Node handlerNode) {
         if (handlerNode.hasChildNodes()) {
             String handlerName = null;
@@ -388,89 +402,92 @@
                 String nodeName = currentChild.getNodeName();
                 if ("handler-name".equals(nodeName)) {
                     handlerName = currentChild.getFirstChild().getNodeValue();
-                } else if ("handler-class".equals(nodeName)) {
-                    handlerClassName = currentChild
-                            .getFirstChild().getNodeValue();
-                } else if ("soap-role".equals(nodeName)) {
-                    roles.add(currentChild
-                            .getFirstChild().getNodeValue());
-                } else if ("soap-header".equals(nodeName)) {
+                }
+                else if ("handler-class".equals(nodeName)) {
+                    handlerClassName = 
currentChild.getFirstChild().getNodeValue();
+                }
+                else if ("soap-role".equals(nodeName)) {
+                    roles.add(currentChild.getFirstChild().getNodeValue());
+                }
+                else if ("soap-header".equals(nodeName)) {
                     headers.add(currentChild.getFirstChild().getNodeValue());
-                } else if ("init-param".equals(nodeName)) {
+                }
+                else if ("init-param".equals(nodeName)) {
                     nodeName = currentChild.getFirstChild().getNodeName();
                     if ("param-name".equals(nodeName)) {
-                        initParams
-                                
.put(currentChild.getFirstChild().getNodeValue(),
-                                        
currentChild.getLastChild().getNodeValue());
-                    } else {
-                        initParams
-                                
.put(currentChild.getLastChild().getNodeValue(),
-                                        
currentChild.getFirstChild().getNodeValue());
+                        initParams.put(
+                            currentChild.getFirstChild().getNodeValue(),
+                            currentChild.getLastChild().getNodeValue());
+                    }
+                    else {
+                        initParams.put(
+                            currentChild.getLastChild().getNodeValue(),
+                            currentChild.getFirstChild().getNodeValue()
+                        );
                     }
                 }
                 currentChild = currentChild.getNextSibling();
             }
-            addSOAPHandler(new SOAPMessageHandlerInfo(handlerClassName,
+            addSOAPHandler(new SOAPMessageHandlerInfo(
+                    handlerClassName,
                     handlerName,
                     initParams,
                     roles,
                     headers));
         }
     }
+    
+    public void validate() {
+        // empty
+    }
 
     /**
-     * Checks whether the implementation bean implements all the methods
-     * specified by the endpoint interface.
-     *
+     * Validate this (concrete) object model against contract (service endpoint
+     * interface):
+     *   - If a service endpoint interface is referred, check if all declared
+     *     methods are implemented by implementation bean
+     * 
+     * Note that this can only be called for concrete object models!
      * @throws ValidationException
-     */
+     *
+     * todo: store conrete object model in instance
     public void validate() throws ValidationException {
+        // check if we have a service endpoint interface
+        String endpointInterface = getServiceEndpointInterface().trim();
+        if (null == endpointInterface && 0 >= endpointInterface.length()) {
+            return;
+        }
 
-        // note: load class here -- we might want to create the object model 
without a sib class file (from source)
-
+        // load abstract object model
+        Jsr181TypeMetadataImpl aom = null;
         try {
-
-            // load and verify service implementation bean
-            Class sibClass = Class.forName(sibClassName);
-            if (sibClass.isInterface()) {
-                throw new ValidationException(
-                    "The service implementation bean (" +
-                    sibClassName +
-                    " ) cannot be an interface."
-                );
-            }
-
-            // load and verify service endpoint interface -- if we have one
-            if (0 < seiClassName.length()) {
-                Class seiClass = Class.forName(seiClassName);
-                for (Method m : seiClass.getMethods()) {
-                    if (! doesImplement(sibClass, m)) {
-                        throw new ValidationException(
-                            "The implementation bean doesn't implement " +
-                            m +
-                            " as required by the interface: " +
-                            getServiceImplementationBean()
-                        );
-                    }
-                }
-            }
+            aom = (Jsr181TypeMetadataImpl) load(endpointInterface);
+        }
+        catch (IOException e) {
+            throw new ValidationException("Cannot load abstract object model: 
" + endpointInterface);
         }
         catch (ClassNotFoundException e) {
-            throw new ValidationException(
-                "service implementation bean (" + sibClassName + ") " +
-                "or service endpoint interface (" + seiClassName + ") " +
-                "not on classpath"
-            );
+            throw new ValidationException("Cannot load abstract object model: 
" + endpointInterface);
+        }
+        if (null == aom) {
+            throw new ValidationException("Cannot load abstract object model: 
" + endpointInterface);
         }
 
-        /*
-         * NOTE [EMAIL PROTECTED] 2004-Nov-29 -- removed the call to 
-         * validateDuplicatedMethods since the new map based technique
-         * should prevent duplicates.  Delete validateDuplicatedMethods if
-         * all works well and it doesn't mess up anything Wolfgang was 
-         * dependent on.
-         */
+        // check if all methods declared in the contract are implemented
+        for (Jsr181MethodMetadata aomMethod : aom.getMethods()) {
+            boolean foundImplementation = false;
+            for (Jsr181MethodMetadata myMethod : methodMap.values()) {
+                if (myMethod.equals(aomMethod)) {
+                    foundImplementation = true;
+                    break;
+                }
+            }
+            if (! foundImplementation) {
+                throw new ValidationException("Method not implemented by " + 
wsServiceName + ": " + aomMethod);
+            }
+        }
     }
+     */
 
     /**
      * Verifies duplicated methods in object model.
@@ -501,7 +518,6 @@
      *
      *
      *       Need better name of this method ...
-     */
     private void validateDuplicatedMethods () throws ValidationException
     {
         Jsr181MethodMetadata[] methods = getMethods().toArray(new 
Jsr181MethodMetadata[]{});
@@ -543,6 +559,7 @@
             }
         }
     }
+     */
 
     /**
      * Checks the specified two methods has same paramater types.
@@ -550,7 +567,6 @@
      * @param m1
      * @param m2
      * @return boolean
-     */
     private boolean hasSameParameterTypes ( Jsr181MethodMetadata m1, 
Jsr181MethodMetadata m2 )
     {
 
@@ -573,13 +589,13 @@
 
         return true;
     }
+     */
 
     /**
      * Compares the signature of specified methods.
      *
      * @param m
      * @return
-     */
     private boolean doesImplement(Class sibClass, Method m) {
         if (null == m) {
             return false;
@@ -620,6 +636,7 @@
         }
         return found;
     }
+     */
 
 
     public DefinitionsDocument getWSDLAsDocument()
@@ -884,6 +901,7 @@
         return "http://"; + targetNamespace;
     }
 
+    // NOTE: this needs to go, as it should really be in 
Jsr181MethodMetadataImpl!!!
     private String createCompleteMethodSignature(String name,
                                                  Class... paramTypes) {
 
@@ -903,5 +921,83 @@
         }
         sb.append(')');
         return sb.toString();
+    }
+
+    /**
+     * @param objectModel Object model for service implementation bean. Note:
+     *   only the @WebService.endpointInterface and @WebService.serviceName are
+     *   relevant.
+     * @throws Exception
+     */
+    public void merge(Jsr181TypeMetadata objectModel) throws Exception {
+        
+        // check if this has endpointInterface --> error
+        String myEndpointInterface = getWsEndpointInterface();
+        if (null != myEndpointInterface && 0 < myEndpointInterface.length())
+            throw new Exception("service endpoint interface can't reference 
another service endpoint interface: " + myEndpointInterface);
+        
+        // check if objectModel doesn't reference this endpointInterface --> 
error
+        String omEndpointInterface = objectModel.getWsEndpointInterface();
+        if (null == omEndpointInterface || 0 >= omEndpointInterface.length() 
|| ! omEndpointInterface.equals(getServiceImplementationBean()))
+            throw new Exception("Internal error: object model for " + 
objectModel.getServiceImplementationBean() + " does not reference endpoint 
interface "+ omEndpointInterface);
+        
+        setWsServiceName(objectModel.getWsServiceName());
+        setWsEndpointInterface(objectModel.getWsEndpointInterface());
+    }
+
+    /**
+     * @param clazz
+     */
+    public static Jsr181TypeMetadata load(Class clazz) throws IOException, 
ClassNotFoundException {
+        return load(clazz.getClassLoader().getResourceAsStream(clazz.getName() 
+ ".ser"));
+    }
+    
+    /**
+     * @param is
+     */
+    public static Jsr181TypeMetadata load(InputStream is) throws IOException, 
ClassNotFoundException {
+
+        Jsr181TypeMetadataImpl objectModel = null;
+        ObjectInputStream ois = null;
+
+        try {
+            if (null == is) {
+                throw new IOException("Cannot open input stream for object 
model");
+            }
+            ois = new ObjectInputStream(is);
+            objectModel = (Jsr181TypeMetadataImpl) ois.readObject();
+        }
+        finally {
+            if (null != ois) {
+                ois.close();
+            }
+        }
+
+        return objectModel;
+    }
+
+    /**
+     * @param os
+     * @param objectModel
+     */
+    public static void store(OutputStream os, AnnotationMetadata objectModel) 
throws IOException {
+        
+        ObjectOutputStream oos = null;
+        try {
+            if (null == os) {
+                throw new IOException("Cannot persist object model without 
output stream");
+            }
+            if (null == objectModel) {
+                throw new IOException("Cannot persist empty object model ");
+            }
+            oos = new ObjectOutputStream(os);
+            oos.writeObject(objectModel);
+        }
+        finally {
+            if (null != oos) {
+                oos.flush();
+                oos.close();
+            }
+        }
     }
 }

Modified: 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/SOAPBindingInfo.java
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/SOAPBindingInfo.java?view=diff&rev=124555&p1=incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/SOAPBindingInfo.java&r1=124554&p2=incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/SOAPBindingInfo.java&r2=124555
==============================================================================
--- 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/SOAPBindingInfo.java
    (original)
+++ 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/SOAPBindingInfo.java
    Fri Jan  7 10:19:16 2005
@@ -20,7 +20,7 @@
  * $Header:$
  */
 
-public class SOAPBindingInfo {
+public class SOAPBindingInfo implements java.io.Serializable {
     SOAPBinding.Style style = SOAPBinding.Style.DOCUMENT;
     SOAPBinding.Use use = SOAPBinding.Use.LITERAL;
     SOAPBinding.ParameterStyle parameterStyle = SOAPBinding

Modified: 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/SOAPMessageHandlerInfo.java
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/SOAPMessageHandlerInfo.java?view=diff&rev=124555&p1=incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/SOAPMessageHandlerInfo.java&r1=124554&p2=incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/SOAPMessageHandlerInfo.java&r2=124555
==============================================================================
--- 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/SOAPMessageHandlerInfo.java
     (original)
+++ 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/SOAPMessageHandlerInfo.java
     Fri Jan  7 10:19:16 2005
@@ -28,7 +28,7 @@
 import javax.jws.soap.InitParam;
 import javax.jws.soap.SOAPMessageHandler;
 
-public class SOAPMessageHandlerInfo {
+public class SOAPMessageHandlerInfo implements java.io.Serializable {
     String name;
     String className;
     HashMap<String, String> parameterMap = new HashMap<String, String>();

Modified: 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/SecurityRolesInfo.java
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/SecurityRolesInfo.java?view=diff&rev=124555&p1=incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/SecurityRolesInfo.java&r1=124554&p2=incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/SecurityRolesInfo.java&r2=124555
==============================================================================
--- 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/SecurityRolesInfo.java
  (original)
+++ 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/SecurityRolesInfo.java
  Fri Jan  7 10:19:16 2005
@@ -25,7 +25,7 @@
  * $Header:$
  */
 
-public class SecurityRolesInfo {
+public class SecurityRolesInfo implements java.io.Serializable {
 
     Collection<String> rolesAllowed = null;
 

Modified: 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/processor/apt/WsmAnnotationProcessor.java
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/processor/apt/WsmAnnotationProcessor.java?view=diff&rev=124555&p1=incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/processor/apt/WsmAnnotationProcessor.java&r1=124554&p2=incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/processor/apt/WsmAnnotationProcessor.java&r2=124555
==============================================================================
--- 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/processor/apt/WsmAnnotationProcessor.java
     (original)
+++ 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/processor/apt/WsmAnnotationProcessor.java
     Fri Jan  7 10:19:16 2005
@@ -18,15 +18,23 @@
  * $Header:$
  */
 
+import java.io.File;
+
 import java.lang.annotation.Annotation;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import javax.jws.WebMethod;
+import javax.jws.WebService;
 import com.sun.mirror.apt.AnnotationProcessorEnvironment;
+import com.sun.mirror.apt.Filer;
+import com.sun.mirror.apt.Messager;
+
 import com.sun.mirror.declaration.AnnotationMirror;
 import com.sun.mirror.declaration.AnnotationTypeDeclaration;
 import com.sun.mirror.declaration.ClassDeclaration;
@@ -35,130 +43,176 @@
 import com.sun.mirror.declaration.MethodDeclaration;
 import com.sun.mirror.declaration.ParameterDeclaration;
 import com.sun.mirror.declaration.TypeDeclaration;
+
 import com.sun.mirror.type.AnnotationType;
-import com.sun.org.apache.bcel.internal.generic.JsrInstruction;
+import java.io.IOException;
 
 import org.apache.beehive.wsm.jsr181.model.AnnotationMetadata;
-import org.apache.beehive.wsm.jsr181.model.AnnotationModel;
 import org.apache.beehive.wsm.jsr181.model.Jsr181MethodMetadata;
 import org.apache.beehive.wsm.jsr181.model.Jsr181MethodMetadataImpl;
 import org.apache.beehive.wsm.jsr181.model.Jsr181ParameterMetadata;
 import org.apache.beehive.wsm.jsr181.model.Jsr181ParameterMetadataImpl;
 import org.apache.beehive.wsm.jsr181.model.Jsr181TypeMetadata;
 import org.apache.beehive.wsm.jsr181.model.Jsr181TypeMetadataImpl;
-import org.apache.beehive.wsm.jsr181.processor.ProcessorException;
+
 
 /**
  * WsmAnnotationProcessor provides an API for IDEs and other applications to 
  * perform code validation.
- *
- * todo This class is currently disabled; the object model is solely built 
- *   through reflection.
+ * Currently, check() and generate() are not implemented. Since the
+ * WsmAnnotationProcessor does not generate any artifacts but class files,
+ * process() is equivalent with check() and generate() is void.
  */
 public class WsmAnnotationProcessor extends TwoPhaseAnnotationProcessor {
 
+    private Set<Declaration> handledDecls = new HashSet<Declaration>();
+    
     /**
      * Constructor.
      */
-    public WsmAnnotationProcessor(Set<AnnotationTypeDeclaration> _atds, 
AnnotationProcessorEnvironment _env) {
-        super(_atds, _env);
+    public WsmAnnotationProcessor(Set<AnnotationTypeDeclaration> atds, 
AnnotationProcessorEnvironment env) {
+        super (atds, env);
     }
 
     /**
+     * Checks whether a source file complies with JSR-181.
      * @see TwoPhaseAnnotationProcessor
+     * todo: should this always run all tests whenever called for any 
supported annotation?
+     * todo: store in object models created by endpoint interfaces in temp 
file only -- *delete* when apt is done
      */
-    @Override
-    public void check(Declaration decl) {
-        if (null != decl)
-        {
+    public void check(Declaration _decl) {
+
+        Messager messager = _env.getMessager();
+        
+        // check if we've already handled this declaration
+        if (handledDecls.contains(_decl)) {
             return;
         }
         
-        // check type of declaration
-        if (null == decl) {
-            throw new ProcessorException("Declaration type \"null\" not 
allowed");
-        }
-            
-        // check if we're interested
-        if (!(decl instanceof ClassDeclaration) && !(decl instanceof 
InterfaceDeclaration)) {
+        // check if we're interested in declaration
+        if (! (_decl instanceof TypeDeclaration)) {
             return;
         }
-
-        // verify @WebService annotation (being paranoid)
-        javax.jws.WebService ws = 
decl.getAnnotation(javax.jws.WebService.class);
-        if (null == ws) {
-            throw new ProcessorException("@WebService annotation missing in 
source file");
-        }
-
-        // service implementation bean
-        if (0 == ws.endpointInterface().length()) {
-            checkObjectModel((TypeDeclaration) decl, ws);
+        WebService wsAnnotation = _decl.getAnnotation(WebService.class);
+        if (null == wsAnnotation) {
+            messager.printWarning(_decl.getPosition(), "@WebService annotation 
missing");
+            return;
         }
         
-        // service endpoint interface
-        else {
-            try {
-                Class seiClass = Class.forName(ws.endpointInterface());
-/*
+        // store declaration so we don't handle it multiple times
+        handledDecls.add(_decl);
+        
+        try {
 
-                // todo this code is currently not used; it will be needed for 
the IDE milestone
- 
-                // todo proper error checking -- e.g. check if all interface 
methods are implemented in sib
-                if (null == 
WsmReflectionAnnotationProcessor.getInstance().getObjectModel(null, seiClass))
-                {
-                    throw new ProcessorException("Failed to create object 
model for class: " + seiClass.getName());
-                    // todo: proper error handling
+            // service implementation bean
+            if (_decl instanceof ClassDeclaration) {
+                ClassDeclaration classDecl = (ClassDeclaration) _decl;
+                messager.printNotice("processing service implementation bean: 
" + classDecl.getQualifiedName());
+                
+                Jsr181TypeMetadata om = null;
+                String endpointInterface = 
wsAnnotation.endpointInterface().trim();
+                
+                // start from endpoint interface
+                if (null != endpointInterface && 0 < 
endpointInterface.length()) {
+                    
+                    // get object model for service endpoint interface
+                    om = 
Jsr181TypeMetadataImpl.load(getClass().getClassLoader().getResourceAsStream(endpointInterface
 + ".ser"));
+                    if (null == om) {
+                        messager.printError(classDecl.getPosition(), "cannot 
find service endpoint interface: " + endpointInterface);
+                    }
+                    
+                    // merge abstract and concrete object models
+                    Jsr181TypeMetadata com = 
getWebServiceTYPEMetadata(classDecl, false);
+                    om.merge(com);
+                    
+                    // validate concrete object model against the contract 
(service endpoint interface)
+                    validate(om, classDecl);
                 }
-*/
-            } catch (ClassNotFoundException e) {
-                e.printStackTrace(); // todo: proper error handling
+                
+                // create object model from scratch
+                else {
+                    om = getWebServiceTYPEMetadata(classDecl, false);
+                }
+
+                // store the object model
+                
Jsr181TypeMetadataImpl.store(_env.getFiler().createBinaryFile(Filer.Location.CLASS_TREE,
 "", new File(classDecl.getQualifiedName() + ".ser")), om);
+            }
+            
+            // service endpoint interface
+            else if (_decl instanceof InterfaceDeclaration) {
+                InterfaceDeclaration interfaceDecl = (InterfaceDeclaration) 
_decl;
+                
+                messager.printNotice("processing service endpoint interface: " 
+ interfaceDecl.getQualifiedName());
+                
+                // create object model
+                Jsr181TypeMetadata om = 
getWebServiceTYPEMetadata(interfaceDecl, true);
+
+                // store the object model
+                
Jsr181TypeMetadataImpl.store(_env.getFiler().createBinaryFile(Filer.Location.CLASS_TREE,
 "", new File(interfaceDecl.getQualifiedName() + ".ser")), om);
+            }
+            
+            else {
+                messager.printError(_decl.getPosition(), "found unsupported 
type of TypeDeclaration:" + _decl.getSimpleName());
             }
         }
+        catch (Exception e) {
+            messager.printError(_decl.getPosition(), e.getMessage());
+e.printStackTrace();
+        }
     }
-
+    
     /**
      * @see TwoPhaseAnnotationProcessor
      */
-    @Override
-    public void generate(Declaration decl) {
-        // jws-class file is the only artifact to be generated, which is
-        // done automatically as part of apt
-        
-        return;
+    public void generate(Declaration _decl) {
+            
+        // persist all object models that have been created [by check()]
     }
 
-    /**
-     * Check object model for implementation beans.
-     *
-     * @param decl
-     * @param ws
-     * @return AnnotationModel
-     */
-    protected AnnotationMetadata checkObjectModel(TypeDeclaration decl, 
javax.jws.WebService ws) {
-        Collection<Jsr181MethodMetadata> webMethods =
-                new ArrayList<Jsr181MethodMetadata>();
+    protected Jsr181TypeMetadata getWebServiceTYPEMetadata(TypeDeclaration 
decl, boolean isServiceEndpointInterface) {
 
-        // publish methods @WebMethod annotations
-        for (MethodDeclaration methodDecl : decl.getMethods()) {
-            if (null != methodDecl.getAnnotation(javax.jws.WebMethod.class)) {
-                webMethods.add(getWebServiceMETHODMetadata(methodDecl));
+        Jsr181TypeMetadata objectModel = null;
+        
+        // get WebService annotation
+        WebService wsAnnotation = decl.getAnnotation(WebService.class);
+        if (null == wsAnnotation) {
+            return null;
+        }
+        
+        // webMethods
+        Collection<Jsr181MethodMetadata> webMethods =
+            new ArrayList<Jsr181MethodMetadata>();
+        Collection<Annotation> annotations = new ArrayList();
+        
+        // add all methods from service endpoint interface
+        if (isServiceEndpointInterface) {
+            for (MethodDeclaration mdecl : decl.getMethods()) {
+                webMethods.add(getWebServiceMETHODMetadata(mdecl));
             }
         }
-
-        // create & return webService
-        Jsr181TypeMetadata wstm = null;
+        // add only annotated methods
+        else {
+            for (MethodDeclaration mdecl : decl.getMethods()) {
+                if (null != mdecl.getAnnotation(WebMethod.class)) {
+                    webMethods.add(getWebServiceMETHODMetadata(mdecl));
+                }
+            }
+        }
+        
+        // create & return WebService
         try {
-            Collection<Annotation> annotations = getAnnotations(decl);
-            wstm = new Jsr181TypeMetadataImpl((javax.jws.WebService)
-                    AnnotationModel.getAnnotationOfType(annotations,
-                            javax.jws.WebService.class),
-                    decl.getQualifiedName(),
-                    annotations,
-                    webMethods);
-        } catch (Throwable t) {
-            t.printStackTrace(); // todo: proper error handling
+            objectModel = new Jsr181TypeMetadataImpl(
+                wsAnnotation,
+                decl.getSimpleName(),
+                getAnnotations(decl),
+                webMethods
+            );
         }
-        return wstm;
+        catch (Throwable t) {
+            _env.getMessager().printError(decl.getPosition(), t.getMessage());
+        }
+        
+        return objectModel;
     }
 
     protected Jsr181MethodMetadata 
getWebServiceMETHODMetadata(MethodDeclaration decl) {
@@ -172,33 +226,71 @@
         // create & return webMethod
         Jsr181MethodMetadata wsmm = null;
         try {
-            Collection<Annotation> annotations = getAnnotations(decl);
             wsmm = new Jsr181MethodMetadataImpl(decl.getSimpleName(),
                     TypeMirrorUtil.classForName(decl.getReturnType()),
                     (0 < decl.getThrownTypes().size()),
-                    annotations,
+                    getAnnotations(decl),
                     webParams);
-        } catch (Throwable t) {
-            t.printStackTrace(); // todo: proper error handling
+        }
+        catch (Throwable t) {
+            _env.getMessager().printError(decl.getPosition(), t.getMessage());
         }
         return wsmm;
     }
 
+    /**
+     *
+     */
     protected Jsr181ParameterMetadata 
getWebServicePARAMETERMetadata(ParameterDeclaration decl) {
         // create & return webParam
         Jsr181ParameterMetadata wspm = null;
         try {
-            Collection<Annotation> annotations = getAnnotations(decl);
             wspm = new 
Jsr181ParameterMetadataImpl(TypeMirrorUtil.classForName(decl.getType()),
                     decl.getSimpleName(),
-                    annotations);
-        } catch (Throwable t) {
-            t.printStackTrace(); // todo: proper error handling
+                    getAnnotations(decl));
+        }
+        catch (Throwable t) {
+            _env.getMessager().printError(decl.getPosition(), t.getMessage());
         }
         return wspm;
     }
 
-    private Collection<Annotation> getAnnotations(Declaration decl) {
+    /**
+     * Validate implementation bean against object model:
+     *   - If a service endpoint interface is referenced, check if all declared
+     *     methods are implemented by implementation bean
+     * 
+     * Note that this can only be called for concrete object models!
+     * @throws ValidationException
+     */
+    protected void validate(Jsr181TypeMetadata objectModel, ClassDeclaration 
classDecl) {
+        
+        // check if we have a service endpoint interface
+        String endpointInterface = objectModel.getServiceEndpointInterface();
+        if (null == endpointInterface && 0 >= endpointInterface.length()) {
+            return;
+        }
+
+        Collection<Jsr181MethodMetadata> implementedMethods =
+            new HashSet<Jsr181MethodMetadata>();
+        for (MethodDeclaration impl : classDecl.getMethods()) {
+            implementedMethods.add(getWebServiceMETHODMetadata(impl));
+        }
+        for (Jsr181MethodMetadata methodDecl : objectModel.getMethods()) {
+            boolean foundImpl = false;
+            for (Jsr181MethodMetadata methodImpl :implementedMethods) {
+                if (methodImpl.equals(methodDecl)) {
+                    foundImpl = true;
+                    break;
+                }
+            }
+            if (! foundImpl) {
+                _env.getMessager().printError(classDecl.getPosition(), "Method 
not implemented by " + classDecl.getSimpleName() + ": " + methodDecl);
+            }
+        }
+    }
+
+    protected Collection<Annotation> getAnnotations(Declaration decl) {
         Collection<Annotation> annotations = new ArrayList<Annotation>();
         for (AnnotationMirror am : decl.getAnnotationMirrors()) {
             AnnotationType at = am.getAnnotationType();
@@ -213,15 +305,4 @@
         }
         return annotations;
     }
-
-    public static  AnnotationMetadata getObjectModel(String name) {
-        return objectModels.get(name);
-    }
-
-    public static Set<String> getObjectModelNames() {
-        return objectModels.keySet();
-    }
-
-    private static Map<String, AnnotationMetadata> objectModels =
-            new HashMap<String, AnnotationMetadata>();
-}
+}
\ No newline at end of file

Modified: 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/processor/apt/WsmAnnotationProcessorFactory.java
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/processor/apt/WsmAnnotationProcessorFactory.java?view=diff&rev=124555&p1=incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/processor/apt/WsmAnnotationProcessorFactory.java&r1=124554&p2=incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/processor/apt/WsmAnnotationProcessorFactory.java&r2=124555
==============================================================================
--- 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/processor/apt/WsmAnnotationProcessorFactory.java
      (original)
+++ 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/processor/apt/WsmAnnotationProcessorFactory.java
      Fri Jan  7 10:19:16 2005
@@ -36,11 +36,9 @@
                 "javax.jws.WebParam",
                 "javax.jws.Oneway",
                 "javax.jws.WebResult",
-                "javax.jws.HandlerResult",
+                "javax.jws.HandlerChain",
                 "javax.jws.soap.SOAPBinding",
-                "javax.jws.soap.SOAPMessageHandlers",
-                "javax.jws.security.SecurityRoles",
-                "javax.jws.security.SecurityIdentity"
+                "javax.jws.soap.SOAPMessageHandler"
             }));
 
     private static final Collection<String> supportedOptions = 
Collections.emptySet();

Modified: 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/util/bytecode/ClassReader.java
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/util/bytecode/ClassReader.java?view=diff&rev=124555&p1=incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/util/bytecode/ClassReader.java&r1=124554&p2=incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/util/bytecode/ClassReader.java&r2=124555
==============================================================================
--- 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/util/bytecode/ClassReader.java
        (original)
+++ 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/util/bytecode/ClassReader.java
        Fri Jan  7 10:19:16 2005
@@ -42,6 +42,7 @@
  * are not threadsafe -- don't share them. <p>
  *
  * @author Edwin Smith, Macromedia
+ * @deprecated
  */
 public class ClassReader extends ByteArrayInputStream {
     // constants values that appear in java class files,

Modified: 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/util/bytecode/ParamNameExtractor.java
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/util/bytecode/ParamNameExtractor.java?view=diff&rev=124555&p1=incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/util/bytecode/ParamNameExtractor.java&r1=124554&p2=incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/util/bytecode/ParamNameExtractor.java&r2=124555
==============================================================================
--- 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/util/bytecode/ParamNameExtractor.java
 (original)
+++ 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/util/bytecode/ParamNameExtractor.java
 Fri Jan  7 10:19:16 2005
@@ -25,6 +25,7 @@
  * debugging symbols.  Used as a last resort when creating WSDL.
  *
  * @author <a href="mailto:[EMAIL PROTECTED]">Tom Jordahl</a>
+ * @deprecated
  */
 public class ParamNameExtractor {
 

Modified: 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/util/bytecode/ParamReader.java
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/util/bytecode/ParamReader.java?view=diff&rev=124555&p1=incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/util/bytecode/ParamReader.java&r1=124554&p2=incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/util/bytecode/ParamReader.java&r2=124555
==============================================================================
--- 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/util/bytecode/ParamReader.java
        (original)
+++ 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/util/bytecode/ParamReader.java
        Fri Jan  7 10:19:16 2005
@@ -37,6 +37,7 @@
  * are not threadsafe -- don't share them. <p>
  *
  * @author Edwin Smith, Macromedia
+ * @deprecated
  */
 public class ParamReader
         extends ClassReader {

Reply via email to