1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.springframework.ws.soap.security.xwss;
18
19 import javax.xml.soap.MessageFactory;
20 import javax.xml.soap.SOAPMessage;
21
22 import org.springframework.ws.context.DefaultMessageContext;
23 import org.springframework.ws.context.MessageContext;
24 import org.springframework.ws.soap.SoapMessage;
25 import org.springframework.ws.soap.saaj.SaajSoapMessage;
26 import org.springframework.ws.soap.saaj.SaajSoapMessageFactory;
27 import org.springframework.ws.soap.security.WsSecurityValidationException;
28
29 import org.junit.Before;
30 import org.junit.Test;
31
32 import static org.junit.Assert.*;
33
34 public class XwsSecurityInterceptorTest {
35
36 private MessageFactory messageFactory;
37
38 @Before
39 public void setUp() throws Exception {
40 messageFactory = MessageFactory.newInstance();
41 }
42
43 @Test
44 public void testHandleServerRequest() throws Exception {
45 final SOAPMessage request = messageFactory.createMessage();
46 final SOAPMessage validatedRequest = messageFactory.createMessage();
47 XwsSecurityInterceptor interceptor = new XwsSecurityInterceptor() {
48
49 @Override
50 protected void secureMessage(SoapMessage soapMessage, MessageContext messageContext)
51 throws XwsSecuritySecurementException {
52 fail("secure not expected");
53 }
54
55 @Override
56 protected void validateMessage(SoapMessage message, MessageContext messageContext)
57 throws WsSecurityValidationException {
58 SaajSoapMessage saajSoapMessage = (SaajSoapMessage) message;
59 assertEquals("Invalid message", request, saajSoapMessage.getSaajMessage());
60 saajSoapMessage.setSaajMessage(validatedRequest);
61 }
62
63 };
64 MessageContext context =
65 new DefaultMessageContext(new SaajSoapMessage(request), new SaajSoapMessageFactory(messageFactory));
66 interceptor.handleRequest(context, null);
67 assertEquals("Invalid request", validatedRequest, ((SaajSoapMessage) context.getRequest()).getSaajMessage());
68 }
69
70 @Test
71 public void testHandleServerResponse() throws Exception {
72 final SOAPMessage securedResponse = messageFactory.createMessage();
73 final boolean[] cleanupCalled = new boolean[1];
74 cleanupCalled[0] = false;
75 XwsSecurityInterceptor interceptor = new XwsSecurityInterceptor() {
76
77 @Override
78 protected void secureMessage(SoapMessage message, MessageContext messageContext)
79 throws XwsSecuritySecurementException {
80 SaajSoapMessage saajSoapMessage = (SaajSoapMessage) message;
81 saajSoapMessage.setSaajMessage(securedResponse);
82 }
83
84 @Override
85 protected void validateMessage(SoapMessage soapMessage, MessageContext messageContext)
86 throws WsSecurityValidationException {
87 fail("validate not expected");
88 }
89
90 @Override
91 protected void cleanUp() {
92 cleanupCalled[0] = true;
93 }
94 };
95
96 SOAPMessage request = messageFactory.createMessage();
97 MessageContext context =
98 new DefaultMessageContext(new SaajSoapMessage(request), new SaajSoapMessageFactory(messageFactory));
99 context.getResponse();
100 interceptor.handleResponse(context, null);
101 interceptor.afterCompletion(context, null, null);
102 assertEquals("Invalid response", securedResponse, ((SaajSoapMessage) context.getResponse()).getSaajMessage());
103 assertTrue("Cleanup not called", cleanupCalled[0]);
104 }
105
106 @Test
107 public void testHandleServerFault() throws Exception {
108 final boolean[] cleanupCalled = new boolean[1];
109 cleanupCalled[0] = false;
110 XwsSecurityInterceptor interceptor = new XwsSecurityInterceptor() {
111
112
113 @Override
114 protected void cleanUp() {
115 cleanupCalled[0] = true;
116 }
117 };
118
119 SOAPMessage request = messageFactory.createMessage();
120 MessageContext context =
121 new DefaultMessageContext(new SaajSoapMessage(request), new SaajSoapMessageFactory(messageFactory));
122 context.getResponse();
123 interceptor.handleFault(context, null);
124 interceptor.afterCompletion(context, null, null);
125 assertTrue("Cleanup not called", cleanupCalled[0]);
126 }
127
128 @Test
129 public void testHandleClientRequest() throws Exception {
130 final SOAPMessage request = messageFactory.createMessage();
131 final SOAPMessage securedRequest = messageFactory.createMessage();
132 XwsSecurityInterceptor interceptor = new XwsSecurityInterceptor() {
133
134 @Override
135 protected void secureMessage(SoapMessage soapMessage, MessageContext messageContext)
136 throws XwsSecuritySecurementException {
137 SaajSoapMessage saajSoapMessage = (SaajSoapMessage) soapMessage;
138 assertEquals("Invalid message", request, saajSoapMessage.getSaajMessage());
139 saajSoapMessage.setSaajMessage(securedRequest);
140 }
141
142 @Override
143 protected void validateMessage(SoapMessage message, MessageContext messageContext)
144 throws WsSecurityValidationException {
145 fail("validate not expected");
146 }
147
148 };
149 MessageContext context =
150 new DefaultMessageContext(new SaajSoapMessage(request), new SaajSoapMessageFactory(messageFactory));
151 interceptor.handleRequest(context);
152 assertEquals("Invalid request", securedRequest, ((SaajSoapMessage) context.getRequest()).getSaajMessage());
153 }
154
155 @Test
156 public void testHandleClientResponse() throws Exception {
157 final SOAPMessage validatedResponse = messageFactory.createMessage();
158 XwsSecurityInterceptor interceptor = new XwsSecurityInterceptor() {
159
160 @Override
161 protected void secureMessage(SoapMessage message, MessageContext messageContext)
162 throws XwsSecuritySecurementException {
163 fail("secure not expected");
164 }
165
166 @Override
167 protected void validateMessage(SoapMessage soapMessage, MessageContext messageContext)
168 throws WsSecurityValidationException {
169 SaajSoapMessage saajSoapMessage = (SaajSoapMessage) soapMessage;
170 saajSoapMessage.setSaajMessage(validatedResponse);
171 }
172
173 };
174 SOAPMessage request = messageFactory.createMessage();
175 MessageContext context =
176 new DefaultMessageContext(new SaajSoapMessage(request), new SaajSoapMessageFactory(messageFactory));
177 context.getResponse();
178 interceptor.handleResponse(context);
179 assertEquals("Invalid response", validatedResponse, ((SaajSoapMessage) context.getResponse()).getSaajMessage());
180 }
181
182 }