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