[Issue 36] New - wscompile rejects rpc/literal operation bindings when processing wsdl in nometadata web-app

View: New views
1 Messages — Rating Filter:   Alert me  

[Issue 36] New - wscompile rejects rpc/literal operation bindings when processing wsdl in nometadata web-app

by andrewdinn :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

https://jax-rpc.dev.java.net/issues/show_bug.cgi?id=36
                 Issue #|36
                 Summary|wscompile rejects rpc/literal operation bindings when
                        |processing wsdl in nometadata web-app
               Component|jax-rpc
                 Version|current
                Platform|PC
              OS/Version|All
                     URL|
                  Status|NEW
       Status whiteboard|
                Keywords|
              Resolution|
              Issue type|DEFECT
                Priority|P3
            Subcomponent|tck
             Assigned to|issues@jax-rpc
             Reported by|andrewdinn






------- Additional comments from andrewdinn@... Mon Nov 26 11:37:04 +0000 2007 -------
The problem happens when wscompile is invoked during deployment of a
jaxrpc-based web-app which uses unannotated classes configured via wsdl and
jaxrpc mapping xml files. The problem only arises if the operation bindings in
the wsdl employ style/use = rpc/literal. The error message

    <operation> is not SOAP-encoded

is generated.

The problem appears to be erroneous logic in the wsdl validation code. When it
finds an operation with style = rpc, wscompile invokes method
processSOAPOperationRPCStyle in class NoMetaDataModeller. This includes the
following test (line 630)

        if ((soapRequestBody.isLiteral() || !tokenListContains(
            soapRequestBody.getEncodingStyle(),
                SOAPConstants.NS_SOAP_ENCODING)) ||
            (soapResponseBody != null && (soapResponseBody.isLiteral() ||
                !tokenListContains(soapResponseBody.getEncodingStyle(),
                    SOAPConstants.NS_SOAP_ENCODING)))) {
                       
            throw new ModelerException(
                "nometadatamodeler.error.operationNotEncoded",
                info.portTypeOperation.getName());
        }

This appears to be miscoded logic. The test should be passed if the request (and
response, if any) i) has style/use = rpc/literal or ii) has style/use =
rpc/encoded where encoding = SOAP. The code above rejects case i).

The correct test ought to be

        if ((!soapRequestBody.isLiteral() && !tokenListContains(
            soapRequestBody.getEncodingStyle(),
                SOAPConstants.NS_SOAP_ENCODING)) ||
            (soapResponseBody != null && (!soapResponseBody.isLiteral() &&
                !tokenListContains(soapResponseBody.getEncodingStyle(),
                    SOAPConstants.NS_SOAP_ENCODING)))) {
                       
            throw new ModelerException(
                "nometadatamodeler.error.operationNotEncoded",
                info.portTypeOperation.getName());
        }

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@...
For additional commands, e-mail: issues-help@...