Stroap tweaks
This commit is contained in:
@@ -83,12 +83,19 @@
|
||||
<dependency>
|
||||
<groupId>org.codehaus.woodstox</groupId>
|
||||
<artifactId>woodstox-core-asl</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.sun.xml.messaging.saaj</groupId>
|
||||
<artifactId>saaj-impl</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.ws.commons.axiom</groupId>
|
||||
<artifactId>axiom-api</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.ws.commons.axiom</groupId>
|
||||
<artifactId>axiom-impl</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>commons-httpclient</groupId>
|
||||
<artifactId>commons-httpclient</artifactId>
|
||||
@@ -99,5 +106,10 @@
|
||||
<artifactId>xsom</artifactId>
|
||||
<version>20070515</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>log4j</groupId>
|
||||
<artifactId>log4j</artifactId>
|
||||
<scope>runtime</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
|
||||
@@ -16,9 +16,6 @@
|
||||
|
||||
package org.springframework.ws.soap.stroap;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import javax.xml.XMLConstants;
|
||||
import javax.xml.namespace.QName;
|
||||
@@ -102,12 +99,12 @@ class Stroap11Fault extends StroapFault implements Soap11Fault {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected List<XMLEventReader> getChildEventReaders() {
|
||||
List<XMLEventReader> eventReaders = new LinkedList<XMLEventReader>();
|
||||
eventReaders.add(faultCode.getEventReader());
|
||||
eventReaders.add(faultString.getEventReader());
|
||||
protected XMLEventReader[] getChildEventReaders() {
|
||||
XMLEventReader[] eventReaders = (faultActor != null) ? new XMLEventReader[2] : new XMLEventReader[3];
|
||||
eventReaders[0] = faultCode.getEventReader();
|
||||
eventReaders[1] = faultString.getEventReader();
|
||||
if (faultActor != null) {
|
||||
eventReaders.add(faultActor.getEventReader());
|
||||
eventReaders[2] = faultActor.getEventReader();
|
||||
}
|
||||
return eventReaders;
|
||||
}
|
||||
@@ -152,8 +149,8 @@ class Stroap11Fault extends StroapFault implements Soap11Fault {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected List<XMLEventReader> getChildEventReaders() {
|
||||
return Collections.<XMLEventReader>singletonList(new ListBasedXMLEventReader(characters));
|
||||
protected XMLEventReader[] getChildEventReaders() {
|
||||
return new XMLEventReader[]{new ListBasedXMLEventReader(characters)};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,12 +16,10 @@
|
||||
|
||||
package org.springframework.ws.soap.stroap;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import javax.xml.soap.SOAPConstants;
|
||||
import javax.xml.stream.XMLEventReader;
|
||||
import javax.xml.stream.events.StartElement;
|
||||
|
||||
import org.springframework.util.ObjectUtils;
|
||||
@@ -72,8 +70,4 @@ class Stroap11Header extends StroapHeader implements Soap11Header {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected List<XMLEventReader> getChildEventReaders() {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,8 +16,6 @@
|
||||
|
||||
package org.springframework.ws.soap.stroap;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import javax.xml.stream.XMLEventReader;
|
||||
import javax.xml.stream.XMLEventWriter;
|
||||
import javax.xml.stream.XMLStreamException;
|
||||
@@ -107,8 +105,8 @@ abstract class StroapBody extends StroapContainer implements SoapBody {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected final List<XMLEventReader> getChildEventReaders() {
|
||||
return Collections.singletonList(payload.getEventReader());
|
||||
protected final XMLEventReader[] getChildEventReaders() {
|
||||
return new XMLEventReader[]{payload.getEventReader()};
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -65,15 +65,16 @@ abstract class StroapContainer extends StroapElement {
|
||||
|
||||
@Override
|
||||
protected XMLEventReader getEventReader() {
|
||||
List<XMLEventReader> eventReaders = new LinkedList<XMLEventReader>();
|
||||
eventReaders.add(new ListBasedXMLEventReader(startElement));
|
||||
eventReaders.addAll(getChildEventReaders());
|
||||
eventReaders.add(new ListBasedXMLEventReader(endElement));
|
||||
XMLEventReader[] childEventReaders = getChildEventReaders();
|
||||
XMLEventReader[] eventReaders = new XMLEventReader[childEventReaders.length + 2];
|
||||
eventReaders[0] = new ListBasedXMLEventReader(startElement);
|
||||
System.arraycopy(childEventReaders, 0, eventReaders, 1, childEventReaders.length);
|
||||
eventReaders[eventReaders.length - 1] = new ListBasedXMLEventReader(endElement);
|
||||
|
||||
return new CompositeXMLEventReader(eventReaders);
|
||||
}
|
||||
|
||||
protected abstract List<XMLEventReader> getChildEventReaders();
|
||||
protected abstract XMLEventReader[] getChildEventReaders();
|
||||
|
||||
// Attributes
|
||||
|
||||
|
||||
@@ -16,8 +16,6 @@
|
||||
|
||||
package org.springframework.ws.soap.stroap;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import javax.xml.namespace.QName;
|
||||
import javax.xml.stream.XMLEventReader;
|
||||
import javax.xml.stream.XMLStreamException;
|
||||
@@ -114,15 +112,13 @@ class StroapEnvelope extends StroapContainer implements SoapEnvelope {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected List<XMLEventReader> getChildEventReaders() {
|
||||
List<XMLEventReader> result = new ArrayList<XMLEventReader>(2);
|
||||
protected XMLEventReader[] getChildEventReaders() {
|
||||
if (header != null) {
|
||||
result.add(header.getEventReader());
|
||||
return new XMLEventReader[]{header.getEventReader(), body.getEventReader()};
|
||||
}
|
||||
if (body != null) {
|
||||
result.add(body.getEventReader());
|
||||
else {
|
||||
return new XMLEventReader[]{body.getEventReader()};
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -107,12 +107,13 @@ abstract class StroapHeader extends StroapContainer implements SoapHeader {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected List<XMLEventReader> getChildEventReaders() {
|
||||
List<XMLEventReader> result = new LinkedList<XMLEventReader>();
|
||||
for (StroapHeaderElement headerElement : headerElements) {
|
||||
result.add(headerElement.getEventReader());
|
||||
protected XMLEventReader[] getChildEventReaders() {
|
||||
XMLEventReader[] eventReaders = new XMLEventReader[headerElements.size()];
|
||||
for (int i = 0; i < headerElements.size(); i++) {
|
||||
StroapHeaderElement headerElement = headerElements.get(i);
|
||||
eventReaders[i] = headerElement.getEventReader();
|
||||
}
|
||||
return result;
|
||||
return eventReaders;
|
||||
}
|
||||
|
||||
public Result getResult() {
|
||||
|
||||
@@ -16,7 +16,6 @@
|
||||
|
||||
package org.springframework.ws.soap.stroap;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import javax.xml.namespace.QName;
|
||||
@@ -105,8 +104,8 @@ class StroapHeaderElement extends StroapContainer implements SoapHeaderElement {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected List<XMLEventReader> getChildEventReaders() {
|
||||
return Collections.<XMLEventReader>singletonList(new ListBasedXMLEventReader(events));
|
||||
protected XMLEventReader[] getChildEventReaders() {
|
||||
return new XMLEventReader[]{new ListBasedXMLEventReader(events)};
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -124,5 +124,24 @@ public class StroapMessageFactory implements SoapMessageFactory<StroapMessage> {
|
||||
return XMLEventFactory.newFactory();
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
StringBuilder builder = new StringBuilder("StroapMessageFactory[");
|
||||
if (getSoapVersion() == SoapVersion.SOAP_11) {
|
||||
builder.append("SOAP 1.1");
|
||||
}
|
||||
else if (getSoapVersion() == SoapVersion.SOAP_12) {
|
||||
builder.append("SOAP 1.2");
|
||||
}
|
||||
builder.append(',');
|
||||
if (payloadCaching) {
|
||||
builder.append("PayloadCaching enabled");
|
||||
}
|
||||
else {
|
||||
builder.append("PayloadCaching disabled");
|
||||
}
|
||||
builder.append(']');
|
||||
return builder.toString();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -16,10 +16,7 @@
|
||||
|
||||
package org.springframework.xml.stream;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.NoSuchElementException;
|
||||
import javax.xml.stream.XMLEventReader;
|
||||
import javax.xml.stream.XMLStreamException;
|
||||
import javax.xml.stream.events.XMLEvent;
|
||||
@@ -31,58 +28,64 @@ import org.springframework.util.Assert;
|
||||
*/
|
||||
public class CompositeXMLEventReader extends AbstractXMLEventReader {
|
||||
|
||||
private List<XMLEventReader> eventReaders;
|
||||
private final XMLEventReader[] eventReaders;
|
||||
|
||||
private int cursor = 0;
|
||||
|
||||
public CompositeXMLEventReader(XMLEventReader eventReader) {
|
||||
Assert.notNull(eventReader, "'eventReader' must not be null");
|
||||
this.eventReaders = Collections.singletonList(eventReader);
|
||||
this.eventReaders = new XMLEventReader[]{eventReader};
|
||||
}
|
||||
|
||||
public CompositeXMLEventReader(XMLEventReader... eventReaders) {
|
||||
Assert.notNull(eventReaders, "'eventReaders' must not be null");
|
||||
this.eventReaders = Arrays.asList(eventReaders);
|
||||
this.eventReaders = eventReaders;
|
||||
}
|
||||
|
||||
public CompositeXMLEventReader(List<XMLEventReader> eventReaders) {
|
||||
Assert.notNull(eventReaders, "'eventReaders' must not be null");
|
||||
this.eventReaders = eventReaders;
|
||||
this.eventReaders = eventReaders.toArray(new XMLEventReader[eventReaders.size()]);
|
||||
}
|
||||
|
||||
public XMLEvent nextEvent() throws XMLStreamException {
|
||||
if (!hasNext()) {
|
||||
throw new NoSuchElementException();
|
||||
}
|
||||
else {
|
||||
return eventReaders.get(cursor).nextEvent();
|
||||
XMLEvent event = null;
|
||||
while (cursor < eventReaders.length) {
|
||||
event = eventReaders[cursor].nextEvent();
|
||||
if (cursor != eventReaders.length - 1 && event.isEndDocument()) {
|
||||
cursor++;
|
||||
}
|
||||
else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
return event;
|
||||
}
|
||||
|
||||
public boolean hasNext() {
|
||||
try {
|
||||
while (cursor < eventReaders.size()) {
|
||||
if (cursor != eventReaders.size() - 1) {
|
||||
XMLEvent event = eventReaders.get(cursor).peek();
|
||||
if (event == null || event.isEndDocument()) {
|
||||
cursor++;
|
||||
continue;
|
||||
}
|
||||
while (cursor < eventReaders.length) {
|
||||
if (cursor != eventReaders.length - 1) {
|
||||
if (!eventReaders[cursor].hasNext()) {
|
||||
cursor++;
|
||||
continue;
|
||||
}
|
||||
return eventReaders.get(cursor).hasNext();
|
||||
}
|
||||
}
|
||||
catch (XMLStreamException ex) {
|
||||
// ignored
|
||||
return eventReaders[cursor].hasNext();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public XMLEvent peek() throws XMLStreamException {
|
||||
if (hasNext()) {
|
||||
return eventReaders.get(cursor).peek();
|
||||
XMLEvent event = null;
|
||||
while (cursor < eventReaders.length) {
|
||||
event = eventReaders[cursor].peek();
|
||||
if (cursor != eventReaders.length - 1 && (event == null || event.isEndDocument())) {
|
||||
cursor++;
|
||||
}
|
||||
else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
return event;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -16,8 +16,6 @@
|
||||
|
||||
package org.springframework.xml.stream;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.NoSuchElementException;
|
||||
import javax.xml.stream.events.XMLEvent;
|
||||
@@ -29,44 +27,52 @@ import org.springframework.util.Assert;
|
||||
*/
|
||||
public class ListBasedXMLEventReader extends AbstractXMLEventReader {
|
||||
|
||||
private final List<XMLEvent> events;
|
||||
private final XMLEvent[] events;
|
||||
|
||||
private int cursor = 0;
|
||||
|
||||
public ListBasedXMLEventReader() {
|
||||
this.events = new XMLEvent[0];
|
||||
}
|
||||
|
||||
public ListBasedXMLEventReader(XMLEvent event) {
|
||||
Assert.notNull(event, "'event' must not be null");
|
||||
this.events = Collections.singletonList(event);
|
||||
if (event != null) {
|
||||
this.events = new XMLEvent[]{event};
|
||||
}
|
||||
else {
|
||||
this.events = new XMLEvent[0];
|
||||
}
|
||||
}
|
||||
|
||||
public ListBasedXMLEventReader(XMLEvent... events) {
|
||||
Assert.notNull(events, "'events' must not be null");
|
||||
this.events = Arrays.asList(events);
|
||||
this.events = events;
|
||||
}
|
||||
|
||||
public ListBasedXMLEventReader(List<XMLEvent> events) {
|
||||
Assert.notNull(events, "'events' must not be null");
|
||||
this.events = events;
|
||||
this.events = events.toArray(new XMLEvent[events.size()]);
|
||||
}
|
||||
|
||||
public boolean hasNext() {
|
||||
Assert.notNull(events, "'events' must not be null");
|
||||
return cursor != events.size();
|
||||
return cursor != events.length;
|
||||
}
|
||||
|
||||
public XMLEvent nextEvent() {
|
||||
try {
|
||||
return events.get(cursor++);
|
||||
if (cursor < events.length) {
|
||||
return events[cursor++];
|
||||
}
|
||||
catch (IndexOutOfBoundsException e) {
|
||||
else {
|
||||
throw new NoSuchElementException();
|
||||
}
|
||||
}
|
||||
|
||||
public XMLEvent peek() {
|
||||
try {
|
||||
return events.get(cursor);
|
||||
if (cursor < events.length) {
|
||||
return events[cursor];
|
||||
}
|
||||
catch (IndexOutOfBoundsException e) {
|
||||
else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,80 @@
|
||||
/*
|
||||
* Copyright 2005-2010 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.xml.stream;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.NoSuchElementException;
|
||||
import javax.xml.namespace.QName;
|
||||
import javax.xml.stream.XMLEventFactory;
|
||||
import javax.xml.stream.XMLEventReader;
|
||||
import javax.xml.stream.events.XMLEvent;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
/**
|
||||
* @author Arjen Poutsma
|
||||
*/
|
||||
public class CompositeXMLEventReaderTest {
|
||||
|
||||
private CompositeXMLEventReader chain;
|
||||
|
||||
private List<XMLEvent> events1 = new ArrayList<XMLEvent>();
|
||||
|
||||
private List<XMLEvent> events3 = new ArrayList<XMLEvent>();
|
||||
|
||||
@Before
|
||||
public void createChainUp() throws Exception {
|
||||
XMLEventFactory eventFactory = XMLEventFactory.newInstance();
|
||||
events1.add(eventFactory.createStartElement(new QName("event1-1"), null, null));
|
||||
events1.add(eventFactory.createEndDocument());
|
||||
events1.add(eventFactory.createStartElement(new QName("event1-2"), null, null));
|
||||
XMLEventReader reader1 = new ListBasedXMLEventReader(events1);
|
||||
XMLEventReader reader2 = new ListBasedXMLEventReader();
|
||||
events3.add(eventFactory.createStartElement(new QName("event2-1"), null, null));
|
||||
events3.add(eventFactory.createEndElement(new QName("event2-2"), null));
|
||||
XMLEventReader reader3 = new ListBasedXMLEventReader(events3);
|
||||
XMLEventReader reader4 = new ListBasedXMLEventReader();
|
||||
chain = new CompositeXMLEventReader(reader1, reader2, reader3, reader4);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testChain() throws Exception {
|
||||
assertEquals("peek returns invalid result", events1.get(0), chain.peek());
|
||||
assertTrue("hasNext returns false", chain.hasNext());
|
||||
assertEquals("nextEvent returns invalid result", events1.get(0), chain.nextEvent());
|
||||
assertEquals("peek returns invalid result", events3.get(0), chain.peek());
|
||||
assertTrue("hasNext returns false", chain.hasNext());
|
||||
assertEquals("nextEvent returns invalid result", events3.get(0), chain.nextEvent());
|
||||
assertEquals("peek returns invalid result", events3.get(1), chain.peek());
|
||||
assertTrue("hasNext returns false", chain.hasNext());
|
||||
assertEquals("nextEvent returns invalid result", events3.get(1), chain.nextEvent());
|
||||
assertFalse("hasNext returns true", chain.hasNext());
|
||||
assertNull("peek returns element", chain.peek());
|
||||
try {
|
||||
chain.nextEvent();
|
||||
fail("NoSuchElementElementException expected");
|
||||
}
|
||||
catch (NoSuchElementException e) {
|
||||
// expected
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user