1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.springframework.ws.soap.addressing.server;
18
19 import java.net.URI;
20 import java.util.Iterator;
21 import java.util.Locale;
22
23 import org.easymock.MockControl;
24
25 import org.springframework.ws.context.DefaultMessageContext;
26 import org.springframework.ws.context.MessageContext;
27 import org.springframework.ws.soap.SoapHeaderElement;
28 import org.springframework.ws.soap.SoapMessage;
29 import org.springframework.ws.soap.addressing.AbstractWsAddressingTestCase;
30 import org.springframework.ws.soap.addressing.messageid.MessageIdStrategy;
31 import org.springframework.ws.soap.addressing.version.AddressingVersion;
32 import org.springframework.ws.soap.saaj.SaajSoapMessage;
33 import org.springframework.ws.soap.saaj.SaajSoapMessageFactory;
34 import org.springframework.ws.transport.WebServiceConnection;
35 import org.springframework.ws.transport.WebServiceMessageSender;
36
37 public abstract class AbstractAddressingInterceptorTestCase extends AbstractWsAddressingTestCase {
38
39 protected AddressingEndpointInterceptor interceptor;
40
41 protected MockControl strategyControl;
42
43 protected MessageIdStrategy strategyMock;
44
45 protected final void onSetUp() throws Exception {
46 strategyControl = MockControl.createControl(MessageIdStrategy.class);
47 strategyMock = (MessageIdStrategy) strategyControl.getMock();
48 strategyControl.expectAndDefaultReturn(strategyMock.isDuplicate(null), false);
49 URI replyAction = new URI("urn:replyAction");
50 URI faultAction = new URI("urn:faultAction");
51 interceptor = new AddressingEndpointInterceptor(getVersion(), strategyMock, new WebServiceMessageSender[0],
52 replyAction, faultAction);
53 }
54
55 public void testUnderstands() throws Exception {
56 SaajSoapMessage validRequest = loadSaajMessage(getTestPath() + "/valid.xml");
57 Iterator iterator = validRequest.getSoapHeader().examineAllHeaderElements();
58 strategyControl.replay();
59 while (iterator.hasNext()) {
60 SoapHeaderElement headerElement = (SoapHeaderElement) iterator.next();
61 assertTrue("Header [" + headerElement.getName() + " not understood",
62 interceptor.understands(headerElement));
63 }
64 strategyControl.verify();
65 }
66
67 public void testValidRequest() throws Exception {
68 SaajSoapMessage valid = loadSaajMessage(getTestPath() + "/valid.xml");
69 MessageContext context = new DefaultMessageContext(valid, new SaajSoapMessageFactory(messageFactory));
70 strategyControl.replay();
71 boolean result = interceptor.handleRequest(context, null);
72 assertTrue("Valid request not handled", result);
73 assertFalse("Message Context has response", context.hasResponse());
74 strategyControl.verify();
75 }
76
77 public void testNoMessageId() throws Exception {
78 SaajSoapMessage valid = loadSaajMessage(getTestPath() + "/request-no-message-id.xml");
79 MessageContext context = new DefaultMessageContext(valid, new SaajSoapMessageFactory(messageFactory));
80 strategyControl.replay();
81 boolean result = interceptor.handleRequest(context, null);
82 assertFalse("Request with no MessageID handled", result);
83 assertTrue("Message Context has no response", context.hasResponse());
84 SaajSoapMessage expectedResponse = loadSaajMessage(getTestPath() + "/response-no-message-id.xml");
85 assertXMLEqual("Invalid response for message with no MessageID", expectedResponse,
86 (SaajSoapMessage) context.getResponse());
87 strategyControl.verify();
88 }
89
90 public void testNoReplyTo() throws Exception {
91 SaajSoapMessage valid = loadSaajMessage(getTestPath() + "/request-no-reply-to.xml");
92 MessageContext context = new DefaultMessageContext(valid, new SaajSoapMessageFactory(messageFactory));
93 URI messageId = new URI("uid:1234");
94 strategyControl.expectAndReturn(strategyMock.newMessageId((SoapMessage) context.getResponse()), messageId);
95 strategyControl.replay();
96 boolean result = interceptor.handleResponse(context, null);
97 assertTrue("Request with no ReplyTo not handled", result);
98 assertTrue("Message Context has no response", context.hasResponse());
99 SaajSoapMessage expectedResponse = loadSaajMessage(getTestPath() + "/response-anonymous.xml");
100 assertXMLEqual("Invalid response for message with invalid MAP", expectedResponse,
101 (SaajSoapMessage) context.getResponse());
102 strategyControl.verify();
103 }
104
105 public void testAnonymousReplyTo() throws Exception {
106 SaajSoapMessage valid = loadSaajMessage(getTestPath() + "/request-anonymous.xml");
107 MessageContext context = new DefaultMessageContext(valid, new SaajSoapMessageFactory(messageFactory));
108 URI messageId = new URI("uid:1234");
109 strategyControl.expectAndReturn(strategyMock.newMessageId((SoapMessage) context.getResponse()), messageId);
110 strategyControl.replay();
111 boolean result = interceptor.handleResponse(context, null);
112 assertTrue("Request with anonymous ReplyTo not handled", result);
113 SaajSoapMessage expectedResponse = loadSaajMessage(getTestPath() + "/response-anonymous.xml");
114 assertXMLEqual("Invalid response for message with invalid MAP", expectedResponse,
115 (SaajSoapMessage) context.getResponse());
116 strategyControl.verify();
117 }
118
119 public void testNoneReplyTo() throws Exception {
120 SaajSoapMessage valid = loadSaajMessage(getTestPath() + "/request-none.xml");
121 MessageContext context = new DefaultMessageContext(valid, new SaajSoapMessageFactory(messageFactory));
122 strategyControl.replay();
123 boolean result = interceptor.handleResponse(context, null);
124 assertFalse("None request handled", result);
125 assertFalse("Message context has response", context.hasResponse());
126 strategyControl.verify();
127 }
128
129 public void testFaultTo() throws Exception {
130 SaajSoapMessage valid = loadSaajMessage(getTestPath() + "/request-fault-to.xml");
131 MessageContext context = new DefaultMessageContext(valid, new SaajSoapMessageFactory(messageFactory));
132 SaajSoapMessage response = (SaajSoapMessage) context.getResponse();
133 response.getSoapBody().addServerOrReceiverFault("Error", Locale.ENGLISH);
134 URI messageId = new URI("uid:1234");
135 strategyControl.expectAndReturn(strategyMock.newMessageId((SoapMessage) context.getResponse()), messageId);
136 strategyControl.replay();
137 boolean result = interceptor.handleFault(context, null);
138 assertTrue("Request with anonymous FaultTo not handled", result);
139 SaajSoapMessage expectedResponse = loadSaajMessage(getTestPath() + "/response-fault-to.xml");
140 assertXMLEqual("Invalid response for message with invalid MAP", expectedResponse,
141 (SaajSoapMessage) context.getResponse());
142 strategyControl.verify();
143 }
144
145 public void testOutOfBandReplyTo() throws Exception {
146 MockControl senderControl = MockControl.createControl(WebServiceMessageSender.class);
147 WebServiceMessageSender senderMock = (WebServiceMessageSender) senderControl.getMock();
148
149 URI replyAction = new URI("urn:replyAction");
150 URI faultAction = new URI("urn:replyAction");
151 interceptor =
152 new AddressingEndpointInterceptor(getVersion(), strategyMock, new WebServiceMessageSender[]{senderMock},
153 replyAction, faultAction);
154
155 MockControl connectionControl = MockControl.createControl(WebServiceConnection.class);
156 WebServiceConnection connectionMock = (WebServiceConnection) connectionControl.getMock();
157
158 SaajSoapMessage valid = loadSaajMessage(getTestPath() + "/valid.xml");
159 MessageContext context = new DefaultMessageContext(valid, new SaajSoapMessageFactory(messageFactory));
160 SaajSoapMessage response = (SaajSoapMessage) context.getResponse();
161
162 URI messageId = new URI("uid:1234");
163 strategyControl.expectAndReturn(strategyMock.newMessageId((SoapMessage) context.getResponse()), messageId);
164
165 URI uri = new URI("http://example.com/business/client1");
166 senderControl.expectAndReturn(senderMock.supports(uri), true);
167 senderControl.expectAndReturn(senderMock.createConnection(uri), connectionMock);
168 connectionMock.send(response);
169 connectionMock.close();
170
171 strategyControl.replay();
172 senderControl.replay();
173 connectionControl.replay();
174
175 boolean result = interceptor.handleResponse(context, null);
176 assertFalse("Out of Band request handled", result);
177 assertFalse("Message context has response", context.hasResponse());
178
179 strategyControl.verify();
180 senderControl.verify();
181 connectionControl.verify();
182 }
183
184 protected abstract AddressingVersion getVersion();
185
186 protected abstract String getTestPath();
187
188 }