You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by dk...@apache.org on 2011/02/03 18:18:52 UTC
svn commit: r1066876 - in /cxf/trunk:
common/common/src/main/java/org/apache/cxf/staxutils/
common/common/src/test/java/org/apache/cxf/staxutils/
rt/core/src/main/java/org/apache/cxf/databinding/source/
systests/jaxws/src/test/java/org/apache/cxf/syste...
Author: dkulp
Date: Thu Feb 3 17:18:52 2011
New Revision: 1066876
URL: http://svn.apache.org/viewvc?rev=1066876&view=rev
Log:
[CXF-3305] Fix problems with Provider<Source> getting a Source that
doesn't properly have the streamreader set to START_DOCUMENT.
Modified:
cxf/trunk/common/common/src/main/java/org/apache/cxf/staxutils/FragmentStreamReader.java
cxf/trunk/common/common/src/test/java/org/apache/cxf/staxutils/FragmentStreamReaderTest.java
cxf/trunk/rt/core/src/main/java/org/apache/cxf/databinding/source/XMLStreamDataReader.java
cxf/trunk/systests/jaxws/src/test/java/org/apache/cxf/systest/provider/AbstractSourcePayloadProvider.java
Modified: cxf/trunk/common/common/src/main/java/org/apache/cxf/staxutils/FragmentStreamReader.java
URL: http://svn.apache.org/viewvc/cxf/trunk/common/common/src/main/java/org/apache/cxf/staxutils/FragmentStreamReader.java?rev=1066876&r1=1066875&r2=1066876&view=diff
==============================================================================
--- cxf/trunk/common/common/src/main/java/org/apache/cxf/staxutils/FragmentStreamReader.java (original)
+++ cxf/trunk/common/common/src/main/java/org/apache/cxf/staxutils/FragmentStreamReader.java Thu Feb 3 17:18:52 2011
@@ -28,14 +28,13 @@ import javax.xml.stream.XMLStreamReader;
* @author <a href="mailto:dan@envoisolutions.com">Dan Diephouse</a>
*/
public class FragmentStreamReader extends DepthXMLStreamReader {
- private boolean startDoc;
private boolean startElement;
private boolean middle = true;
private boolean endDoc;
private boolean doDocEvents = true;
private int depth;
- private int current = -1;
+ private int current = XMLStreamReader.START_DOCUMENT;
private boolean filter = true;
private boolean advanceAtEnd = true;
@@ -46,11 +45,11 @@ public class FragmentStreamReader extend
super(reader);
this.doDocEvents = doDocEvents;
if (!doDocEvents) {
- startDoc = true;
-
depth = getDepth();
current = reader.getEventType();
- startElement = true;
+ if (current != XMLStreamReader.START_DOCUMENT) {
+ startElement = true;
+ }
}
}
@@ -59,9 +58,6 @@ public class FragmentStreamReader extend
}
public boolean hasNext() throws XMLStreamException {
- if (!startDoc) {
- return true;
- }
if (endDoc) {
return false;
@@ -71,10 +67,7 @@ public class FragmentStreamReader extend
}
public final int next() throws XMLStreamException {
- if (!startDoc) {
- startDoc = true;
- current = START_DOCUMENT;
- } else if (!startElement) {
+ if (!startElement) {
depth = getDepth();
current = reader.getEventType();
Modified: cxf/trunk/common/common/src/test/java/org/apache/cxf/staxutils/FragmentStreamReaderTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/common/common/src/test/java/org/apache/cxf/staxutils/FragmentStreamReaderTest.java?rev=1066876&r1=1066875&r2=1066876&view=diff
==============================================================================
--- cxf/trunk/common/common/src/test/java/org/apache/cxf/staxutils/FragmentStreamReaderTest.java (original)
+++ cxf/trunk/common/common/src/test/java/org/apache/cxf/staxutils/FragmentStreamReaderTest.java Thu Feb 3 17:18:52 2011
@@ -19,6 +19,8 @@
package org.apache.cxf.staxutils;
+import java.io.StringReader;
+
import javax.xml.stream.XMLStreamReader;
import org.junit.Assert;
@@ -40,7 +42,6 @@ public class FragmentStreamReaderTest ex
FragmentStreamReader fsr = new FragmentStreamReader(dr);
assertTrue(fsr.hasNext());
- assertEquals(XMLStreamReader.START_DOCUMENT, fsr.next());
assertEquals(XMLStreamReader.START_DOCUMENT, fsr.getEventType());
fsr.next();
@@ -51,4 +52,47 @@ public class FragmentStreamReaderTest ex
fsr.close();
}
+
+
+ @Test
+ public void testEvents() throws Exception {
+ String test = "<foo><foo2/></foo>";
+ //test the full stream
+ XMLStreamReader reader = StaxUtils.createXMLStreamReader(new StringReader(test));
+ reader = new FragmentStreamReader(reader);
+ assertEvents(reader, 7, 1, 1, 2, 2, 8);
+
+ reader = StaxUtils.createXMLStreamReader(new StringReader(test));
+ reader = new FragmentStreamReader(reader, true);
+ assertEvents(reader, 7, 1, 1, 2, 2, 8);
+
+ reader = StaxUtils.createXMLStreamReader(new StringReader(test));
+ reader = new FragmentStreamReader(reader, false);
+ assertEvents(reader, 7, 1, 1, 2, 2, 8);
+
+
+ //test a partial stream, skip over the startdoc even prior to creating
+ //the FragmentStreamReader to make sure the event could be generated
+ reader = StaxUtils.createXMLStreamReader(new StringReader(test));
+ reader.next();
+ reader = new FragmentStreamReader(reader);
+ assertEvents(reader, 7, 1, 1, 2, 2, 8);
+
+ reader = StaxUtils.createXMLStreamReader(new StringReader(test));
+ reader.next();
+ reader = new FragmentStreamReader(reader, true);
+ assertEvents(reader, 7, 1, 1, 2, 2, 8);
+
+ reader = StaxUtils.createXMLStreamReader(new StringReader(test));
+ reader.next();
+ reader = new FragmentStreamReader(reader, false);
+ assertEvents(reader, 1, 1, 2, 2);
+ }
+
+ private void assertEvents(XMLStreamReader reader, int initial, int ... events) throws Exception {
+ assertEquals(initial, reader.getEventType());
+ for (int x : events) {
+ assertEquals(x, reader.next());
+ }
+ }
}
Modified: cxf/trunk/rt/core/src/main/java/org/apache/cxf/databinding/source/XMLStreamDataReader.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/core/src/main/java/org/apache/cxf/databinding/source/XMLStreamDataReader.java?rev=1066876&r1=1066875&r2=1066876&view=diff
==============================================================================
--- cxf/trunk/rt/core/src/main/java/org/apache/cxf/databinding/source/XMLStreamDataReader.java (original)
+++ cxf/trunk/rt/core/src/main/java/org/apache/cxf/databinding/source/XMLStreamDataReader.java Thu Feb 3 17:18:52 2011
@@ -163,7 +163,7 @@ public class XMLStreamDataReader impleme
final InputStream ins = message.getContent(InputStream.class);
message.removeContent(InputStream.class);
- input = new FragmentStreamReader(input) {
+ input = new FragmentStreamReader(input, true) {
boolean closed;
public boolean hasNext() throws XMLStreamException {
boolean b = super.hasNext();
Modified: cxf/trunk/systests/jaxws/src/test/java/org/apache/cxf/systest/provider/AbstractSourcePayloadProvider.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/jaxws/src/test/java/org/apache/cxf/systest/provider/AbstractSourcePayloadProvider.java?rev=1066876&r1=1066875&r2=1066876&view=diff
==============================================================================
--- cxf/trunk/systests/jaxws/src/test/java/org/apache/cxf/systest/provider/AbstractSourcePayloadProvider.java (original)
+++ cxf/trunk/systests/jaxws/src/test/java/org/apache/cxf/systest/provider/AbstractSourcePayloadProvider.java Thu Feb 3 17:18:52 2011
@@ -72,6 +72,12 @@ public abstract class AbstractSourcePayl
try {
System.out.println(request.getClass().getName());
+ if (request instanceof StaxSource) {
+ StaxSource ss = (StaxSource)request;
+ if (ss.getXMLStreamReader().getEventType() == -1) {
+ throw new RuntimeException("Should not be a -1 event");
+ }
+ }
String input = getSourceAsString(request);
System.out.println(input);