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