1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.springframework.ws.server.endpoint.interceptor;
18
19 import javax.xml.soap.MessageFactory;
20 import javax.xml.soap.SOAPMessage;
21 import javax.xml.transform.Transformer;
22 import javax.xml.transform.TransformerFactory;
23 import javax.xml.transform.sax.SAXSource;
24
25 import org.custommonkey.xmlunit.XMLTestCase;
26 import org.custommonkey.xmlunit.XMLUnit;
27
28 import org.springframework.core.io.ClassPathResource;
29 import org.springframework.core.io.Resource;
30 import org.springframework.ws.MockWebServiceMessage;
31 import org.springframework.ws.MockWebServiceMessageFactory;
32 import org.springframework.ws.context.DefaultMessageContext;
33 import org.springframework.ws.context.MessageContext;
34 import org.springframework.ws.pox.dom.DomPoxMessage;
35 import org.springframework.ws.pox.dom.DomPoxMessageFactory;
36 import org.springframework.ws.soap.saaj.SaajSoapMessage;
37 import org.springframework.ws.soap.saaj.SaajSoapMessageFactory;
38 import org.springframework.xml.sax.SaxUtils;
39 import org.springframework.xml.transform.ResourceSource;
40 import org.springframework.xml.transform.StringResult;
41
42 public class PayloadTransformingInterceptorTest extends XMLTestCase {
43
44 private PayloadTransformingInterceptor interceptor;
45
46 private Transformer transformer;
47
48 private Resource input;
49
50 private Resource output;
51
52 private Resource xslt;
53
54 protected void setUp() throws Exception {
55 interceptor = new PayloadTransformingInterceptor();
56 TransformerFactory transformerFactory = TransformerFactory.newInstance();
57 transformer = transformerFactory.newTransformer();
58 input = new ClassPathResource("transformInput.xml", getClass());
59 output = new ClassPathResource("transformOutput.xml", getClass());
60 xslt = new ClassPathResource("transformation.xslt", getClass());
61 XMLUnit.setIgnoreWhitespace(true);
62 }
63
64 public void testHandleRequest() throws Exception {
65 interceptor.setRequestXslt(xslt);
66 interceptor.afterPropertiesSet();
67 MockWebServiceMessage request = new MockWebServiceMessage(input);
68 MessageContext context = new DefaultMessageContext(request, new MockWebServiceMessageFactory());
69
70 boolean result = interceptor.handleRequest(context, null);
71 assertTrue("Invalid interceptor result", result);
72 StringResult expected = new StringResult();
73 transformer.transform(new SAXSource(SaxUtils.createInputSource(output)), expected);
74 assertXMLEqual(expected.toString(), request.getPayloadAsString());
75 }
76
77 public void testHandleRequestNoXslt() throws Exception {
78 interceptor.setResponseXslt(xslt);
79 interceptor.afterPropertiesSet();
80 MockWebServiceMessage request = new MockWebServiceMessage(input);
81 MessageContext context = new DefaultMessageContext(request, new MockWebServiceMessageFactory());
82
83 boolean result = interceptor.handleRequest(context, null);
84 assertTrue("Invalid interceptor result", result);
85 StringResult expected = new StringResult();
86 transformer.transform(new SAXSource(SaxUtils.createInputSource(input)), expected);
87 assertXMLEqual(expected.toString(), request.getPayloadAsString());
88 }
89
90 public void testHandleResponse() throws Exception {
91 interceptor.setResponseXslt(xslt);
92 interceptor.afterPropertiesSet();
93 MockWebServiceMessage request = new MockWebServiceMessage(input);
94 MessageContext context = new DefaultMessageContext(request, new MockWebServiceMessageFactory());
95 MockWebServiceMessage response = (MockWebServiceMessage) context.getResponse();
96 response.setPayload(input);
97
98 boolean result = interceptor.handleResponse(context, null);
99 assertTrue("Invalid interceptor result", result);
100 StringResult expected = new StringResult();
101 transformer.transform(new SAXSource(SaxUtils.createInputSource(output)), expected);
102 assertXMLEqual(expected.toString(), response.getPayloadAsString());
103 }
104
105 public void testHandleResponseNoXslt() throws Exception {
106 interceptor.setRequestXslt(xslt);
107 interceptor.afterPropertiesSet();
108 MockWebServiceMessage request = new MockWebServiceMessage(input);
109 MessageContext context = new DefaultMessageContext(request, new MockWebServiceMessageFactory());
110 MockWebServiceMessage response = (MockWebServiceMessage) context.getResponse();
111 response.setPayload(input);
112
113 boolean result = interceptor.handleResponse(context, null);
114 assertTrue("Invalid interceptor result", result);
115 StringResult expected = new StringResult();
116 transformer.transform(new SAXSource(SaxUtils.createInputSource(input)), expected);
117 assertXMLEqual(expected.toString(), response.getPayloadAsString());
118 }
119
120 public void testSaaj() throws Exception {
121 interceptor.setRequestXslt(xslt);
122 interceptor.afterPropertiesSet();
123 MessageFactory messageFactory = MessageFactory.newInstance();
124 SOAPMessage saajMessage = messageFactory.createMessage();
125 SaajSoapMessage message = new SaajSoapMessage(saajMessage);
126 transformer.transform(new ResourceSource(input), message.getPayloadResult());
127 MessageContext context = new DefaultMessageContext(message, new SaajSoapMessageFactory(messageFactory));
128
129 assertTrue("Invalid interceptor result", interceptor.handleRequest(context, null));
130 StringResult expected = new StringResult();
131 transformer.transform(new SAXSource(SaxUtils.createInputSource(output)), expected);
132 StringResult result = new StringResult();
133 transformer.transform(message.getPayloadSource(), result);
134 assertXMLEqual(expected.toString(), result.toString());
135
136 }
137
138 public void testPox() throws Exception {
139 interceptor.setRequestXslt(xslt);
140 interceptor.afterPropertiesSet();
141 DomPoxMessageFactory factory = new DomPoxMessageFactory();
142 DomPoxMessage message = (DomPoxMessage) factory.createWebServiceMessage();
143 transformer.transform(new ResourceSource(input), message.getPayloadResult());
144 MessageContext context = new DefaultMessageContext(message, factory);
145
146 assertTrue("Invalid interceptor result", interceptor.handleRequest(context, null));
147 StringResult expected = new StringResult();
148 transformer.transform(new SAXSource(SaxUtils.createInputSource(output)), expected);
149 StringResult result = new StringResult();
150 transformer.transform(message.getPayloadSource(), result);
151 assertXMLEqual(expected.toString(), result.toString());
152
153 }
154
155 public void testNoStylesheetsSet() throws Exception {
156 try {
157 interceptor.afterPropertiesSet();
158 fail("Should have thrown an Exception");
159 }
160 catch (IllegalArgumentException ex) {
161 }
162 }
163 }