[
https://issues.apache.org/jira/browse/AXIS2-5835?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15853819#comment-15853819
]
Jeff Thomas commented on AXIS2-5835:
------------------------------------
I believe the problem can be easily reproduced in the existing JUnit test by
commenting out the followling line where the default Envelope is set in the
MessageContext.
{code}modules\integration\test\org\apache\axis2\faults\FaultSerializationTest{code}
{code}
public void testFaultSerialization() throws Exception {
...
ConfigurationContext cc = ConfigurationContextFactory
.createDefaultConfigurationContext();
MessageContext ctx = cc.createMessageContext();
SOAPFactory fac = OMAbstractFactory.getSOAP12Factory();
// ctx.setEnvelope(fac.getDefaultEnvelope());
...
}
{code}
I was also working on a similar unit-test and had forgotten to add the envelope
to the context - which resulted in my observed missing fault-code. It may be
that I accidentally created a situation which would normally not occur???
However, if the MessageContext Envelope is missing it results in this special
case in no Fault-Code Value being written.
> AxisFault(SOAPFault) Constructor with SOAP 1.2 SOAPFault incorrectly
> propagates FaultCode
> -----------------------------------------------------------------------------------------
>
> Key: AXIS2-5835
> URL: https://issues.apache.org/jira/browse/AXIS2-5835
> Project: Axis2
> Issue Type: Bug
> Components: kernel
> Affects Versions: 1.7.4
> Reporter: Jeff Thomas
> Fix For: 1.7.5
>
>
> If the AxisFault constuctor is used with a SOAP 1.2 SOAPFault representation
> (containing SOAP12FaultCodeImpl), the fault-code is incorrectly propagated to
> the new fault MessageContext.
> Original SOAPFault:
> {code:xml}
> <soapenv:Fault xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
> <soapenv:Code>
> <soapenv:Value>soapenv:Receiver</soapenv:Value>
> <soapenv:SubCode>
> <soapenv:Value
> xmlns:test="http://www.test.com">test:SOME_CODE</soapenv:Value>
> </soapenv:SubCode>
> </soapenv:Code>
> <soapenv:Reason>
> <soapenv:Text xml:lang="en-US">Exception occurred.</soapenv:Text>
> </soapenv:Reason>
> <soapenv:Detail/>
> </soapenv:Fault>
> {code}
> The result:
> {code:xml}
> <soapenv:Fault xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
> <soapenv:Code>
> <soapenv:Value/>
> <soapenv:SubCode>
> <soapenv:Value
> xmlns:test="http://www.test.com">test:SOME_CODE</soapenv:Value>
> </soapenv:SubCode>
> </soapenv:Code>
> <soapenv:Reason>
> <soapenv:Text xml:lang="en-US">Exception occurred.</soapenv:Text>
> </soapenv:Reason>
> <soapenv:Detail/>
> </soapenv:Fault>
> {code}
> NOTE: Here the Code/Value should be "soapenv:Receiver" but is empty.
> Possible/Probable Reason: (?)
> In private static method
> "MessageContextBuilder.createFaultEnvelope(MessageContext, Throwable)",
> {code:title=MessageContextBuilder.java|borderStyle=solid}
> ...
> else if (axisFault != null) {
> ...
> if (axisFault.getFaultCodeElement() != null) {
> fault.setCode(axisFault.getFaultCodeElement());
> soapFaultCode = axisFault.getFaultCodeElement().getText();
>
> }
> {code}
> If the SOAPFaultCodeElement is SOAP 1.2,
> {code}axisFault.getFaultCodeElement().getText() = null{code}. I believe here
> a check needs to be done on the SOAPFaultCode if SOAP 1.1 or 1.2 and in the
> event of 1.2 it should be {code}soapFaultCode =
> axisFault.getFaultCodeElement().getValue().getText();{code}.
> The result is that in the follow-up code-block the value text is set to an
> empty string.
> {code}
> if (context.isSOAP11()) {
> ...
> } else {
> ...
> SOAPFaultValue value = fault.getCode().getValue();
> ...
> OMNamespace namespace = value.getNamespace();
> soapFaultCode = switchNamespacePrefix(soapFaultCode, namespace);
> value.setText(soapFaultCode);
> }
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]