You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by rf...@apache.org on 2008/01/23 00:11:12 UTC

svn commit: r614370 - in /incubator/tuscany/java/sca: itest/exceptions-cross-binding-ws/src/test/java/org/apache/tuscany/sca/test/exceptions/ modules/binding-ws-axis2/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/ modules/databinding/src/main/j...

Author: rfeng
Date: Tue Jan 22 15:11:09 2008
New Revision: 614370

URL: http://svn.apache.org/viewvc?rev=614370&view=rev
Log:
Fix an issue in Axis2 service lookup and bring up the exception-ws-crossbinding itest again

Added:
    incubator/tuscany/java/sca/itest/exceptions-cross-binding-ws/src/test/java/org/apache/tuscany/sca/test/exceptions/IntraCompositeTestCase.java
      - copied, changed from r614120, incubator/tuscany/java/sca/itest/exceptions-cross-binding-ws/src/test/java/org/apache/tuscany/sca/test/exceptions/IntraCompositeTestCaseFIXME.java
Removed:
    incubator/tuscany/java/sca/itest/exceptions-cross-binding-ws/src/test/java/org/apache/tuscany/sca/test/exceptions/IntraCompositeTestCaseFIXME.java
Modified:
    incubator/tuscany/java/sca/modules/binding-ws-axis2/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/Axis2ServiceProvider.java
    incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultDataBindingExtensionPoint.java
    incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/DOMHelper.java

Copied: incubator/tuscany/java/sca/itest/exceptions-cross-binding-ws/src/test/java/org/apache/tuscany/sca/test/exceptions/IntraCompositeTestCase.java (from r614120, incubator/tuscany/java/sca/itest/exceptions-cross-binding-ws/src/test/java/org/apache/tuscany/sca/test/exceptions/IntraCompositeTestCaseFIXME.java)
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/itest/exceptions-cross-binding-ws/src/test/java/org/apache/tuscany/sca/test/exceptions/IntraCompositeTestCase.java?p2=incubator/tuscany/java/sca/itest/exceptions-cross-binding-ws/src/test/java/org/apache/tuscany/sca/test/exceptions/IntraCompositeTestCase.java&p1=incubator/tuscany/java/sca/itest/exceptions-cross-binding-ws/src/test/java/org/apache/tuscany/sca/test/exceptions/IntraCompositeTestCaseFIXME.java&r1=614120&r2=614370&rev=614370&view=diff
==============================================================================
--- incubator/tuscany/java/sca/itest/exceptions-cross-binding-ws/src/test/java/org/apache/tuscany/sca/test/exceptions/IntraCompositeTestCaseFIXME.java (original)
+++ incubator/tuscany/java/sca/itest/exceptions-cross-binding-ws/src/test/java/org/apache/tuscany/sca/test/exceptions/IntraCompositeTestCase.java Tue Jan 22 15:11:09 2008
@@ -28,7 +28,7 @@
 import stockexceptiontestservice.scatesttool.InvalidSymbolFault;
 import stockexceptiontestservice.scatesttool.StockOffer;
 
-public class IntraCompositeTestCaseFIXME extends TestCase {
+public class IntraCompositeTestCase extends TestCase {
     private SCADomain domain;
     private StockTraderSDO stockTrader;
 

Modified: incubator/tuscany/java/sca/modules/binding-ws-axis2/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/Axis2ServiceProvider.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-ws-axis2/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/Axis2ServiceProvider.java?rev=614370&r1=614369&r2=614370&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-ws-axis2/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/Axis2ServiceProvider.java (original)
+++ incubator/tuscany/java/sca/modules/binding-ws-axis2/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/Axis2ServiceProvider.java Tue Jan 22 15:11:09 2008
@@ -26,7 +26,6 @@
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.net.URL;
-import java.security.Principal;
 import java.security.PrivilegedAction;
 import java.util.Iterator;
 import java.util.List;
@@ -35,8 +34,8 @@
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
-import javax.security.auth.Subject;
 import javax.wsdl.Definition;
+import javax.wsdl.Import;
 import javax.wsdl.Port;
 import javax.wsdl.extensions.soap.SOAPAddress;
 import javax.wsdl.extensions.soap12.SOAP12Address;
@@ -436,6 +435,32 @@
 
         return axisService;
     }
+    
+    /**
+     * Workaround for https://issues.apache.org/jira/browse/AXIS2-3205
+     * @param definition
+     * @param serviceName
+     * @return
+     */
+    private static Definition getDefinition(Definition definition, QName serviceName) {
+        if (definition == null) {
+            return null;
+        }
+        Object service = definition.getServices().get(serviceName);
+        if (service != null) {
+            return definition;
+        }
+        for (Object i : definition.getImports().values()) {
+            List<Import> imports = (List<Import>)i;
+            for (Import imp : imports) {
+                Definition d = getDefinition(imp.getDefinition(), serviceName);
+                if (d != null) {
+                    return d;
+                }
+            }
+        }
+        return definition;
+    }
 
     /**
      * Create an AxisService from the WSDL doc used by ws binding
@@ -450,12 +475,14 @@
         Axis2ServiceClient.setServiceAndPort(wsBinding);
         QName serviceQName = wsBinding.getServiceName();
         String portName = wsBinding.getPortName();
+        
+        Definition def = getDefinition(definition, serviceQName);
 
-        WSDLToAxisServiceBuilder builder = new WSDL11ToAxisServiceBuilder(definition, serviceQName, portName);
+        WSDLToAxisServiceBuilder builder = new WSDL11ToAxisServiceBuilder(def, serviceQName, portName);
         builder.setServerSide(true);
         // [rfeng] Add a custom resolver to work around WSCOMMONS-228
-        builder.setCustomResolver(new URIResolverImpl(definition));
-        builder.setBaseUri(definition.getDocumentBaseURI());
+        builder.setCustomResolver(new URIResolverImpl(def));
+        builder.setBaseUri(def.getDocumentBaseURI());
         // [rfeng]
         AxisService axisService = builder.populateService();
 
@@ -476,7 +503,7 @@
         }
         // Use the existing WSDL
         Parameter wsdlParam = new Parameter(WSDLConstants.WSDL_4_J_DEFINITION, null);
-        wsdlParam.setValue(definition);
+        wsdlParam.setValue(def);
         axisService.addParameter(wsdlParam);
         Parameter userWSDL = new Parameter("useOriginalwsdl", "true");
         axisService.addParameter(userWSDL);

Modified: incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultDataBindingExtensionPoint.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultDataBindingExtensionPoint.java?rev=614370&r1=614369&r2=614370&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultDataBindingExtensionPoint.java (original)
+++ incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultDataBindingExtensionPoint.java Tue Jan 22 15:11:09 2008
@@ -63,18 +63,17 @@
     }
 
     public void addDataBinding(DataBinding dataBinding) {
-    	if (logger.isLoggable(Level.FINE)) {
-			String className = dataBinding.getClass().getName();
-			boolean lazy = false;
-			if (dataBinding instanceof LazyDataBinding) {
-				className = ((LazyDataBinding) dataBinding).dataBindingDeclaration.getClassName();
-				lazy = true;
-			}
-			logger.fine("Adding databinding: " + className + ";type="
-					+ dataBinding.getName() + ",lazy=" + lazy);
-		}
+        if (logger.isLoggable(Level.FINE)) {
+            String className = dataBinding.getClass().getName();
+            boolean lazy = false;
+            if (dataBinding instanceof LazyDataBinding) {
+                className = ((LazyDataBinding)dataBinding).dataBindingDeclaration.getClassName();
+                lazy = true;
+            }
+            logger.fine("Adding databinding: " + className + ";type=" + dataBinding.getName() + ",lazy=" + lazy);
+        }
         databindings.add(dataBinding);
-		bindings.put(dataBinding.getName().toLowerCase(), dataBinding);
+        bindings.put(dataBinding.getName().toLowerCase(), dataBinding);
 
         String[] aliases = dataBinding.getAliases();
         if (aliases != null) {
@@ -111,8 +110,7 @@
         // Get the databinding service declarations
         Set<ServiceDeclaration> dataBindingDeclarations;
         try {
-            dataBindingDeclarations =
-                ServiceDiscovery.getInstance().getServiceDeclarations(DataBinding.class);
+            dataBindingDeclarations = ServiceDiscovery.getInstance().getServiceDeclarations(DataBinding.class);
         } catch (IOException e) {
             throw new IllegalStateException(e);
         }
@@ -159,8 +157,7 @@
         private DataBinding getDataBinding() {
             if (dataBinding == null) {
                 try {
-                    Class<DataBinding> dataBindingClass =
-                        (Class<DataBinding>)dataBindingDeclaration.loadClass();
+                    Class<DataBinding> dataBindingClass = (Class<DataBinding>)dataBindingDeclaration.loadClass();
                     Constructor<DataBinding> constructor = dataBindingClass.getConstructor();
                     dataBinding = constructor.newInstance();
                 } catch (Exception e) {

Modified: incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/DOMHelper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/DOMHelper.java?rev=614370&r1=614369&r2=614370&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/DOMHelper.java (original)
+++ incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/DOMHelper.java Tue Jan 22 15:11:09 2008
@@ -138,7 +138,7 @@
                     qname = prefix + ":" + qname;
                 }
                 Element newElement = element.getOwnerDocument().createElementNS(newName.getNamespaceURI(), qname);
-                newElement.setPrefix(prefix);
+                // newElement.setPrefix(prefix);
                 NodeList nodeList = element.getChildNodes();
                 // Need to copy the nodes from the list fisrt as the appendChild() will change the list
                 int length = nodeList.getLength();



---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org


Re: svn commit: r614370 - in /incubator/tuscany/java/sca: itest/exceptions-cross-binding-ws/src/test/java/org/apache/tuscany/sca/test/exceptions/ modules/binding-ws-axis2/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/ modules/databinding/src/main/j

Posted by Raymond Feng <en...@gmail.com>.
Hi,

It seems that this change is breaking the Linux env. It works fine on 
Windonws. I'll try to debug.

Thanks,
Raymond

----- Original Message ----- 
From: <rf...@apache.org>
To: <tu...@ws.apache.org>
Sent: Tuesday, January 22, 2008 3:11 PM
Subject: svn commit: r614370 - in /incubator/tuscany/java/sca: 
itest/exceptions-cross-binding-ws/src/test/java/org/apache/tuscany/sca/test/exceptions/ 
modules/binding-ws-axis2/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/ 
modules/databinding/src/main/j...


> Author: rfeng
> Date: Tue Jan 22 15:11:09 2008
> New Revision: 614370
>
> URL: http://svn.apache.org/viewvc?rev=614370&view=rev
> Log:
> Fix an issue in Axis2 service lookup and bring up the 
> exception-ws-crossbinding itest again
>
> Added:
> 
> incubator/tuscany/java/sca/itest/exceptions-cross-binding-ws/src/test/java/org/apache/tuscany/sca/test/exceptions/IntraCompositeTestCase.java
>      - copied, changed from r614120, 
> incubator/tuscany/java/sca/itest/exceptions-cross-binding-ws/src/test/java/org/apache/tuscany/sca/test/exceptions/IntraCompositeTestCaseFIXME.java
> Removed:
> 
> incubator/tuscany/java/sca/itest/exceptions-cross-binding-ws/src/test/java/org/apache/tuscany/sca/test/exceptions/IntraCompositeTestCaseFIXME.java
> Modified:
> 
> incubator/tuscany/java/sca/modules/binding-ws-axis2/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/Axis2ServiceProvider.java
> 
> incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultDataBindingExtensionPoint.java
> 
> incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/DOMHelper.java
>
> Copied: 
> incubator/tuscany/java/sca/itest/exceptions-cross-binding-ws/src/test/java/org/apache/tuscany/sca/test/exceptions/IntraCompositeTestCase.java 
> (from r614120, 
> incubator/tuscany/java/sca/itest/exceptions-cross-binding-ws/src/test/java/org/apache/tuscany/sca/test/exceptions/IntraCompositeTestCaseFIXME.java)
> URL: 
> http://svn.apache.org/viewvc/incubator/tuscany/java/sca/itest/exceptions-cross-binding-ws/src/test/java/org/apache/tuscany/sca/test/exceptions/IntraCompositeTestCase.java?p2=incubator/tuscany/java/sca/itest/exceptions-cross-binding-ws/src/test/java/org/apache/tuscany/sca/test/exceptions/IntraCompositeTestCase.java&p1=incubator/tuscany/java/sca/itest/exceptions-cross-binding-ws/src/test/java/org/apache/tuscany/sca/test/exceptions/IntraCompositeTestCaseFIXME.java&r1=614120&r2=614370&rev=614370&view=diff
> ==============================================================================
> ---  
> incubator/tuscany/java/sca/itest/exceptions-cross-binding-ws/src/test/java/org/apache/tuscany/sca/test/exceptions/IntraCompositeTestCaseFIXME.java 
> (original)
> +++ 
> incubator/tuscany/java/sca/itest/exceptions-cross-binding-ws/src/test/java/org/apache/tuscany/sca/test/exceptions/IntraCompositeTestCase.java 
> Tue Jan 22 15:11:09 2008
> @@ -28,7 +28,7 @@
> import stockexceptiontestservice.scatesttool.InvalidSymbolFault;
> import stockexceptiontestservice.scatesttool.StockOffer;
>
> -public class IntraCompositeTestCaseFIXME extends TestCase {
> +public class IntraCompositeTestCase extends TestCase {
>     private SCADomain domain;
>     private StockTraderSDO stockTrader;
>
>
> Modified: 
> incubator/tuscany/java/sca/modules/binding-ws-axis2/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/Axis2ServiceProvider.java
> URL: 
> http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-ws-axis2/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/Axis2ServiceProvider.java?rev=614370&r1=614369&r2=614370&view=diff
> ==============================================================================
> ---  
> incubator/tuscany/java/sca/modules/binding-ws-axis2/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/Axis2ServiceProvider.java 
> (original)
> +++ 
> incubator/tuscany/java/sca/modules/binding-ws-axis2/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/Axis2ServiceProvider.java 
> Tue Jan 22 15:11:09 2008
> @@ -26,7 +26,6 @@
> import java.net.URI;
> import java.net.URISyntaxException;
> import java.net.URL;
> -import java.security.Principal;
> import java.security.PrivilegedAction;
> import java.util.Iterator;
> import java.util.List;
> @@ -35,8 +34,8 @@
> import java.util.logging.Level;
> import java.util.logging.Logger;
>
> -import javax.security.auth.Subject;
> import javax.wsdl.Definition;
> +import javax.wsdl.Import;
> import javax.wsdl.Port;
> import javax.wsdl.extensions.soap.SOAPAddress;
> import javax.wsdl.extensions.soap12.SOAP12Address;
> @@ -436,6 +435,32 @@
>
>         return axisService;
>     }
> +
> +    /**
> +     * Workaround for https://issues.apache.org/jira/browse/AXIS2-3205
> +     * @param definition
> +     * @param serviceName
> +     * @return
> +     */
> +    private static Definition getDefinition(Definition definition, QName 
> serviceName) {
> +        if (definition == null) {
> +            return null;
> +        }
> +        Object service = definition.getServices().get(serviceName);
> +        if (service != null) {
> +            return definition;
> +        }
> +        for (Object i : definition.getImports().values()) {
> +            List<Import> imports = (List<Import>)i;
> +            for (Import imp : imports) {
> +                Definition d = getDefinition(imp.getDefinition(), 
> serviceName);
> +                if (d != null) {
> +                    return d;
> +                }
> +            }
> +        }
> +        return definition;
> +    }
>
>     /**
>      * Create an AxisService from the WSDL doc used by ws binding
> @@ -450,12 +475,14 @@
>         Axis2ServiceClient.setServiceAndPort(wsBinding);
>         QName serviceQName = wsBinding.getServiceName();
>         String portName = wsBinding.getPortName();
> +
> +        Definition def = getDefinition(definition, serviceQName);
>
> -        WSDLToAxisServiceBuilder builder = new 
> WSDL11ToAxisServiceBuilder(definition, serviceQName, portName);
> +        WSDLToAxisServiceBuilder builder = new 
> WSDL11ToAxisServiceBuilder(def, serviceQName, portName);
>         builder.setServerSide(true);
>         // [rfeng] Add a custom resolver to work around WSCOMMONS-228
> -        builder.setCustomResolver(new URIResolverImpl(definition));
> -        builder.setBaseUri(definition.getDocumentBaseURI());
> +        builder.setCustomResolver(new URIResolverImpl(def));
> +        builder.setBaseUri(def.getDocumentBaseURI());
>         // [rfeng]
>         AxisService axisService = builder.populateService();
>
> @@ -476,7 +503,7 @@
>         }
>         // Use the existing WSDL
>         Parameter wsdlParam = new 
> Parameter(WSDLConstants.WSDL_4_J_DEFINITION, null);
> -        wsdlParam.setValue(definition);
> +        wsdlParam.setValue(def);
>         axisService.addParameter(wsdlParam);
>         Parameter userWSDL = new Parameter("useOriginalwsdl", "true");
>         axisService.addParameter(userWSDL);
>
> Modified: 
> incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultDataBindingExtensionPoint.java
> URL: 
> http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultDataBindingExtensionPoint.java?rev=614370&r1=614369&r2=614370&view=diff
> ==============================================================================
> ---  
> incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultDataBindingExtensionPoint.java 
> (original)
> +++ 
> incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultDataBindingExtensionPoint.java 
> Tue Jan 22 15:11:09 2008
> @@ -63,18 +63,17 @@
>     }
>
>     public void addDataBinding(DataBinding dataBinding) {
> -    if (logger.isLoggable(Level.FINE)) {
> - String className = dataBinding.getClass().getName();
> - boolean lazy = false;
> - if (dataBinding instanceof LazyDataBinding) {
> - className = ((LazyDataBinding) 
> dataBinding).dataBindingDeclaration.getClassName();
> - lazy = true;
> - }
> - logger.fine("Adding databinding: " + className + ";type="
> - + dataBinding.getName() + ",lazy=" + lazy);
> - }
> +        if (logger.isLoggable(Level.FINE)) {
> +            String className = dataBinding.getClass().getName();
> +            boolean lazy = false;
> +            if (dataBinding instanceof LazyDataBinding) {
> +                className = 
> ((LazyDataBinding)dataBinding).dataBindingDeclaration.getClassName();
> +                lazy = true;
> +            }
> +            logger.fine("Adding databinding: " + className + ";type=" + 
> dataBinding.getName() + ",lazy=" + lazy);
> +        }
>         databindings.add(dataBinding);
> - bindings.put(dataBinding.getName().toLowerCase(), dataBinding);
> +        bindings.put(dataBinding.getName().toLowerCase(), dataBinding);
>
>         String[] aliases = dataBinding.getAliases();
>         if (aliases != null) {
> @@ -111,8 +110,7 @@
>         // Get the databinding service declarations
>         Set<ServiceDeclaration> dataBindingDeclarations;
>         try {
> -            dataBindingDeclarations =
> - 
> ServiceDiscovery.getInstance().getServiceDeclarations(DataBinding.class);
> +            dataBindingDeclarations = 
> ServiceDiscovery.getInstance().getServiceDeclarations(DataBinding.class);
>         } catch (IOException e) {
>             throw new IllegalStateException(e);
>         }
> @@ -159,8 +157,7 @@
>         private DataBinding getDataBinding() {
>             if (dataBinding == null) {
>                 try {
> -                    Class<DataBinding> dataBindingClass =
> - 
> (Class<DataBinding>)dataBindingDeclaration.loadClass();
> +                    Class<DataBinding> dataBindingClass = 
> (Class<DataBinding>)dataBindingDeclaration.loadClass();
>                     Constructor<DataBinding> constructor = 
> dataBindingClass.getConstructor();
>                     dataBinding = constructor.newInstance();
>                 } catch (Exception e) {
>
> Modified: 
> incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/DOMHelper.java
> URL: 
> http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/DOMHelper.java?rev=614370&r1=614369&r2=614370&view=diff
> ==============================================================================
> ---  
> incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/DOMHelper.java 
> (original)
> +++ 
> incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/DOMHelper.java 
> Tue Jan 22 15:11:09 2008
> @@ -138,7 +138,7 @@
>                     qname = prefix + ":" + qname;
>                 }
>                 Element newElement = 
> element.getOwnerDocument().createElementNS(newName.getNamespaceURI(), 
> qname);
> -                newElement.setPrefix(prefix);
> +                // newElement.setPrefix(prefix);
>                 NodeList nodeList = element.getChildNodes();
>                 // Need to copy the nodes from the list fisrt as the 
> appendChild() will change the list
>                 int length = nodeList.getLength();
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
> For additional commands, e-mail: tuscany-commits-help@ws.apache.org
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-dev-help@ws.apache.org