Author: mmerz
Date: Fri Jan 14 09:28:16 2005
New Revision: 125190

URL: http://svn.apache.org/viewcvs?view=rev&rev=125190
Log:
Ensure existence of object models for (referenced) endpoint interfaces before 
creating object models for implementation beans.

Modified:
   incubator/beehive/trunk/wsm/build.xml
   
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/processor/apt/WsmAnnotationProcessor.java
   
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/processor/apt/WsmAnnotationProcessorFactory.java

Modified: incubator/beehive/trunk/wsm/build.xml
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/wsm/build.xml?view=diff&rev=125190&p1=incubator/beehive/trunk/wsm/build.xml&r1=125189&p2=incubator/beehive/trunk/wsm/build.xml&r2=125190
==============================================================================
--- incubator/beehive/trunk/wsm/build.xml       (original)
+++ incubator/beehive/trunk/wsm/build.xml       Fri Jan 14 09:28:16 2005
@@ -15,7 +15,7 @@
  
    $Header:$
  -->
-<project name="Beehive/WSM Framework Build" default="usage" basedir=".">
+<project name="Beehive - Metadata for Web Services" default="usage" 
basedir=".">
     <property environment="os"/>
     <property file="../beehive.properties"/>
     <!-- THE WSM BUILD REQUIRES JDK5 AND LATER.  ATTEMPTS TO BUILD ON JDK 
EALRIER THAN 5.0 WILL BE A NOOP -->

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=125190&p1=incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/Jsr181TypeMetadataImpl.java&r1=125189&p2=incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/Jsr181TypeMetadataImpl.java&r2=125190
==============================================================================
--- 
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 14 09:28:16 2005
@@ -702,7 +702,7 @@
         return "http://"; + targetNamespace;
     }
 
-    // NOTE: this needs to go, as it should really be in 
Jsr181MethodMetadataImpl!!!
+    // todo: this needs to go, as it should really be in 
Jsr181MethodMetadataImpl!!!
     private String createCompleteMethodSignature(String name,
                                                  Class... paramTypes) {
 
@@ -772,7 +772,7 @@
 
         try {
             if (null == is) {
-                throw new IOException("Cannot open input stream for object 
model");
+                throw new IOException("cannot load object model without input 
stream");
             }
             ois = new ObjectInputStream(is);
             objectModel = (Jsr181TypeMetadataImpl) ois.readObject();
@@ -795,10 +795,10 @@
         ObjectOutputStream oos = null;
         try {
             if (null == os) {
-                throw new IOException("Cannot persist object model without 
output stream");
+                throw new IOException("cannot persist object model without 
output stream");
             }
             if (null == objectModel) {
-                throw new IOException("Cannot persist empty object model ");
+                throw new IOException("cannot persist empty object model ");
             }
             oos = new ObjectOutputStream(os);
             oos.writeObject(objectModel);

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=125190&p1=incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/processor/apt/WsmAnnotationProcessor.java&r1=125189&p2=incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/processor/apt/WsmAnnotationProcessor.java&r2=125190
==============================================================================
--- 
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 14 09:28:16 2005
@@ -65,7 +65,7 @@
  */
 public class WsmAnnotationProcessor extends TwoPhaseAnnotationProcessor {
 
-    private Set<Declaration> handledDecls = new HashSet<Declaration>();
+    private Set<TypeDeclaration> handledDecls = new HashSet<TypeDeclaration>();
     
     /**
      * Constructor.
@@ -79,7 +79,9 @@
      * @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
+     * todo: always process all interfaces before implementations
      */
+    @Override
     public void check(Declaration _decl) {
 
         Messager messager = _env.getMessager();
@@ -95,12 +97,12 @@
         }
         WebService wsAnnotation = _decl.getAnnotation(WebService.class);
         if (null == wsAnnotation) {
-            messager.printWarning(_decl.getPosition(), "@WebService annotation 
missing");
+            messager.printWarning(_decl.getPosition(), "@WebService annotation 
missing; unable to process: " + ((TypeDeclaration) _decl).getQualifiedName());
             return;
         }
         
         // store declaration so we don't handle it multiple times
-        handledDecls.add(_decl);
+        handledDecls.add((TypeDeclaration) _decl);
         
         try {
 
@@ -114,18 +116,14 @@
                 
                 // start from endpoint interface
                 if (null != endpointInterface && 0 < 
endpointInterface.length()) {
-                    
-                    // get object model for service endpoint interface
-                    om = 
Jsr181TypeMetadataImpl.load(getClass().getClassLoader().getResourceAsStream(Jsr181TypeMetadataImpl.getLocation(endpointInterface).toString()));
-                    if (null == om) {
-                        messager.printError(classDecl.getPosition(), "cannot 
find object model for service endpoint interface: " + endpointInterface);
-                        return;
-                    }
 
+                    // get object model for service endpoint interface
+                    om = getEndpointInterfaceObjectModel(endpointInterface);
+                    
                     // merge abstract and concrete object models
                     Jsr181TypeMetadata com = 
getWebServiceTYPEMetadata(classDecl, false);
                     if (null == com) {
-                        messager.printError(classDecl.getPosition(), "cannot 
create object model for service implementation bean: " + 
classDecl.getQualifiedName());
+                        messager.printError(classDecl.getPosition(), "cannot 
load object model for service implementation bean: " + 
classDecl.getQualifiedName());
                         return;
                     }
                     om.merge(com);
@@ -141,7 +139,7 @@
 
                 // check if we have an object model
                 if (null == om) {
-                    messager.printError(classDecl.getPosition(), "cannot 
create object model for service implementation bean: " + 
classDecl.getQualifiedName());
+//                    messager.printError(classDecl.getPosition(), "cannot 
create object model for service implementation bean: " + 
classDecl.getQualifiedName());
                     return;
                 }
 
@@ -153,12 +151,12 @@
             else if (_decl instanceof InterfaceDeclaration) {
                 InterfaceDeclaration interfaceDecl = (InterfaceDeclaration) 
_decl;
                 
-                messager.printNotice("creating object model for service 
endpoint interface: " + interfaceDecl.getQualifiedName());
+                messager.printNotice("processing service endpoint interface: " 
+ interfaceDecl.getQualifiedName());
                 
                 // create object model
                 Jsr181TypeMetadata om = 
getWebServiceTYPEMetadata(interfaceDecl, true);
                 if (null == om) {
-                    messager.printError(interfaceDecl.getPosition(), "cannot 
create object model for service endpoint interface: " + 
interfaceDecl.getQualifiedName());
+//                    messager.printError(interfaceDecl.getPosition(), "cannot 
create object model for service endpoint interface: " + 
interfaceDecl.getQualifiedName());
                     return;
                 }
 
@@ -181,9 +179,10 @@
     /**
      * @see TwoPhaseAnnotationProcessor
      */
+    @Override
     public void generate(Declaration _decl) {
             
-        // persist all object models that have been created [by check()]
+        // todo: persist all object models that have been created [by check()]
     }
 
     protected Jsr181TypeMetadata getWebServiceTYPEMetadata(TypeDeclaration 
decl, boolean isServiceEndpointInterface) {
@@ -193,6 +192,7 @@
         // get WebService annotation
         WebService wsAnnotation = decl.getAnnotation(WebService.class);
         if (null == wsAnnotation) {
+            _env.getMessager().printError(decl.getPosition(), "cannot create 
object model for class: " + decl.getQualifiedName());
             return null;
         }
         
@@ -278,7 +278,32 @@
         return wspm;
     }
 
+    private Jsr181TypeMetadata getEndpointInterfaceObjectModel(String 
endpointInterface) {
+
+        Jsr181TypeMetadata om = null;
+
+        // search for persistent object model
+        try {
+            om = 
Jsr181TypeMetadataImpl.load(getClass().getClassLoader().getResourceAsStream(Jsr181TypeMetadataImpl.getLocation(endpointInterface).toString()));
+        }
+        catch (Throwable t) { }
+
+        // try to generate object model
+        if (null == om) {
+            try {
+                _env.getMessager().printNotice("-> loading object model for 
required endpoint interface:" + endpointInterface);
+                check(_env.getTypeDeclaration(endpointInterface));
+                om = 
Jsr181TypeMetadataImpl.load(getClass().getClassLoader().getResourceAsStream(Jsr181TypeMetadataImpl.getLocation(endpointInterface).toString()));
+            }
+            catch (Throwable t) { }
+        }
+        
+        return om;
+    }
+    
     /**
+     * todo: should this go into Jsr181TypeMetadataImpl
+     *
      * Validate implementation bean against object model:
      *   - If a service endpoint interface is referenced, check if all declared
      *     methods are implemented by implementation bean

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=125190&p1=incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/processor/apt/WsmAnnotationProcessorFactory.java&r1=125189&p2=incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/processor/apt/WsmAnnotationProcessorFactory.java&r2=125190
==============================================================================
--- 
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 14 09:28:16 2005
@@ -37,8 +37,10 @@
                 "javax.jws.Oneway",
                 "javax.jws.WebResult",
                 "javax.jws.HandlerChain",
+                "javax.jws.soap.InitParam",
                 "javax.jws.soap.SOAPBinding",
-                "javax.jws.soap.SOAPMessageHandler"
+                "javax.jws.soap.SOAPMessageHandler",
+                "javax.jws.soap.SOAPMessageHandlers"
             }));
 
     private static final Collection<String> supportedOptions = 
Collections.emptySet();

Reply via email to