You are viewing a plain text version of this content. The canonical link for it is here.
Posted to wsif-dev@ws.apache.org by "Rhett DeWall (JIRA)" <ws...@ws.apache.org> on 2005/08/22 19:14:09 UTC

[jira] Commented: (WSIF-74) Multiple soap:header and soap:headerfault elements not accepted by WSIFOperation_ApacheAxis.

    [ http://issues.apache.org/jira/browse/WSIF-74?page=comments#action_12319618 ] 

Rhett DeWall commented on WSIF-74:
----------------------------------

My apologies.  The attached file is not correct, and should be disregarded.

The fix to WSIFOperation_ApacheAxis.java is for the method parseSOAPHeaderElement, which is provided below, and while the change are still to call getExtElems versus getExtElem, further changes were required to meet getExtElems interface requirements.

    /**
     * Parses any SOAP header elements in the binding input or output.
     * The WSDL soap:header element has the form:
     *    <soap:header message="qname" part="nmtoken" use="literal|encoded"
     *                 encodingStyle="uri-list"? namespace="uri"?>*
     *       <soap:headerfault message="qname" part="nmtoken" use="literal|encoded"
     *                         encodingStyle="uri-list"? namespace="uri"?/>*
     *    <soap:header>
     */
    private void parseSOAPHeaderElement(Object element) throws WSIFException {
        if (!_doParseSOAPHeaderElement)
        {
            return;
        }
        List extensabilityElements;
        if (element instanceof BindingInput) {
            extensabilityElements =
                ((BindingInput) element).getExtensibilityElements();
        } else if (element instanceof BindingOutput) {
            extensabilityElements =
                ((BindingOutput) element).getExtensibilityElements();
        } else {
            throw new WSIFException(
                "internal error, unexpected object: " + element);
        }
        
        List soapHeaderParts = new ArrayList();
        List soapHeaderFaultParts = new ArrayList();
        
        List soapHeaders =
            wsifPort.getExtElems(
            element,
            javax.wsdl.extensions.soap.SOAPHeader.class,
            extensabilityElements);
        if ((soapHeaders == null) || (soapHeaders.size() == 0))
        {
            return;
        }
        for (int i = 0; i < soapHeaders.size(); i++)
        {
            SOAPHeader soapHeader = (SOAPHeader)soapHeaders.get(i);
            
            QName messageName = soapHeader.getMessage();
            if (messageName == null) {
                throw new WSIFException(
                    "no message attribute on soap:header: " + soapHeader);
            }
            String messagePart = soapHeader.getPart();
            if (messagePart == null) {
                throw new WSIFException(
                    "no part attribute on soap:header: " + soapHeader);
            }
            Part soapHeaderPart = getPart(messageName, messagePart);
            if (soapHeaderPart == null) {
                throw new WSIFException(
                    "non existent part specified on soap:header: "
                        + soapHeader);
            }
            soapHeaderParts.add(soapHeaderPart);
            
            List soapHeaderFaults =
                wsifPort.getExtElems(
                soapHeader,
                javax.wsdl.extensions.soap.SOAPHeaderFault.class,
                extensabilityElements);
            if ((soapHeaderFaults == null) || (soapHeaderFaults.size() == 0))
            {
                continue;
            }
            for (int j = 0; j < soapHeaderFaults.size(); j++)
            {
                SOAPHeaderFault soapHeaderFault = 
                    (SOAPHeaderFault)soapHeaderFaults.get(j);
            
                messageName = soapHeader.getMessage();
                if (messageName == null) {
                    throw new WSIFException(
                        "no message attribute on soap:header: " + soapHeader);
                }
                messagePart = soapHeader.getPart();
                if (messagePart == null) {
                    throw new WSIFException(
                        "no part attribute on soap:header: " + soapHeader);
                }
                Part soapHeaderFaultPart = getPart(messageName, messagePart);
                if (soapHeaderFaultPart == null) {
                    throw new WSIFException(
                        "non existent part specified on soap:header: "
                            + soapHeader);
                }
                soapHeaderFaultParts.add(soapHeaderFaultPart);
            }
        }
        
        if (element instanceof BindingInput) {
            this.inputSOAPHeader = soapHeaderParts;
            this.inputSOAPHeaderFault = soapHeaderFaultParts;
        } else {
            this.outputSOAPHeader = soapHeaderParts;
            this.outputSOAPHeaderFault = soapHeaderFaultParts;
        }
        //TODO now go and do something with them...
    }


> Multiple soap:header and soap:headerfault elements not accepted by WSIFOperation_ApacheAxis.
> --------------------------------------------------------------------------------------------
>
>          Key: WSIF-74
>          URL: http://issues.apache.org/jira/browse/WSIF-74
>      Project: Axis-WSIF
>         Type: Bug
>   Components: Basic Architecture
>     Versions: 2.0
>     Reporter: Rhett DeWall
>  Attachments: WSIFOperation_ApacheAxis.java
>
> WSDL 1.1 states that multiple soap:header and soap:headerfault elements are valid; however, WSIFOperation_ApacheAxis.java only allows one per operation.  WSDL 1.1 excerpt listed below:
> ------------------------
> <definitions .... >
>     <binding .... >
>         <operation .... >
>            <input>
>              <soap:header message="qname" part="nmtoken" use="literal|encoded"
>                           encodingStyle="uri-list"? namespace="uri"?>*
>                <soap:headerfault message="qname" part="nmtoken" use="literal|encoded"
>                                  encodingStyle="uri-list"? namespace="uri"?/>*
>              <soap:header>                                
>            </input>
>            <output>
>                <soap:header message="qname" part="nmtoken" use="literal|encoded"
>                             encodingStyle="uri-list"? namespace="uri"?>*
>                  <soap:headerfault message="qname" part="nmtoken" use="literal|encoded"
>                                    encodingStyle="uri-list"? namespace="uri"?/>*
>                <soap:header>                                
>            </output>
>         </operation>
>     </binding>
> </definitions>
> ------------------------
> A fix is attached whereby lines 473 and 496 have been changed to call getExtElems() versus getExtElem.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira