1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.springframework.ws.soap.server.endpoint;
18
19 import java.util.Locale;
20
21 import org.springframework.util.Assert;
22 import org.springframework.util.StringUtils;
23 import org.springframework.ws.context.MessageContext;
24 import org.springframework.ws.server.endpoint.AbstractEndpointExceptionResolver;
25 import org.springframework.ws.soap.SoapBody;
26 import org.springframework.ws.soap.SoapFault;
27 import org.springframework.ws.soap.SoapMessage;
28
29
30
31
32
33
34
35
36
37
38 public class SimpleSoapExceptionResolver extends AbstractEndpointExceptionResolver {
39
40 private Locale locale = Locale.ENGLISH;
41
42
43
44
45
46
47 public Locale getLocale() {
48 return locale;
49 }
50
51
52
53
54
55
56 public void setLocale(Locale locale) {
57 Assert.notNull(locale, "locale must not be null");
58 this.locale = locale;
59 }
60
61 @Override
62 protected final boolean resolveExceptionInternal(MessageContext messageContext, Object endpoint, Exception ex) {
63 Assert.isInstanceOf(SoapMessage.class, messageContext.getResponse(),
64 "SimpleSoapExceptionResolver requires a SoapMessage");
65 SoapMessage response = (SoapMessage) messageContext.getResponse();
66 String faultString = StringUtils.hasLength(ex.getMessage()) ? ex.getMessage() : ex.toString();
67 SoapBody body = response.getSoapBody();
68 SoapFault fault = body.addServerOrReceiverFault(faultString, getLocale());
69 customizeFault(messageContext, endpoint, ex, fault);
70 return true;
71 }
72
73
74
75
76
77
78
79
80
81
82 protected void customizeFault(MessageContext messageContext, Object endpoint, Exception ex, SoapFault fault) {
83 }
84 }