Details
-
Bug
-
Status: Resolved
-
Critical
-
Resolution: Fixed
-
1.3.4
-
None
Description
Using ode-jbi.messageMapper=org.apache.ode.jbi.msgmap.JbiWsdl11WrapperMapper, if a ws operation defines multiple fault types in the wsdl, when this operation is invoked and returns a fault message, the fault message that catch by bpel will always be the first fault type (first in alphabetical order).
There is a mistake with JbiWsdl11WrapperMapper.toFaultType(line 207). if (etype.equals(p.getElementName())) will always return the first fault type in the fault types list. It should be changed to NOT EQUALS - if (!etype.equals(p.getElementName()))
Example:
When the search operation is called, the endpoint returns UnexpectedErrorFault . But when the fault message reaches bpel script, the fault message has somehow converted to InvalidSObjectFault.
<definitions>
<operation name="search">
<soap:operation soapAction=""/>
<input>
<soap:header use="literal" message="tns:Header" part="SessionHeader"/>
<soap:header use="literal" message="tns:Header" part="CallOptions"/>
<soap:header use="literal" message="tns:Header" part="PackageVersionHeader"/>
<soap:body parts="parameters" use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
<fault name="InvalidSObjectFault">
<soap:fault name="InvalidSObjectFault" use="literal"/>
</fault>
<fault name="InvalidFieldFault">
<soap:fault name="InvalidFieldFault" use="literal"/>
</fault>
<fault name="MalformedSearchFault">
<soap:fault name="MalformedSearchFault" use="literal"/>
</fault>
<fault name="UnexpectedErrorFault">
<soap:fault name="UnexpectedErrorFault" use="literal"/>
</fault>
</operation>
</definitions>