1 /*
2 * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
42 * @author desagar
43 *
44 */
45 public class LazyEnvelopeStaxReader extends com.sun.xml.internal.org.jvnet.staxex.util.DOMStreamReader {
46 // EnvelopeImpl env;
47 XMLStreamReader payloadReader = null;
48 boolean usePayloadReaderDelegate = false;
49 private QName bodyQName;
50
51 public LazyEnvelopeStaxReader(EnvelopeImpl env) throws SOAPException, XMLStreamException {
52 super(env);
53 // this.env = env;
54 bodyQName = new QName(env.getNamespaceURI(), "Body");
55 payloadReader = env.getStaxBridge().getPayloadReader();
56 int eventType = getEventType();
57 while (eventType != START_ELEMENT) {
58 eventType = nextTag();
59 }
60 }
61
62 public Object getProperty(String name) throws IllegalArgumentException {
63 if (usePayloadReaderDelegate) return payloadReader.getProperty(name);
64 return super.getProperty(name);
65 }
66
67 public int next() throws XMLStreamException {
68 // boolean previouslyUsingPayloadReader = usePayloadReaderDelegate;
69 //call checkReaderStatus to advance to payloadReader if needed
70 checkReaderStatus(true);
71
72 if (usePayloadReaderDelegate) return payloadReader.getEventType();
73
74 //if we just moved to payload reader, don't advance the pointer
75 // if (usePayloadReaderDelegate && !previouslyUsingPayloadReader) return payloadReader.getEventType();
76
77 // if (usePayloadReaderDelegate) return payloadReader.next();
78 return getEventType();
79 }
80
81 public void require(int type, String namespaceURI, String localName)
82 throws XMLStreamException {
83 if (usePayloadReaderDelegate) payloadReader.require(type, namespaceURI, localName);
84 else super.require(type, namespaceURI, localName);
85 }
86
87 public String getElementText() throws XMLStreamException {
88 if (usePayloadReaderDelegate) return payloadReader.getElementText();
89 return super.getElementText();
90 }
91
92 public int nextTag() throws XMLStreamException {
93 if (usePayloadReaderDelegate) return payloadReader.nextTag();
94 return super.nextTag();
95 }
96
97 public boolean hasNext() throws XMLStreamException {
98 checkReaderStatus(false);
99 boolean hasNext;
100 if (usePayloadReaderDelegate) {
101 hasNext = payloadReader.hasNext();
102 } else {
103 hasNext = super.hasNext();
104 }
105
106 /*if (!hasNext && payloadReader != null) {
107 usePayloadReaderDelegate = true;
108 hasNext = payloadReader.hasNext();
109 }*/
110 return hasNext;
111 }
112
113 private void checkReaderStatus(boolean advanceToNext) throws XMLStreamException {
114 //if we are using payloadReader, make sure it is not exhausted
115 //if it is, return to DOM based reader for remaining end elements (body and envelope)
116 if (usePayloadReaderDelegate) {
122
123 //if the current event is the SOAP body element start,
124 //and the body is lazy, switch to the payload reader
125 if (bodyQName.equals(getName())) {
126 //if we are just switching to payload reader, don't advance...payload reader
127 //will already be on the first payload element
128 usePayloadReaderDelegate = true;
129 advanceToNext = false;
130 }
131 }
132
133 if (advanceToNext) {
134 if (usePayloadReaderDelegate) {
135 payloadReader.next();
136 } else {
137 super.next();
138 }
139 }
140 }
141
142 public void close() throws XMLStreamException {
143 if (usePayloadReaderDelegate) payloadReader.close();
144 else super.close();
145 }
146
147 public String getNamespaceURI(String prefix) {
148 if (usePayloadReaderDelegate) return payloadReader.getNamespaceURI(prefix);
149 return super.getNamespaceURI(prefix);
150 }
151
152 public boolean isStartElement() {
153 if (usePayloadReaderDelegate) return payloadReader.isStartElement();
154 return super.isStartElement();
155 }
156
157 public boolean isEndElement() {
158 if (usePayloadReaderDelegate) return payloadReader.isEndElement();
159 return super.isEndElement();
160 }
161
162 public boolean isCharacters() {
163 if (usePayloadReaderDelegate) return payloadReader.isCharacters();
164 return super.isEndElement();
165 }
166
167 public boolean isWhiteSpace() {
168 if (usePayloadReaderDelegate) return payloadReader.isWhiteSpace();
169 return super.isWhiteSpace();
170 }
171
172 public String getAttributeValue(String namespaceURI, String localName) {
173 if (usePayloadReaderDelegate) return payloadReader.getAttributeValue(namespaceURI, localName);
174 return super.getAttributeValue(namespaceURI, localName);
175 }
176
177 public int getAttributeCount() {
178 if (usePayloadReaderDelegate) return payloadReader.getAttributeCount();
179 return super.getAttributeCount();
180 }
181
182 public QName getAttributeName(int index) {
183 if (usePayloadReaderDelegate) return payloadReader.getAttributeName(index);
184 return super.getAttributeName(index);
185 }
186
187 public String getAttributeNamespace(int index) {
188 if (usePayloadReaderDelegate) return payloadReader.getAttributeNamespace(index);
189 return super.getAttributeNamespace(index);
190 }
191
192 public String getAttributeLocalName(int index) {
193 if (usePayloadReaderDelegate) return payloadReader.getAttributeLocalName(index);
194 return super.getAttributeLocalName(index);
195 }
196
197 public String getAttributePrefix(int index) {
198 if (usePayloadReaderDelegate) return payloadReader.getAttributePrefix(index);
199 return super.getAttributePrefix(index);
200 }
201
202 public String getAttributeType(int index) {
203 if (usePayloadReaderDelegate) return payloadReader.getAttributeType(index);
204 return super.getAttributeType(index);
205 }
206
207 public String getAttributeValue(int index) {
208 if (usePayloadReaderDelegate) return payloadReader.getAttributeValue(index);
209 return super.getAttributeValue(index);
210 }
211
212 public boolean isAttributeSpecified(int index) {
213 if (usePayloadReaderDelegate) return payloadReader.isAttributeSpecified(index);
214 return super.isAttributeSpecified(index);
215 }
216
217 public int getNamespaceCount() {
218 if (usePayloadReaderDelegate) return payloadReader.getNamespaceCount();
219 return super.getNamespaceCount();
220 }
221
222 public String getNamespacePrefix(int index) {
223 if (usePayloadReaderDelegate) return payloadReader.getNamespacePrefix(index);
224 return super.getNamespacePrefix(index);
225 }
226
227 public String getNamespaceURI(int index) {
228 if (usePayloadReaderDelegate) return payloadReader.getNamespaceURI(index);
229 return super.getNamespaceURI(index);
230 }
231
232 public NamespaceContext getNamespaceContext() {
233 if (usePayloadReaderDelegate) return payloadReader.getNamespaceContext();
234 return super.getNamespaceContext();
235 }
236
237 public int getEventType() {
238 if (usePayloadReaderDelegate) return payloadReader.getEventType();
239 return super.getEventType();
240 }
241
242 public String getText() {
243 if (usePayloadReaderDelegate) return payloadReader.getText();
244 return super.getText();
245 }
246
247 public char[] getTextCharacters() {
248 if (usePayloadReaderDelegate) return payloadReader.getTextCharacters();
249 return super.getTextCharacters();
250 }
251
252 public int getTextCharacters(int sourceStart, char[] target,
253 int targetStart, int length) throws XMLStreamException {
254 if (usePayloadReaderDelegate) return payloadReader.getTextCharacters(sourceStart, target, targetStart,
255 length);
256 return super.getTextCharacters(sourceStart, target, targetStart, length);
257 }
258
259 public int getTextStart() {
260 if (usePayloadReaderDelegate) return payloadReader.getTextStart();
261 return super.getTextStart();
262 }
263
264 public int getTextLength() {
265 if (usePayloadReaderDelegate) return payloadReader.getTextLength();
266 return super.getTextLength();
267 }
268
269 public String getEncoding() {
270 if (usePayloadReaderDelegate) return payloadReader.getEncoding();
271 return super.getEncoding();
272 }
273
274 public boolean hasText() {
275 if (usePayloadReaderDelegate) return payloadReader.hasText();
276 return super.hasText();
277 }
278
279 public Location getLocation() {
280 if (usePayloadReaderDelegate) return payloadReader.getLocation();
281 return super.getLocation();
282 }
283
284 public QName getName() {
285 if (usePayloadReaderDelegate) return payloadReader.getName();
286 return super.getName();
287 }
288
289 public String getLocalName() {
290 if (usePayloadReaderDelegate) return payloadReader.getLocalName();
291 return super.getLocalName();
292 }
293
294 public boolean hasName() {
295 if (usePayloadReaderDelegate) return payloadReader.hasName();
296 return super.hasName();
297 }
298
299 public String getNamespaceURI() {
300 if (usePayloadReaderDelegate) return payloadReader.getNamespaceURI();
301 return super.getNamespaceURI();
302 }
303
304 public String getPrefix() {
305 if (usePayloadReaderDelegate) return payloadReader.getPrefix();
306 return super.getPrefix();
307 }
308
309 public String getVersion() {
310 if (usePayloadReaderDelegate) return payloadReader.getVersion();
311 return super.getVersion();
312 }
313
314 public boolean isStandalone() {
315 if (usePayloadReaderDelegate) return payloadReader.isStandalone();
316 return super.isStandalone();
317 }
318
319 public boolean standaloneSet() {
320 if (usePayloadReaderDelegate) return payloadReader.standaloneSet();
321 return super.standaloneSet();
322 }
323
324 public String getCharacterEncodingScheme() {
325 if (usePayloadReaderDelegate) return payloadReader.getCharacterEncodingScheme();
326 return super.getCharacterEncodingScheme();
327 }
328
329 public String getPITarget() {
330 if (usePayloadReaderDelegate) return payloadReader.getPITarget();
331 return super.getPITarget();
332 }
333
334 public String getPIData() {
335 if (usePayloadReaderDelegate) return payloadReader.getPIData();
336 return super.getPIData();
337 }
338
339 //make sure that message is not realized as a result of call
340 //to getFirstChild
341 protected Node getFirstChild(Node node) {
342 if (node instanceof BodyImpl) {
343 return ((BodyImpl) node).getFirstChildNoMaterialize();
344 } else {
345 return node.getFirstChild();
346 }
347 }
348
349 protected Node getNextSibling(Node node) {
350 if (node instanceof BodyImpl) {
351 //body is not expected to have a next sibling - even if it does
352 //we would have to materialize the node to retrieve it.
353 //Since we don't want to materialize it right now, just return null
|
1 /*
2 * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
42 * @author desagar
43 *
44 */
45 public class LazyEnvelopeStaxReader extends com.sun.xml.internal.org.jvnet.staxex.util.DOMStreamReader {
46 // EnvelopeImpl env;
47 XMLStreamReader payloadReader = null;
48 boolean usePayloadReaderDelegate = false;
49 private QName bodyQName;
50
51 public LazyEnvelopeStaxReader(EnvelopeImpl env) throws SOAPException, XMLStreamException {
52 super(env);
53 // this.env = env;
54 bodyQName = new QName(env.getNamespaceURI(), "Body");
55 payloadReader = env.getStaxBridge().getPayloadReader();
56 int eventType = getEventType();
57 while (eventType != START_ELEMENT) {
58 eventType = nextTag();
59 }
60 }
61
62 @Override
63 public Object getProperty(String name) throws IllegalArgumentException {
64 if (usePayloadReaderDelegate) return payloadReader.getProperty(name);
65 return super.getProperty(name);
66 }
67
68 @Override
69 public int next() throws XMLStreamException {
70 // boolean previouslyUsingPayloadReader = usePayloadReaderDelegate;
71 //call checkReaderStatus to advance to payloadReader if needed
72 checkReaderStatus(true);
73
74 if (usePayloadReaderDelegate) return payloadReader.getEventType();
75
76 //if we just moved to payload reader, don't advance the pointer
77 // if (usePayloadReaderDelegate && !previouslyUsingPayloadReader) return payloadReader.getEventType();
78
79 // if (usePayloadReaderDelegate) return payloadReader.next();
80 return getEventType();
81 }
82
83 @Override
84 public void require(int type, String namespaceURI, String localName)
85 throws XMLStreamException {
86 if (usePayloadReaderDelegate) payloadReader.require(type, namespaceURI, localName);
87 else super.require(type, namespaceURI, localName);
88 }
89
90 @Override
91 public String getElementText() throws XMLStreamException {
92 if (usePayloadReaderDelegate) return payloadReader.getElementText();
93 return super.getElementText();
94 }
95
96 @Override
97 public int nextTag() throws XMLStreamException {
98 if (usePayloadReaderDelegate) return payloadReader.nextTag();
99 return super.nextTag();
100 }
101
102 @Override
103 public boolean hasNext() throws XMLStreamException {
104 checkReaderStatus(false);
105 boolean hasNext;
106 if (usePayloadReaderDelegate) {
107 hasNext = payloadReader.hasNext();
108 } else {
109 hasNext = super.hasNext();
110 }
111
112 /*if (!hasNext && payloadReader != null) {
113 usePayloadReaderDelegate = true;
114 hasNext = payloadReader.hasNext();
115 }*/
116 return hasNext;
117 }
118
119 private void checkReaderStatus(boolean advanceToNext) throws XMLStreamException {
120 //if we are using payloadReader, make sure it is not exhausted
121 //if it is, return to DOM based reader for remaining end elements (body and envelope)
122 if (usePayloadReaderDelegate) {
128
129 //if the current event is the SOAP body element start,
130 //and the body is lazy, switch to the payload reader
131 if (bodyQName.equals(getName())) {
132 //if we are just switching to payload reader, don't advance...payload reader
133 //will already be on the first payload element
134 usePayloadReaderDelegate = true;
135 advanceToNext = false;
136 }
137 }
138
139 if (advanceToNext) {
140 if (usePayloadReaderDelegate) {
141 payloadReader.next();
142 } else {
143 super.next();
144 }
145 }
146 }
147
148 @Override
149 public void close() throws XMLStreamException {
150 if (usePayloadReaderDelegate) payloadReader.close();
151 else super.close();
152 }
153
154 @Override
155 public String getNamespaceURI(String prefix) {
156 if (usePayloadReaderDelegate) return payloadReader.getNamespaceURI(prefix);
157 return super.getNamespaceURI(prefix);
158 }
159
160 @Override
161 public boolean isStartElement() {
162 if (usePayloadReaderDelegate) return payloadReader.isStartElement();
163 return super.isStartElement();
164 }
165
166 @Override
167 public boolean isEndElement() {
168 if (usePayloadReaderDelegate) return payloadReader.isEndElement();
169 return super.isEndElement();
170 }
171
172 @Override
173 public boolean isCharacters() {
174 if (usePayloadReaderDelegate) return payloadReader.isCharacters();
175 return super.isEndElement();
176 }
177
178 @Override
179 public boolean isWhiteSpace() {
180 if (usePayloadReaderDelegate) return payloadReader.isWhiteSpace();
181 return super.isWhiteSpace();
182 }
183
184 @Override
185 public String getAttributeValue(String namespaceURI, String localName) {
186 if (usePayloadReaderDelegate) return payloadReader.getAttributeValue(namespaceURI, localName);
187 return super.getAttributeValue(namespaceURI, localName);
188 }
189
190 @Override
191 public int getAttributeCount() {
192 if (usePayloadReaderDelegate) return payloadReader.getAttributeCount();
193 return super.getAttributeCount();
194 }
195
196 @Override
197 public QName getAttributeName(int index) {
198 if (usePayloadReaderDelegate) return payloadReader.getAttributeName(index);
199 return super.getAttributeName(index);
200 }
201
202 @Override
203 public String getAttributeNamespace(int index) {
204 if (usePayloadReaderDelegate) return payloadReader.getAttributeNamespace(index);
205 return super.getAttributeNamespace(index);
206 }
207
208 @Override
209 public String getAttributeLocalName(int index) {
210 if (usePayloadReaderDelegate) return payloadReader.getAttributeLocalName(index);
211 return super.getAttributeLocalName(index);
212 }
213
214 @Override
215 public String getAttributePrefix(int index) {
216 if (usePayloadReaderDelegate) return payloadReader.getAttributePrefix(index);
217 return super.getAttributePrefix(index);
218 }
219
220 @Override
221 public String getAttributeType(int index) {
222 if (usePayloadReaderDelegate) return payloadReader.getAttributeType(index);
223 return super.getAttributeType(index);
224 }
225
226 @Override
227 public String getAttributeValue(int index) {
228 if (usePayloadReaderDelegate) return payloadReader.getAttributeValue(index);
229 return super.getAttributeValue(index);
230 }
231
232 @Override
233 public boolean isAttributeSpecified(int index) {
234 if (usePayloadReaderDelegate) return payloadReader.isAttributeSpecified(index);
235 return super.isAttributeSpecified(index);
236 }
237
238 @Override
239 public int getNamespaceCount() {
240 if (usePayloadReaderDelegate) return payloadReader.getNamespaceCount();
241 return super.getNamespaceCount();
242 }
243
244 @Override
245 public String getNamespacePrefix(int index) {
246 if (usePayloadReaderDelegate) return payloadReader.getNamespacePrefix(index);
247 return super.getNamespacePrefix(index);
248 }
249
250 @Override
251 public String getNamespaceURI(int index) {
252 if (usePayloadReaderDelegate) return payloadReader.getNamespaceURI(index);
253 return super.getNamespaceURI(index);
254 }
255
256 @Override
257 public NamespaceContext getNamespaceContext() {
258 if (usePayloadReaderDelegate) return payloadReader.getNamespaceContext();
259 return super.getNamespaceContext();
260 }
261
262 @Override
263 public int getEventType() {
264 if (usePayloadReaderDelegate) return payloadReader.getEventType();
265 return super.getEventType();
266 }
267
268 @Override
269 public String getText() {
270 if (usePayloadReaderDelegate) return payloadReader.getText();
271 return super.getText();
272 }
273
274 @Override
275 public char[] getTextCharacters() {
276 if (usePayloadReaderDelegate) return payloadReader.getTextCharacters();
277 return super.getTextCharacters();
278 }
279
280 @Override
281 public int getTextCharacters(int sourceStart, char[] target,
282 int targetStart, int length) throws XMLStreamException {
283 if (usePayloadReaderDelegate) return payloadReader.getTextCharacters(sourceStart, target, targetStart,
284 length);
285 return super.getTextCharacters(sourceStart, target, targetStart, length);
286 }
287
288 @Override
289 public int getTextStart() {
290 if (usePayloadReaderDelegate) return payloadReader.getTextStart();
291 return super.getTextStart();
292 }
293
294 @Override
295 public int getTextLength() {
296 if (usePayloadReaderDelegate) return payloadReader.getTextLength();
297 return super.getTextLength();
298 }
299
300 @Override
301 public String getEncoding() {
302 if (usePayloadReaderDelegate) return payloadReader.getEncoding();
303 return super.getEncoding();
304 }
305
306 @Override
307 public boolean hasText() {
308 if (usePayloadReaderDelegate) return payloadReader.hasText();
309 return super.hasText();
310 }
311
312 @Override
313 public Location getLocation() {
314 if (usePayloadReaderDelegate) return payloadReader.getLocation();
315 return super.getLocation();
316 }
317
318 @Override
319 public QName getName() {
320 if (usePayloadReaderDelegate) return payloadReader.getName();
321 return super.getName();
322 }
323
324 @Override
325 public String getLocalName() {
326 if (usePayloadReaderDelegate) return payloadReader.getLocalName();
327 return super.getLocalName();
328 }
329
330 @Override
331 public boolean hasName() {
332 if (usePayloadReaderDelegate) return payloadReader.hasName();
333 return super.hasName();
334 }
335
336 @Override
337 public String getNamespaceURI() {
338 if (usePayloadReaderDelegate) return payloadReader.getNamespaceURI();
339 return super.getNamespaceURI();
340 }
341
342 @Override
343 public String getPrefix() {
344 if (usePayloadReaderDelegate) return payloadReader.getPrefix();
345 return super.getPrefix();
346 }
347
348 @Override
349 public String getVersion() {
350 if (usePayloadReaderDelegate) return payloadReader.getVersion();
351 return super.getVersion();
352 }
353
354 @Override
355 public boolean isStandalone() {
356 if (usePayloadReaderDelegate) return payloadReader.isStandalone();
357 return super.isStandalone();
358 }
359
360 @Override
361 public boolean standaloneSet() {
362 if (usePayloadReaderDelegate) return payloadReader.standaloneSet();
363 return super.standaloneSet();
364 }
365
366 @Override
367 public String getCharacterEncodingScheme() {
368 if (usePayloadReaderDelegate) return payloadReader.getCharacterEncodingScheme();
369 return super.getCharacterEncodingScheme();
370 }
371
372 @Override
373 public String getPITarget() {
374 if (usePayloadReaderDelegate) return payloadReader.getPITarget();
375 return super.getPITarget();
376 }
377
378 @Override
379 public String getPIData() {
380 if (usePayloadReaderDelegate) return payloadReader.getPIData();
381 return super.getPIData();
382 }
383
384 //make sure that message is not realized as a result of call
385 //to getFirstChild
386 protected Node getFirstChild(Node node) {
387 if (node instanceof BodyImpl) {
388 return ((BodyImpl) node).getFirstChildNoMaterialize();
389 } else {
390 return node.getFirstChild();
391 }
392 }
393
394 protected Node getNextSibling(Node node) {
395 if (node instanceof BodyImpl) {
396 //body is not expected to have a next sibling - even if it does
397 //we would have to materialize the node to retrieve it.
398 //Since we don't want to materialize it right now, just return null
|