Skip to content

Commit 57fc696

Browse files
committed
SWS-549 - integrate AbstractWsSecurityInterceptor with EndpointExceptionResolver
1 parent 004ebb1 commit 57fc696

File tree

1 file changed

+21
-4
lines changed

1 file changed

+21
-4
lines changed

security/src/main/java/org/springframework/ws/soap/security/AbstractWsSecurityInterceptor.java

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.springframework.ws.client.WebServiceClientException;
2727
import org.springframework.ws.client.support.interceptor.ClientInterceptor;
2828
import org.springframework.ws.context.MessageContext;
29+
import org.springframework.ws.server.EndpointExceptionResolver;
2930
import org.springframework.ws.soap.SoapBody;
3031
import org.springframework.ws.soap.SoapFault;
3132
import org.springframework.ws.soap.SoapHeaderElement;
@@ -35,8 +36,9 @@
3536

3637
/**
3738
* Interceptor base class for interceptors that handle WS-Security. Can be used on the server side, registered in a
38-
* {@link org.springframework.ws.server.endpoint.mapping.AbstractEndpointMapping#setInterceptors(org.springframework.ws.server.EndpointInterceptor[]) endpoint mapping};
39-
* or on the client side, on the {@link org.springframework.ws.client.core.WebServiceTemplate#setInterceptors(ClientInterceptor[]) web service template}.
39+
* {@link org.springframework.ws.server.endpoint.mapping.AbstractEndpointMapping#setInterceptors(org.springframework.ws.server.EndpointInterceptor[])
40+
* endpoint mapping}; or on the client side, on the {@link org.springframework.ws.client.core.WebServiceTemplate#setInterceptors(ClientInterceptor[])
41+
* web service template}.
4042
* <p/>
4143
* Subclasses of this base class can be configured to secure incoming and secure outgoing messages. By default, both are
4244
* on.
@@ -60,6 +62,8 @@ public abstract class AbstractWsSecurityInterceptor implements SoapEndpointInter
6062

6163
private boolean validateResponse = true;
6264

65+
private EndpointExceptionResolver exceptionResolver;
66+
6367
/** Indicates whether server-side incoming request are to be validated. Defaults to <code>true</code>. */
6468
public void setValidateRequest(boolean validateRequest) {
6569
this.validateRequest = validateRequest;
@@ -80,6 +84,11 @@ public void setValidateResponse(boolean validateResponse) {
8084
this.validateResponse = validateResponse;
8185
}
8286

87+
/** Provide an {@link EndpointExceptionResolver} for resolving validation exceptions. */
88+
public void setExceptionResolver(EndpointExceptionResolver exceptionResolver) {
89+
this.exceptionResolver = exceptionResolver;
90+
}
91+
8392
/*
8493
* Server-side
8594
*/
@@ -252,8 +261,16 @@ protected boolean handleValidationException(WsSecurityValidationException ex, Me
252261
if (logger.isWarnEnabled()) {
253262
logger.warn("Could not validate request: " + ex.getMessage());
254263
}
255-
SoapBody response = ((SoapMessage) messageContext.getResponse()).getSoapBody();
256-
response.addClientOrSenderFault(ex.getMessage(), Locale.ENGLISH);
264+
if (exceptionResolver != null) {
265+
exceptionResolver.resolveException(messageContext, null, ex);
266+
}
267+
else {
268+
if (logger.isDebugEnabled()) {
269+
logger.debug("No exception resolver present, creating basic soap fault");
270+
}
271+
SoapBody response = ((SoapMessage) messageContext.getResponse()).getSoapBody();
272+
response.addClientOrSenderFault(ex.getMessage(), Locale.ENGLISH);
273+
}
257274
return false;
258275
}
259276

0 commit comments

Comments
 (0)