You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by "Amila Chinthaka Suriarachchi (JIRA)" <ji...@apache.org> on 2008/04/18 06:11:22 UTC

[jira] Commented: (AXIS2-3749) Invalid soap fault

    [ https://issues.apache.org/jira/browse/AXIS2-3749?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12590281#action_12590281 ] 

Amila Chinthaka Suriarachchi commented on AXIS2-3749:
-----------------------------------------------------

private static void setFaultCode(MessageContext messageContext, String faultCode,
                                     String faultSubCode) {
        SOAPFactory soapFac = OMAbstractFactory.getSOAP12Factory();
        SOAPFaultCode soapFaultCode = soapFac.createSOAPFaultCode();
        if (messageContext.isSOAP11()) {
            soapFaultCode.setText(faultCode);
        } else {
            SOAPFaultValue soapFaultValue = soapFac.createSOAPFaultValue(soapFaultCode);
            soapFaultValue.setText(SOAP12Constants.SOAP_DEFAULT_NAMESPACE_PREFIX + ":" +
                    SOAP12Constants.FAULT_CODE_SENDER);
            SOAPFaultSubCode soapFaultSubCode = soapFac.createSOAPFaultSubCode(soapFaultCode);
            SOAPFaultValue soapFaultSubcodeValue = soapFac.createSOAPFaultValue(soapFaultSubCode);
            soapFaultSubcodeValue.setText(AddressingConstants.WSA_DEFAULT_PREFIX + ":" + faultCode);
            if (faultSubCode != null) {
                SOAPFaultSubCode soapFaultSubCode2 =
                        soapFac.createSOAPFaultSubCode(soapFaultSubCode);
                SOAPFaultValue soapFaultSubcodeValue2 =
                        soapFac.createSOAPFaultValue(soapFaultSubCode2);
                String namespace =
                        (String) messageContext.getProperty(AddressingConstants.WS_ADDRESSING_VERSION);
                if (namespace == null) {
                    namespace = Final.WSA_NAMESPACE;
                }
                OMNamespace wsaNS = soapFac.createOMNamespace(namespace,
                        AddressingConstants.WSA_DEFAULT_PREFIX);
                soapFaultSubcodeValue2.declareNamespace(wsaNS);
                soapFaultSubcodeValue2
                        .setText(AddressingConstants.WSA_DEFAULT_PREFIX + ":" + faultSubCode);
            }
        }
        messageContext.setProperty(SOAP12Constants.SOAP_FAULT_CODE_LOCAL_NAME, soapFaultCode);
    }

have a look at this method. I think this line cause this error
soapFaultSubcodeValue.setText(AddressingConstants.WSA_DEFAULT_PREFIX + ":" + faultCode);

first of all why it sets the faultCode as sopaFaultSubcodeValue? is this a mistake.

I'll have another look and attached a patch



> Invalid soap fault
> ------------------
>
>                 Key: AXIS2-3749
>                 URL: https://issues.apache.org/jira/browse/AXIS2-3749
>             Project: Axis 2.0 (Axis2)
>          Issue Type: Bug
>            Reporter: Amila Chinthaka Suriarachchi
>            Priority: Blocker
>
> I invoke a service which has engaged Addressing with an invalid action (by a mistake) and I got this exception
> java.lang.NullPointerException
> 	at org.apache.axis2.handlers.addressing.AddressingInFaultHandler.invoke(AddressingInFaultHandler.java:96)
> 	at org.apache.axis2.engine.Phase.invoke(Phase.java:295)
> 	at org.apache.axis2.engine.AxisEngine.invoke(AxisEngine.java:264)
> 	at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:163)
> 	at org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:363)
> 	at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:416)
> 	at org.apache.axis2.description.OutInAxisOperationClient$NonBlockingInvocationWorker.run(OutInAxisOperation.java:441)
> 	at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1061)
> 	at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:575)
> 	at java.lang.Thread.run(Thread.java:595)
> this exception happens at here.
> faultLocalName = subCode.getValue().getTextAsQName().getLocalPart();
> Then I look at the soap fault.
> <soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
>       <soapenv:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
>          <wsa:Action>http://www.w3.org/2005/08/addressing/fault</wsa:Action>
>          <wsa:RelatesTo>urn:uuid:6C771F78868CBF931B1208441597970</wsa:RelatesTo>
>       </soapenv:Header>
>       <soapenv:Body>
>          <soapenv:Fault>
>             <soapenv:Code>
>                <soapenv:Value>soapenv:Sender</soapenv:Value>
>                <soapenv:Subcode>
>                   <soapenv:Value>wsa:ActionNotSupported</soapenv:Value>
>                </soapenv:Subcode>
>             </soapenv:Code>
>             <soapenv:Reason>
>                <soapenv:Text xml:lang="en-US">The [action] cannot be processed at the receiver.</soapenv:Text>
>             </soapenv:Reason>
>             <soapenv:Detail>
>                <wsa:ProblemAction xmlns:wsa="http://www.w3.org/2005/08/addressing">
>                   <wsa:Action>urn:PlainTestInOutOperation1</wsa:Action>
>                </wsa:ProblemAction>
>             </soapenv:Detail>
>          </soapenv:Fault>
>       </soapenv:Body>
>    </soapenv:Envelope>
> if we look at this line 
> <soapenv:Value>wsa:ActionNotSupported</soapenv:Value>
> the prefix wsa  is not declared. 
> I think this means Axiom does not serialize soap envelop properly when there a TextQNames.

-- 
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: axis-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-dev-help@ws.apache.org