This commit is contained in:
Arjen Poutsma
2007-11-10 04:18:22 +00:00
parent 96882a4e5b
commit fd387385ed
2 changed files with 21 additions and 9 deletions

View File

@@ -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.");

View File

@@ -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());
}