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 {