SWS-226
This commit is contained in:
@@ -65,27 +65,27 @@ public abstract class AbstractSoapFaultDefinitionExceptionResolver extends Abstr
|
||||
if (definition == null) {
|
||||
return false;
|
||||
}
|
||||
if (!StringUtils.hasLength(definition.getFaultStringOrReason())) {
|
||||
String faultString = StringUtils.hasLength(ex.getMessage()) ? ex.getMessage() : ex.toString();
|
||||
definition.setFaultStringOrReason(faultString);
|
||||
|
||||
String faultStringOrReason = definition.getFaultStringOrReason();
|
||||
if (!StringUtils.hasLength(faultStringOrReason)) {
|
||||
faultStringOrReason = StringUtils.hasLength(ex.getMessage()) ? ex.getMessage() : ex.toString();
|
||||
}
|
||||
SoapBody soapBody = ((SoapMessage) messageContext.getResponse()).getSoapBody();
|
||||
SoapFault fault = null;
|
||||
|
||||
if (SoapFaultDefinition.SERVER.equals(definition.getFaultCode()) ||
|
||||
SoapFaultDefinition.RECEIVER.equals(definition.getFaultCode())) {
|
||||
fault = soapBody.addServerOrReceiverFault(definition.getFaultStringOrReason(), definition.getLocale());
|
||||
fault = soapBody.addServerOrReceiverFault(faultStringOrReason, definition.getLocale());
|
||||
}
|
||||
else if (SoapFaultDefinition.CLIENT.equals(definition.getFaultCode()) ||
|
||||
SoapFaultDefinition.SENDER.equals(definition.getFaultCode())) {
|
||||
fault = soapBody.addClientOrSenderFault(definition.getFaultStringOrReason(), definition.getLocale());
|
||||
fault = soapBody.addClientOrSenderFault(faultStringOrReason, definition.getLocale());
|
||||
}
|
||||
else {
|
||||
// custom code, only supported for SOAP 1.1
|
||||
if (soapBody instanceof Soap11Body) {
|
||||
Soap11Body soap11Body = (Soap11Body) soapBody;
|
||||
fault = soap11Body.addFault(definition.getFaultCode(), definition.getFaultStringOrReason(),
|
||||
definition.getLocale());
|
||||
fault = soap11Body.addFault(definition.getFaultCode(), faultStringOrReason, definition.getLocale());
|
||||
}
|
||||
else {
|
||||
logger.warn("SOAP 1.2 does not allow custom FaultCodes, only SENDER or RECEIVER.");
|
||||
|
||||
@@ -149,7 +149,6 @@ public class SoapFaultMappingExceptionResolverTest extends XMLTestCase {
|
||||
resolver.setExceptionMappings(mappings);
|
||||
SoapFaultDefinition defaultFault = new SoapFaultDefinition();
|
||||
defaultFault.setFaultCode(SoapFaultDefinition.CLIENT);
|
||||
defaultFault.setFaultStringOrReason("faultstring");
|
||||
resolver.setDefaultFault(defaultFault);
|
||||
MessageFactory messageFactory = MessageFactory.newInstance(SOAPConstants.SOAP_1_1_PROTOCOL);
|
||||
SOAPMessage message = messageFactory.createMessage();
|
||||
@@ -164,7 +163,20 @@ public class SoapFaultMappingExceptionResolverTest extends XMLTestCase {
|
||||
Soap11Fault fault = (Soap11Fault) response.getSoapBody().getFault();
|
||||
assertEquals("Invalid fault code on fault", SoapVersion.SOAP_11.getClientOrSenderFaultName(),
|
||||
fault.getFaultCode());
|
||||
assertEquals("Invalid fault string on fault", "faultstring", fault.getFaultStringOrReason());
|
||||
assertEquals("Invalid fault string on fault", "bla", fault.getFaultStringOrReason());
|
||||
assertNull("Detail on fault", fault.getFaultDetail());
|
||||
|
||||
// SWS-226
|
||||
result = resolver.resolveException(context, null, new IllegalArgumentException());
|
||||
assertTrue("resolveException returns false", result);
|
||||
assertTrue("Context has no response", context.hasResponse());
|
||||
response = (SoapMessage) context.getResponse();
|
||||
assertTrue("Response has no fault", response.getSoapBody().hasFault());
|
||||
fault = (Soap11Fault) response.getSoapBody().getFault();
|
||||
assertEquals("Invalid fault code on fault", SoapVersion.SOAP_11.getClientOrSenderFaultName(),
|
||||
fault.getFaultCode());
|
||||
assertEquals("Invalid fault string on fault", "java.lang.IllegalArgumentException",
|
||||
fault.getFaultStringOrReason());
|
||||
assertNull("Detail on fault", fault.getFaultDetail());
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user