Author: mmerz
Date: Tue Jan 25 10:56:36 2005
New Revision: 126410

URL: http://svn.apache.org/viewcvs?view=rev&rev=126410
Log:
Moved object model validation into Jsr181TypeMetadataImpl.


Modified:
   
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/processor/apt/WsmAnnotationProcessor.java

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=126410&p1=incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/Jsr181TypeMetadata.java&r1=126409&p2=incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/Jsr181TypeMetadata.java&r2=126410
==============================================================================
--- 
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
 Tue Jan 25 10:56:36 2005
@@ -25,8 +25,10 @@
 
 import javax.jws.HandlerChain;
 import javax.jws.WebService;
+
 import javax.jws.security.SecurityIdentity;
 import javax.jws.security.SecurityRoles;
+
 import javax.jws.soap.SOAPBinding;
 import javax.jws.soap.SOAPMessageHandler;
 import javax.jws.soap.SOAPMessageHandlers;
@@ -35,6 +37,8 @@
 
 import org.apache.xmlbeans.XmlException;
 
+import org.apache.beehive.wsm.jsr181.model.java.JavaTypeInfo;
+
 /**
  * @author Daryoush
  */
@@ -94,5 +98,5 @@
     String getClassName();
     void setClassName(String className);
     
-    void merge(Jsr181TypeMetadata objectModel) throws Exception;
+    void merge(JavaTypeInfo jt) 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=126410&p1=incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/Jsr181TypeMetadataImpl.java&r1=126409&p2=incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/Jsr181TypeMetadataImpl.java&r2=126410
==============================================================================
--- 
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
     Tue Jan 25 10:56:36 2005
@@ -821,7 +821,6 @@
      *   only the @WebService.endpointInterface and @WebService.serviceName are
      *   relevant.
      * @throws Exception
-     */
     public void merge(Jsr181TypeMetadata objectModel) throws Exception {
         
         // check if this has endpointInterface --> error
@@ -844,7 +843,71 @@
         
         setClassName(objectModel.getClassName());
     }
+     */
 
+    /**
+     * @param jt SIB type info.
+     * @throws Exception
+     */
+    public void merge(JavaTypeInfo jt) throws Exception {
+        
+        // check if this has endpointInterface --> error
+        String myEndpointInterface = getWsEndpointInterface();
+        if (null != myEndpointInterface && 0 < myEndpointInterface.length())
+            throw new ValidationException("service endpoint interface can't 
reference another service endpoint interface: " + myEndpointInterface);
+        
+        // check if objectModel doesn't reference this endpointInterface --> 
error
+        Jsr181TypeMetadata sibObjectModel = new Jsr181TypeMetadataImpl(jt);
+        String omEndpointInterface = sibObjectModel.getWsEndpointInterface();
+        if (null == omEndpointInterface || 0 >= omEndpointInterface.length() 
|| ! omEndpointInterface.equals(getClassName()))
+            throw new Exception("Internal error: object model for " + 
sibObjectModel.getClassName() + " does not reference endpoint interface "+ 
omEndpointInterface);
+
+        // check if objectModel.wsWsdlLocation != null --> error
+        if (null != sibObjectModel.getWsWsdlLocation() && 0 < 
sibObjectModel.getWsWsdlLocation().length()) {
+            throw new Exception("implementation bean must not reference a 
service endpoint interface and a WSDL location at the same time");
+        }
+        
+        setWsServiceName(sibObjectModel.getWsServiceName());
+        setWsEndpointInterface(sibObjectModel.getWsEndpointInterface());
+        
+        setClassName(sibObjectModel.getClassName());
+        
+        // check if jt implements the contract
+        validateContract(jt);
+    }
+
+    /**
+     * @param jt SIB type info.
+     * @throws ValidationException
+     */
+    protected void validateContract(JavaTypeInfo jt) throws 
ValidationException {
+        
+        // get all implemented methods
+        Collection<Jsr181MethodMetadata> implementedMethods = new 
HashSet<Jsr181MethodMetadata>();
+        for (JavaMethodInfo jm : jt.getMethods()) {
+            try {
+                implementedMethods.add(new Jsr181MethodMetadataImpl(jm));
+            }
+            catch (Throwable t) {
+                throw new ValidationException("invalid method declaration 
found: " + jt.getName() + ": " + jm.getMethodName());
+            }
+        }
+        
+        // check if we implement all required methods
+        for (Jsr181MethodMetadata declaredMethod : getMethods()) {
+            boolean implementationFound = false;
+            for (Jsr181MethodMetadata implementedMethod : implementedMethods) {
+                if (implementedMethod.equals(declaredMethod)) {
+                    implementationFound = true;
+                    break;
+                }
+            }
+            if (! implementationFound) {
+                throw new ValidationException("method not implemented by " + 
jt.getName() + ": " + declaredMethod);
+            }
+        }
+    }
+    
     /**
      * Encapsulates the encoding of the pathname for object models.
      * @param

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=126410&p1=incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/processor/apt/WsmAnnotationProcessor.java&r1=126409&p2=incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/processor/apt/WsmAnnotationProcessor.java&r2=126410
==============================================================================
--- 
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
     Tue Jan 25 10:56:36 2005
@@ -18,37 +18,22 @@
  * $Header:$
  */
 
-import java.io.File;
-import java.io.IOException;
-
-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;
-import com.sun.mirror.declaration.ConstructorDeclaration;
 import com.sun.mirror.declaration.Declaration;
 import com.sun.mirror.declaration.InterfaceDeclaration;
-import com.sun.mirror.declaration.MethodDeclaration;
-import com.sun.mirror.declaration.ParameterDeclaration;
 import com.sun.mirror.declaration.TypeDeclaration;
 
-import org.apache.beehive.wsm.jsr181.model.Jsr181MethodMetadata;
-import org.apache.beehive.wsm.jsr181.model.Jsr181MethodMetadataImpl;
+import javax.jws.WebService;
+
 import org.apache.beehive.wsm.jsr181.model.Jsr181TypeMetadata;
 import org.apache.beehive.wsm.jsr181.model.Jsr181TypeMetadataImpl;
 
@@ -94,8 +79,7 @@
             }
             WebService wsAnnotation = _decl.getAnnotation(WebService.class);
             if (null == wsAnnotation) {
-                messager.printWarning(_decl.getPosition(), "@WebService 
annotation missing; unable to process: " + ((TypeDeclaration) 
_decl).getQualifiedName());
-                return;
+                messager.printError(_decl.getPosition(), "@WebService 
annotation missing; unable to process: " + ((TypeDeclaration) 
_decl).getQualifiedName());
             }
 
             // store declaration so we don't handle it multiple times
@@ -116,15 +100,7 @@
                     om = getEndpointInterfaceObjectModel(endpointInterface);
                     
                     // merge abstract and concrete object models
-                    Jsr181TypeMetadata com = new Jsr181TypeMetadataImpl(new 
MirrorTypeInfo(classDecl));
-                    if (null == com) {
-                        messager.printError(classDecl.getPosition(), "cannot 
load object model for service implementation bean: " + 
classDecl.getQualifiedName());
-                        return;
-                    }
-                    om.merge(com);
-
-                    // validate concrete object model against the contract 
(service endpoint interface)
-                    validate(om, classDecl);
+                    om.merge(new MirrorTypeInfo(classDecl));
                 }
                 
                 // create object model from scratch
@@ -199,40 +175,5 @@
         }
         
         return om;
-    }
-    
-    /**
-     * todo: should this go into Jsr181TypeMetadataImpl
-     */
-    protected void validate(Jsr181TypeMetadata objectModel, ClassDeclaration 
classDecl) {
-        
-        // check if we have a service endpoint interface
-        String endpointInterface = objectModel.getWsEndpointInterface();
-        if (null == endpointInterface && 0 >= endpointInterface.length()) {
-            return;
-        }
-
-        Collection<Jsr181MethodMetadata> implementedMethods =
-            new HashSet<Jsr181MethodMetadata>();
-        for (MethodDeclaration impl : classDecl.getMethods()) {
-            try {
-                implementedMethods.add(new Jsr181MethodMetadataImpl(new 
MirrorMethodInfo(impl)));
-            }
-            catch (Throwable t) {
-                _env.getMessager().printError(classDecl.getPosition(), 
"Invalid method declaration found: " + classDecl.getSimpleName() + ": " + 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);
-            }
-        }
     }
 }

Reply via email to