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); - } - } } }
