1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.springframework.ws.server.endpoint.adapter.method;
18
19 import javax.xml.stream.XMLEventReader;
20 import javax.xml.stream.XMLStreamConstants;
21 import javax.xml.stream.XMLStreamException;
22 import javax.xml.stream.XMLStreamReader;
23 import javax.xml.stream.events.StartElement;
24 import javax.xml.stream.events.XMLEvent;
25
26 import org.springframework.core.MethodParameter;
27 import org.springframework.ws.context.MessageContext;
28 import org.springframework.ws.server.endpoint.annotation.RequestPayload;
29
30 import org.junit.Before;
31 import org.junit.Test;
32
33 import static org.junit.Assert.*;
34
35
36 @SuppressWarnings("Since15")
37 public class StaxPayloadMethodArgumentResolverTest extends AbstractMethodArgumentResolverTestCase {
38
39 private StaxPayloadMethodArgumentResolver resolver;
40
41 private MethodParameter streamParameter;
42
43 private MethodParameter eventParameter;
44
45 private MethodParameter invalidParameter;
46
47 @Before
48 public void setUp() throws Exception {
49 resolver = new StaxPayloadMethodArgumentResolver();
50 streamParameter = new MethodParameter(getClass().getMethod("streamReader", XMLStreamReader.class), 0);
51 eventParameter = new MethodParameter(getClass().getMethod("eventReader", XMLEventReader.class), 0);
52 invalidParameter = new MethodParameter(getClass().getMethod("invalid", XMLStreamReader.class), 0);
53 }
54
55 @Test
56 public void supportsParameter() {
57 assertTrue("resolver does not support XMLStreamReader", resolver.supportsParameter(streamParameter));
58 assertTrue("resolver does not support XMLEventReader", resolver.supportsParameter(eventParameter));
59 assertFalse("resolver supports invalid parameter", resolver.supportsParameter(invalidParameter));
60 }
61
62 @Test
63 public void resolveStreamReaderSaaj() throws Exception {
64 MessageContext messageContext = createSaajMessageContext();
65
66 Object result = resolver.resolveArgument(messageContext, streamParameter);
67
68 testStreamReader(result);
69 }
70
71 @Test
72 public void resolveStreamReaderAxiomCaching() throws Exception {
73 MessageContext messageContext = createCachingAxiomMessageContext();
74
75 Object result = resolver.resolveArgument(messageContext, streamParameter);
76
77 testStreamReader(result);
78 }
79
80 @Test
81 public void resolveStreamReaderAxiomNonCaching() throws Exception {
82 MessageContext messageContext = createNonCachingAxiomMessageContext();
83
84 Object result = resolver.resolveArgument(messageContext, streamParameter);
85
86 testStreamReader(result);
87 }
88
89 @Test
90 public void resolveStreamReaderStream() throws Exception {
91 MessageContext messageContext = createMockMessageContext();
92
93 Object result = resolver.resolveArgument(messageContext, streamParameter);
94
95 testStreamReader(result);
96 }
97
98 @Test
99 public void resolveEventReaderSaaj() throws Exception {
100 MessageContext messageContext = createSaajMessageContext();
101
102 Object result = resolver.resolveArgument(messageContext, eventParameter);
103
104 testEventReader(result);
105 }
106
107 @Test
108 public void resolveEventReaderAxiomCaching() throws Exception {
109 MessageContext messageContext = createCachingAxiomMessageContext();
110
111 Object result = resolver.resolveArgument(messageContext, eventParameter);
112
113 testEventReader(result);
114 }
115
116 @Test
117 public void resolveEventReaderAxiomNonCaching() throws Exception {
118 MessageContext messageContext = createNonCachingAxiomMessageContext();
119
120 Object result = resolver.resolveArgument(messageContext, eventParameter);
121
122 testEventReader(result);
123 }
124
125 @Test
126 public void resolveEventReaderStream() throws Exception {
127 MessageContext messageContext = createMockMessageContext();
128
129 Object result = resolver.resolveArgument(messageContext, eventParameter);
130
131 testEventReader(result);
132 }
133
134
135 private void testStreamReader(Object result) throws XMLStreamException {
136 assertTrue("resolver does not return XMLStreamReader", result instanceof XMLStreamReader);
137 XMLStreamReader streamReader = (XMLStreamReader) result;
138 assertTrue("streamReader has no next element", streamReader.hasNext());
139 assertEquals(XMLStreamConstants.START_ELEMENT, streamReader.nextTag());
140 assertEquals("Invalid namespace", NAMESPACE_URI, streamReader.getNamespaceURI());
141 assertEquals("Invalid local name", LOCAL_NAME, streamReader.getLocalName());
142 }
143
144 private void testEventReader(Object result) throws XMLStreamException {
145 assertTrue("resolver does not return XMLEventReader", result instanceof XMLEventReader);
146 XMLEventReader eventReader = (XMLEventReader) result;
147 assertTrue("eventReader has no next element", eventReader.hasNext());
148 XMLEvent event = eventReader.nextTag();
149 assertEquals(XMLStreamConstants.START_ELEMENT, event.getEventType());
150 StartElement startElement = (StartElement) event;
151 assertEquals("Invalid namespace", NAMESPACE_URI, startElement.getName().getNamespaceURI());
152 assertEquals("Invalid local name", LOCAL_NAME, startElement.getName().getLocalPart());
153 }
154
155
156 public void invalid(XMLStreamReader streamReader) {
157 }
158
159 public void streamReader(@RequestPayload XMLStreamReader streamReader) {
160 }
161
162 public void eventReader(@RequestPayload XMLEventReader streamReader) {
163 }
164 }