[ 
https://issues.apache.org/jira/browse/TUSCANY-2059?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12574789#action_12574789
 ] 

Simon Nash commented on TUSCANY-2059:
-------------------------------------

The processNoArgAndVoidReturnMethods() method in Java2WSDLHelper has code to 
fix up the WSDL generated by Axis2 to ensure that the correct two-way and 
one-way WSDL patterns are in place.  There's an itest to verify this is working 
(see itest/ws-void-args-return).

The problem here is that this fixup code has a limitation that is exposed by 
the particular case of an interface whose methods all have only void arguments 
and return type.  In processNoArgAndVoidReturnMethods() there is code like this:
        Element schema = null;
        Document document = null;
        Types types = definition.getTypes();
        if (types != null) {  // [1]
            for (Object ext : types.getExtensibilityElements()) {
                if (ext instanceof Schema) {
                    Element element = ((Schema)ext).getElement();
                    if 
(element.getAttribute("targetNamespace").equals(namespaceURI)) {
                        schema = element;
                        document = schema.getOwnerDocument();
                        break;
                    }
                }
            }
        }
        if (document == null) {
            return;  // [2]
        }
        .... code to fix up the WSDL follows ....

The test for types != null (see [1]) will be false in the case of an interface 
whose methods all have void arguments and return type, because the WSDL 
document generated by Axis2 has no schema types.  As a result, the "document" 
variable is null, and the method returns without doing any fixup (see [2]).

The fix is to add code for this case to create a new schema element  within a 
DOM document and set it into the WSDL4J Definition as an extensibility element. 
 When I wrote this fixup code, my XML knowledge wasn't sufficient to attempt 
this, and even now I think it would take me quite some time to figure it out.

Would anyone care to make an attempt at adding the necessary code or post some 
pseudo-code here to point me in the right direction?

> Exception when using binding.ws instead of binding.sca. Interface contains 
> only methods without any in/out parameters and return values
> ---------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: TUSCANY-2059
>                 URL: https://issues.apache.org/jira/browse/TUSCANY-2059
>             Project: Tuscany
>          Issue Type: Bug
>          Components: Java SCA Core Runtime
>    Affects Versions: Java-SCA-1.1
>         Environment: Windows XP SP2, Intel Core 2 CPU, 2.6, 2GB Ram, jdk 
> 1.5.0_10 
>            Reporter: Daniel Stucky
>            Assignee: Raymond Feng
>         Attachments: test.zip
>
>
> I have the following Java Interface that works with binding.sca:
> public interface Gamma
> {     
>       void start();                   
>       void doSomething();
>       void stop();
> }
> When I use binding.ws (I let Tuscany create the WSDL interfaces 
> automatically), I get the following exception (see below):
> If I add a parameter (e.g. int x) to any of the methods or I replace any 
> return type void by a type (e.g. int) it works.
> Does WSDL not allow services without any In/Out parameters ?
> java.lang.reflect.UndeclaredThrowableException
>       at $Proxy12.getRef(Unknown Source)
>       at services.AlphaImpl.run(AlphaImpl.java:27)
>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>       at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>       at java.lang.reflect.Method.invoke(Method.java:585)
>       at 
> org.apache.tuscany.sca.implementation.java.invocation.JavaImplementationInvoker.invoke(JavaImplementationInvoker.java:105)
>       at 
> org.apache.tuscany.sca.core.databinding.wire.PassByValueInterceptor.invoke(PassByValueInterceptor.java:88)
>       at 
> org.apache.tuscany.sca.core.invocation.JDKInvocationHandler.invoke(JDKInvocationHandler.java:249)
>       at 
> org.apache.tuscany.sca.core.invocation.JDKInvocationHandler.invoke(JDKInvocationHandler.java:146)
>       at $Proxy11.run(Unknown Source)
>       at launch.Launch.main(Launch.java:14) Caused by: 
> org.apache.tuscany.sca.interfacedef.util.FaultException: An unknown message 
> label has been encountered: In
>       at 
> org.apache.tuscany.sca.binding.ws.axis2.Axis2BindingInvoker.invoke(Axis2BindingInvoker.java:80)
>       at 
> org.apache.tuscany.sca.core.databinding.wire.DataTransformationInterceptor.invoke(DataTransformationInterceptor.java:74)
>       at 
> org.apache.tuscany.sca.core.invocation.JDKInvocationHandler.invoke(JDKInvocationHandler.java:249)
>       at 
> org.apache.tuscany.sca.core.invocation.JDKInvocationHandler.invoke(JDKInvocationHandler.java:146)
>       ... 12 more
> I also tried it with version 1.2, the exception changed to this:
> org.osoa.sca.ServiceRuntimeException: Target fault type cannot be resolved: 
> null
>       at 
> org.apache.tuscany.sca.core.databinding.wire.DataTransformationInterceptor.invoke(DataTransformationInterceptor.java:134)
>       at 
> org.apache.tuscany.sca.core.invocation.JDKInvocationHandler.invoke(JDKInvocationHandler.java:267)
>       at 
> org.apache.tuscany.sca.core.invocation.JDKInvocationHandler.invoke(JDKInvocationHandler.java:155)
>       at $Proxy12.getRef(Unknown Source)
>       at services.AlphaImpl.run(AlphaImpl.java:27)
>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>       at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>       at java.lang.reflect.Method.invoke(Method.java:585)
>       at 
> org.apache.tuscany.sca.implementation.java.invocation.JavaImplementationInvoker.invoke(JavaImplementationInvoker.java:109)
>       at 
> org.apache.tuscany.sca.core.databinding.wire.PassByValueInterceptor.invoke(PassByValueInterceptor.java:108)
>       at 
> org.apache.tuscany.sca.binding.sca.impl.SCABindingInvoker.invoke(SCABindingInvoker.java:61)
>       at 
> org.apache.tuscany.sca.core.databinding.wire.PassByValueInterceptor.invoke(PassByValueInterceptor.java:108)
>       at 
> org.apache.tuscany.sca.core.invocation.JDKInvocationHandler.invoke(JDKInvocationHandler.java:267)
>       at 
> org.apache.tuscany.sca.core.invocation.JDKInvocationHandler.invoke(JDKInvocationHandler.java:155)
>       at $Proxy11.run(Unknown Source)
>       at launch.Launch.main(Launch.java:14)
> Caused by: org.apache.tuscany.sca.interfacedef.util.FaultException: Target 
> fault type cannot be resolved: null
>       at 
> org.apache.tuscany.sca.binding.ws.axis2.Axis2BindingInvoker.invoke(Axis2BindingInvoker.java:97)
>       at 
> org.apache.tuscany.sca.core.databinding.wire.DataTransformationInterceptor.invoke(DataTransformationInterceptor.java:78)
>       ... 16 more
> Caused by: org.apache.axis2.AxisFault: Target fault type cannot be resolved: 
> null
>       at 
> org.apache.axis2.util.Utils.getInboundFaultFromMessageContext(Utils.java:486)
>       at 
> org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:343)
>       at 
> org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:389)
>       at 
> org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:211)
>       at 
> org.apache.axis2.client.OperationClient.execute(OperationClient.java:163)
>       at 
> org.apache.tuscany.sca.binding.ws.axis2.Axis2BindingInvoker.invokeTarget(Axis2BindingInvoker.java:118)
>       at 
> org.apache.tuscany.sca.binding.ws.axis2.Axis2BindingInvoker.invoke(Axis2BindingInvoker.java:89)
>       ... 17 more

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to