1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.springframework.ws.soap.server.endpoint.adapter.method;
18
19 import java.util.List;
20 import javax.xml.namespace.QName;
21
22 import org.springframework.core.MethodParameter;
23 import org.springframework.ws.context.MessageContext;
24 import org.springframework.ws.server.endpoint.adapter.method.AbstractMethodArgumentResolverTestCase;
25 import org.springframework.ws.soap.SoapHeaderElement;
26 import org.springframework.ws.soap.SoapMessage;
27 import org.springframework.ws.soap.server.endpoint.annotation.SoapHeader;
28
29 import org.junit.Before;
30 import org.junit.Test;
31
32 import static org.junit.Assert.*;
33
34
35
36
37 public class SoapHeaderElementMethodArgumentResolverTest extends AbstractMethodArgumentResolverTestCase {
38
39 private static final QName HEADER_QNAME = new QName(NAMESPACE_URI, "header");
40
41 private static final String HEADER_CONTENT = "content";
42
43 private SoapHeaderElementMethodArgumentResolver resolver;
44
45 private MessageContext messageContext;
46
47 private MethodParameter soapHeaderWithEmptyValue;
48
49 private MethodParameter soapHeaderElementParameter;
50
51 private MethodParameter soapHeaderElementListParameter;
52
53 private MethodParameter soapHeaderMismatch;
54
55 private MethodParameter soapHeaderMismatchList;
56
57 @Before
58 public void setUp() throws Exception {
59 resolver = new SoapHeaderElementMethodArgumentResolver();
60 messageContext = createSaajMessageContext();
61 SoapMessage message = (SoapMessage) messageContext.getRequest();
62 for (int i = 0; i < 3; i++) {
63 SoapHeaderElement element = message.getSoapHeader().addHeaderElement(HEADER_QNAME);
64 element.setText(HEADER_CONTENT + i);
65 }
66 soapHeaderWithEmptyValue =
67 new MethodParameter(getClass().getMethod("soapHeaderWithEmptyValue", SoapHeaderElement.class), 0);
68 soapHeaderElementParameter =
69 new MethodParameter(getClass().getMethod("soapHeaderElement", SoapHeaderElement.class), 0);
70 soapHeaderElementListParameter =
71 new MethodParameter(getClass().getMethod("soapHeaderElementList", List.class), 0);
72 soapHeaderMismatch =
73 new MethodParameter(getClass().getMethod("soapHeaderMismatch", SoapHeaderElement.class), 0);
74 soapHeaderMismatchList = new MethodParameter(getClass().getMethod("soapHeaderMismatchList", List.class), 0);
75 }
76
77 @Test
78 public void supportsParameter() throws Exception {
79 assertTrue("resolver does not support soapHeaderElement",
80 resolver.supportsParameter(soapHeaderElementParameter));
81 assertTrue("resolver does not support List<soapHeaderElement>",
82 resolver.supportsParameter(soapHeaderElementListParameter));
83 }
84
85 @Test(expected = IllegalArgumentException.class)
86 public void failOnEmptyValue() throws Exception {
87 resolver.resolveArgument(messageContext, soapHeaderWithEmptyValue);
88 }
89
90 @Test
91 public void resolveSoapHeaderElement() throws Exception {
92 Object result = resolver.resolveArgument(messageContext, soapHeaderElementParameter);
93
94 assertTrue("result must be a SoapHeaderElement", SoapHeaderElement.class.isAssignableFrom(result.getClass()));
95
96 SoapHeaderElement element = (SoapHeaderElement) result;
97
98 assertTrue("headers must be equal", element.getName().equals(HEADER_QNAME));
99 assertEquals("header text must be equal to [" + HEADER_CONTENT + "0]", HEADER_CONTENT + "0", element.getText());
100 }
101
102 @Test
103 @SuppressWarnings("unchecked")
104 public void resolveSoapHeaderElementList() throws Exception {
105 Object result = resolver.resolveArgument(messageContext, soapHeaderElementListParameter);
106
107 assertTrue("result must be a List", List.class.isAssignableFrom(result.getClass()));
108
109 List<SoapHeaderElement> elements = (List) result;
110
111 assertTrue("size", elements.size() > 1);
112 for (int i = 0; i < elements.size(); i++) {
113 SoapHeaderElement element = elements.get(i);
114 assertTrue("headers must be equal", element.getName().equals(HEADER_QNAME));
115 assertEquals("header must be equal to [" + HEADER_CONTENT + i + "]", HEADER_CONTENT + i,
116 elements.get(i).getText());
117 }
118 }
119
120 @Test
121 public void resolveSoapHeaderMismatch() throws Exception {
122 Object result = resolver.resolveArgument(messageContext, soapHeaderMismatch);
123 assertNull(result);
124 }
125
126 @Test
127 public void resolveSoapHeaderMismatchList() throws Exception {
128 Object result = resolver.resolveArgument(messageContext, soapHeaderMismatchList);
129 assertTrue("result must be a List", List.class.isAssignableFrom(result.getClass()));
130 assertTrue("result List must be empty", ((List) result).isEmpty());
131 }
132
133 public void soapHeaderWithEmptyValue(@SoapHeader("") SoapHeaderElement element) {
134 }
135
136 public void soapHeaderElement(@SoapHeader("{http://springframework.org/ws}header") SoapHeaderElement element) {
137 }
138
139 public void soapHeaderElementList(@SoapHeader(
140 "{http://springframework.org/ws}header") List<SoapHeaderElement> elements) {
141 }
142
143 public void soapHeaderMismatch(@SoapHeader("{http://springframework.org/ws}xxx") SoapHeaderElement element) {
144 }
145
146 public void soapHeaderMismatchList(@SoapHeader(
147 "{http://springframework.org/ws}xxx") List<SoapHeaderElement> elements) {
148 }
149
150
151 }