From a368e7155b9087a686dd6ebbdd3cbbd8bdea9571 Mon Sep 17 00:00:00 2001 From: lresende Date: Thu, 22 Oct 2009 01:39:39 +0000 Subject: TUSCANY-3294 - Adding check in the runtime to validate JCA100006, that states that JAX-WS client-side asynchronous pooling and callback methods are not allowed in service interface git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@828276 13f79535-47bb-0310-9956-ffa450edef68 --- .../sca/builder/impl/EndpointBuilderImpl.java | 47 +++++++++++++++++++--- 1 file changed, 41 insertions(+), 6 deletions(-) (limited to 'java/sca') diff --git a/java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/EndpointBuilderImpl.java b/java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/EndpointBuilderImpl.java index e122df35c3..a2e7819d24 100644 --- a/java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/EndpointBuilderImpl.java +++ b/java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/EndpointBuilderImpl.java @@ -19,6 +19,8 @@ package org.apache.tuscany.sca.builder.impl; +import java.util.List; + import org.apache.tuscany.sca.assembly.AssemblyFactory; import org.apache.tuscany.sca.assembly.Binding; import org.apache.tuscany.sca.assembly.Component; @@ -31,6 +33,8 @@ import org.apache.tuscany.sca.assembly.builder.CompositeBuilder; import org.apache.tuscany.sca.assembly.builder.CompositeBuilderException; import org.apache.tuscany.sca.core.ExtensionPointRegistry; import org.apache.tuscany.sca.core.FactoryExtensionPoint; +import org.apache.tuscany.sca.interfacedef.Operation; +import org.apache.tuscany.sca.monitor.Monitor; /** * creates endpoint models for component services. @@ -50,26 +54,57 @@ public class EndpointBuilderImpl implements CompositeBuilder { * @param definitions * @param monitor - a Monitor for logging errors */ - public Composite build(Composite composite, BuilderContext context) - throws CompositeBuilderException { + public Composite build(Composite composite, BuilderContext context) throws CompositeBuilderException { - processComponentServices(composite); + processComponentServices(composite, context); return composite; - } // end method build + } - private void processComponentServices(Composite composite) { + private void processComponentServices(Composite composite, BuilderContext context) { + Monitor monitor = context.getMonitor(); + for (Component component : composite.getComponents()) { + monitor.pushContext("Component: " + component.getName().toString()); + // recurse for composite implementations Implementation implementation = component.getImplementation(); if (implementation instanceof Composite) { - processComponentServices((Composite)implementation); + processComponentServices((Composite)implementation, context); } // create an endpoint for each component service binding for (ComponentService service : component.getServices()) { + monitor.pushContext("Service: " + service.getName()); + + //verify JAX-WS async assertions as in JavaCAA section 11.1 + List asyncOperations = null; + try { + asyncOperations = (List) service.getInterfaceContract().getInterface().getAttributes().get("JAXWS-ASYNC-OPERATIONS"); + }catch(Exception e) { + //ignore + } + + + if(asyncOperations != null) { + if( ! asyncOperations.isEmpty()) { + + //error JCA100006 + + //FIXME create a java validation message resource bundle + Monitor.error(monitor, + this, + null, + "[JCA100006] JAX-WS client-side asynchronous pooling and callback methods are not allowed in service interfaces", + service, + service.getName()); + } + } + + + /* change to finding the promoted component and service * when the wire is created as storing them here leads to -- cgit v1.2.3