1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.springframework.ws.server.endpoint;
18
19 import javax.xml.soap.MessageFactory;
20 import javax.xml.stream.XMLOutputFactory;
21 import javax.xml.stream.XMLStreamConstants;
22 import javax.xml.stream.XMLStreamReader;
23 import javax.xml.stream.XMLStreamWriter;
24 import javax.xml.transform.Transformer;
25 import javax.xml.transform.TransformerFactory;
26
27 import org.apache.axiom.om.OMAbstractFactory;
28 import org.apache.axiom.soap.SOAPFactory;
29
30 import org.springframework.ws.context.DefaultMessageContext;
31 import org.springframework.ws.context.MessageContext;
32 import org.springframework.ws.soap.axiom.AxiomSoapMessage;
33 import org.springframework.ws.soap.axiom.AxiomSoapMessageFactory;
34 import org.springframework.ws.soap.saaj.SaajSoapMessage;
35 import org.springframework.ws.soap.saaj.SaajSoapMessageFactory;
36 import org.springframework.xml.transform.StringResult;
37 import org.springframework.xml.transform.StringSource;
38
39
40
41
42
43
44 public class StaxStreamPayloadEndpointTest extends AbstractMessageEndpointTestCase {
45
46 protected MessageEndpoint createNoResponseEndpoint() {
47 return new AbstractStaxStreamPayloadEndpoint() {
48 protected void invokeInternal(XMLStreamReader streamReader, XMLStreamWriter streamWriter) throws Exception {
49 assertNotNull("No StreamReader passed", streamReader);
50 }
51 };
52 }
53
54 protected MessageEndpoint createNoRequestPayloadEndpoint() {
55 return new AbstractStaxStreamPayloadEndpoint() {
56 protected void invokeInternal(XMLStreamReader streamReader, XMLStreamWriter streamWriter) throws Exception {
57 assertNull("StreamReader passed", streamReader);
58 }
59 };
60 }
61
62 protected MessageEndpoint createResponseEndpoint() {
63 return new AbstractStaxStreamPayloadEndpoint() {
64 protected void invokeInternal(XMLStreamReader streamReader, XMLStreamWriter streamWriter) throws Exception {
65 assertNotNull("No streamReader passed", streamReader);
66 assertNotNull("No streamWriter passed", streamReader);
67 assertEquals("Not a start element", XMLStreamConstants.START_ELEMENT, streamReader.next());
68 assertEquals("Invalid start event local name", REQUEST_ELEMENT, streamReader.getLocalName());
69 assertEquals("Invalid start event namespace", NAMESPACE_URI, streamReader.getNamespaceURI());
70 assertTrue("streamReader has no next element", streamReader.hasNext());
71 assertEquals("Not a end element", XMLStreamConstants.END_ELEMENT, streamReader.next());
72 assertEquals("Invalid end event local name", REQUEST_ELEMENT, streamReader.getLocalName());
73 assertEquals("Invalid end event namespace", NAMESPACE_URI, streamReader.getNamespaceURI());
74 streamWriter.setDefaultNamespace(NAMESPACE_URI);
75 streamWriter.writeStartElement(NAMESPACE_URI, RESPONSE_ELEMENT);
76 streamWriter.writeDefaultNamespace(NAMESPACE_URI);
77 streamWriter.writeEndElement();
78 streamWriter.flush();
79 streamWriter.close();
80 }
81
82 protected XMLOutputFactory createXmlOutputFactory() {
83 XMLOutputFactory outputFactory = XMLOutputFactory.newInstance();
84 outputFactory.setProperty("javax.xml.stream.isRepairingNamespaces", Boolean.TRUE);
85 return outputFactory;
86 }
87 };
88 }
89
90 public void testSaajResponse() throws Exception {
91 Transformer transformer = TransformerFactory.newInstance().newTransformer();
92 MessageFactory messageFactory = MessageFactory.newInstance();
93 SaajSoapMessage request = new SaajSoapMessage(messageFactory.createMessage());
94 transformer.transform(new StringSource(REQUEST), request.getPayloadResult());
95 SaajSoapMessageFactory soapMessageFactory = new SaajSoapMessageFactory();
96 soapMessageFactory.afterPropertiesSet();
97 MessageContext context = new DefaultMessageContext(request, soapMessageFactory);
98
99 MessageEndpoint endpoint = createResponseEndpoint();
100 endpoint.invoke(context);
101 assertTrue("context has not response", context.hasResponse());
102 StringResult stringResult = new StringResult();
103 transformer.transform(context.getResponse().getPayloadSource(), stringResult);
104 assertXMLEqual(RESPONSE, stringResult.toString());
105 }
106
107 public void testAxiomResponse() throws Exception {
108 Transformer transformer = TransformerFactory.newInstance().newTransformer();
109 SOAPFactory axiomFactory = OMAbstractFactory.getSOAP11Factory();
110 AxiomSoapMessage request = new AxiomSoapMessage(axiomFactory);
111 transformer.transform(new StringSource(REQUEST), request.getPayloadResult());
112 AxiomSoapMessageFactory soapMessageFactory = new AxiomSoapMessageFactory();
113 soapMessageFactory.afterPropertiesSet();
114 MessageContext context = new DefaultMessageContext(request, soapMessageFactory);
115
116 MessageEndpoint endpoint = createResponseEndpoint();
117 endpoint.invoke(context);
118 assertTrue("context has not response", context.hasResponse());
119 StringResult stringResult = new StringResult();
120 transformer.transform(context.getResponse().getPayloadSource(), stringResult);
121 assertXMLEqual(RESPONSE, stringResult.toString());
122 }
123
124 public void testAxiomNoResponse() throws Exception {
125 Transformer transformer = TransformerFactory.newInstance().newTransformer();
126 SOAPFactory axiomFactory = OMAbstractFactory.getSOAP11Factory();
127 AxiomSoapMessage request = new AxiomSoapMessage(axiomFactory);
128 transformer.transform(new StringSource(REQUEST), request.getPayloadResult());
129 AxiomSoapMessageFactory soapMessageFactory = new AxiomSoapMessageFactory();
130 soapMessageFactory.afterPropertiesSet();
131 MessageContext context = new DefaultMessageContext(request, soapMessageFactory);
132
133 MessageEndpoint endpoint = createNoResponseEndpoint();
134 endpoint.invoke(context);
135 assertFalse("context has response", context.hasResponse());
136 }
137
138 public void testAxiomResponseNoPayloadCaching() throws Exception {
139 Transformer transformer = TransformerFactory.newInstance().newTransformer();
140 SOAPFactory axiomFactory = OMAbstractFactory.getSOAP11Factory();
141 AxiomSoapMessage request = new AxiomSoapMessage(axiomFactory);
142 transformer.transform(new StringSource(REQUEST), request.getPayloadResult());
143 AxiomSoapMessageFactory soapMessageFactory = new AxiomSoapMessageFactory();
144 soapMessageFactory.setPayloadCaching(false);
145 soapMessageFactory.afterPropertiesSet();
146 MessageContext context = new DefaultMessageContext(request, soapMessageFactory);
147
148 MessageEndpoint endpoint = createResponseEndpoint();
149 endpoint.invoke(context);
150 assertTrue("context has not response", context.hasResponse());
151
152 StringResult stringResult = new StringResult();
153 transformer.transform(context.getResponse().getPayloadSource(), stringResult);
154 assertXMLEqual(RESPONSE, stringResult.toString());
155 }
156
157 public void testAxiomNoResponseNoPayloadCaching() throws Exception {
158 Transformer transformer = TransformerFactory.newInstance().newTransformer();
159 SOAPFactory axiomFactory = OMAbstractFactory.getSOAP11Factory();
160 AxiomSoapMessage request = new AxiomSoapMessage(axiomFactory);
161 transformer.transform(new StringSource(REQUEST), request.getPayloadResult());
162 AxiomSoapMessageFactory soapMessageFactory = new AxiomSoapMessageFactory();
163 soapMessageFactory.setPayloadCaching(false);
164 soapMessageFactory.afterPropertiesSet();
165 MessageContext context = new DefaultMessageContext(request, soapMessageFactory);
166
167 MessageEndpoint endpoint = createNoResponseEndpoint();
168 endpoint.invoke(context);
169 assertFalse("context has response", context.hasResponse());
170 }
171
172
173 }