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.stream.XMLOutputFactory;
20 import javax.xml.stream.XMLStreamConstants;
21 import javax.xml.stream.XMLStreamReader;
22 import javax.xml.stream.XMLStreamWriter;
23 import javax.xml.transform.Transformer;
24 import javax.xml.transform.TransformerFactory;
25
26 import org.apache.axiom.om.OMAbstractFactory;
27 import org.apache.axiom.soap.SOAPFactory;
28 import org.springframework.ws.context.DefaultMessageContext;
29 import org.springframework.ws.context.MessageContext;
30 import org.springframework.ws.soap.axiom.AxiomSoapMessage;
31 import org.springframework.ws.soap.axiom.AxiomSoapMessageFactory;
32 import org.springframework.xml.transform.StringResult;
33 import org.springframework.xml.transform.StringSource;
34
35
36
37
38
39
40 public class StaxStreamPayloadEndpointTest extends AbstractMessageEndpointTestCase {
41
42 protected MessageEndpoint createNoResponseEndpoint() {
43 return new AbstractStaxStreamPayloadEndpoint() {
44 protected void invokeInternal(XMLStreamReader streamReader, XMLStreamWriter streamWriter) throws Exception {
45 assertNotNull("No StreamReader passed", streamReader);
46 }
47 };
48 }
49
50 protected MessageEndpoint createNoRequestPayloadEndpoint() {
51 return new AbstractStaxStreamPayloadEndpoint() {
52 protected void invokeInternal(XMLStreamReader streamReader, XMLStreamWriter streamWriter) throws Exception {
53 assertNull("StreamReader passed", streamReader);
54 }
55 };
56 }
57
58 protected MessageEndpoint createResponseEndpoint() {
59 return new AbstractStaxStreamPayloadEndpoint() {
60 protected void invokeInternal(XMLStreamReader streamReader, XMLStreamWriter streamWriter) throws Exception {
61 assertNotNull("No streamReader passed", streamReader);
62 assertNotNull("No streamWriter passed", streamReader);
63 assertEquals("Not a start element", XMLStreamConstants.START_ELEMENT, streamReader.next());
64 assertEquals("Invalid start event local name", REQUEST_ELEMENT, streamReader.getLocalName());
65 assertEquals("Invalid start event namespace", NAMESPACE_URI, streamReader.getNamespaceURI());
66 assertTrue("streamReader has no next element", streamReader.hasNext());
67 assertEquals("Not a end element", XMLStreamConstants.END_ELEMENT, streamReader.next());
68 assertEquals("Invalid end event local name", REQUEST_ELEMENT, streamReader.getLocalName());
69 assertEquals("Invalid end event namespace", NAMESPACE_URI, streamReader.getNamespaceURI());
70 streamWriter.writeEmptyElement(NAMESPACE_URI, RESPONSE_ELEMENT);
71 streamWriter.flush();
72 streamWriter.close();
73 }
74
75 protected XMLOutputFactory createXmlOutputFactory() {
76 XMLOutputFactory outputFactory = XMLOutputFactory.newInstance();
77 outputFactory.setProperty("javax.xml.stream.isRepairingNamespaces", Boolean.TRUE);
78 return outputFactory;
79 }
80 };
81 }
82
83 public void testAxiomResponse() throws Exception {
84 Transformer transformer = TransformerFactory.newInstance().newTransformer();
85 SOAPFactory axiomFactory = OMAbstractFactory.getSOAP11Factory();
86 AxiomSoapMessage request = new AxiomSoapMessage(axiomFactory);
87 transformer.transform(new StringSource(REQUEST), request.getPayloadResult());
88 AxiomSoapMessageFactory soapMessageFactory = new AxiomSoapMessageFactory();
89 soapMessageFactory.afterPropertiesSet();
90 MessageContext context = new DefaultMessageContext(request, soapMessageFactory);
91
92 MessageEndpoint endpoint = createResponseEndpoint();
93 endpoint.invoke(context);
94 assertTrue("context has not response", context.hasResponse());
95 StringResult stringResult = new StringResult();
96 transformer.transform(context.getResponse().getPayloadSource(), stringResult);
97 assertXMLEqual(RESPONSE, stringResult.toString());
98 }
99
100 public void testAxiomNoResponse() throws Exception {
101 Transformer transformer = TransformerFactory.newInstance().newTransformer();
102 SOAPFactory axiomFactory = OMAbstractFactory.getSOAP11Factory();
103 AxiomSoapMessage request = new AxiomSoapMessage(axiomFactory);
104 transformer.transform(new StringSource(REQUEST), request.getPayloadResult());
105 AxiomSoapMessageFactory soapMessageFactory = new AxiomSoapMessageFactory();
106 soapMessageFactory.afterPropertiesSet();
107 MessageContext context = new DefaultMessageContext(request, soapMessageFactory);
108
109 MessageEndpoint endpoint = createNoResponseEndpoint();
110 endpoint.invoke(context);
111 assertFalse("context has response", context.hasResponse());
112 }
113
114
115 }