TestW3CSchemaComplexTypes.java
package wstxtest.vstream;
import java.io.StringWriter;
import javax.xml.stream.XMLStreamException;
import org.codehaus.stax2.XMLInputFactory2;
import org.codehaus.stax2.XMLStreamReader2;
import org.codehaus.stax2.XMLStreamWriter2;
import org.codehaus.stax2.validation.XMLValidationSchema;
import com.ctc.wstx.sw.NonNsStreamWriter;
import com.ctc.wstx.sw.RepairingNsStreamWriter;
import com.ctc.wstx.sw.SimpleNsStreamWriter;
public class TestW3CSchemaComplexTypes
extends BaseValidationTest
{
/**
* For problem with MSV: https://github.com/kohsuke/msv/issues/2
*
* 29-Mar-2018, tatu: Oddly enough, problem itself allegedly resolved...
*/
public void testMSVGithubIssue2() throws Exception
{
XMLValidationSchema schema = parseW3CSchema(
"<xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:tns='http://MySchema' elementFormDefault='qualified' targetNamespace='http://MySchema' version='1.0'>"
+"<xs:element name='Root' type='tns:Root'/>"
+"<xs:complexType name='Root'>"
+" <xs:sequence>"
+" <xs:element minOccurs='0' name='Child' type='xs:anyType'/>"
+" </xs:sequence>"
+"</xs:complexType>"
+"<xs:complexType abstract='true' name='Child'>"
+"<xs:complexContent>"
+" <xs:extension base='tns:Base'>"
+" <xs:sequence/>"
+" </xs:extension>"
+"</xs:complexContent>"
+"</xs:complexType>"
+"<xs:complexType abstract='true' name='Base'>"
+"<xs:sequence/>"
+"</xs:complexType>"
+"<xs:complexType name='ChildInst'>"
+"<xs:complexContent>"
+" <xs:extension base='tns:Child'>"
+" <xs:sequence>"
+" </xs:sequence>"
+" </xs:extension>"
+"</xs:complexContent>"
+"</xs:complexType>"
+"</xs:schema>");
String XML = "<ns11:Root xmlns:ns11=\"http://MySchema\">"
+"<ns11:Child xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:type=\"ns11:ChildInst\">"
+"</ns11:Child>"
+"</ns11:Root>";
{
StringWriter writer = new StringWriter();
SimpleNsStreamWriter sw = (SimpleNsStreamWriter) constructStreamWriter(writer, true, false);
_testMSVGithubIssue2(schema, XML, sw, writer);
}
{
StringWriter writer = new StringWriter();
RepairingNsStreamWriter sw = (RepairingNsStreamWriter) constructStreamWriter(writer, true, true);
_testMSVGithubIssue2(schema, XML, sw, writer);
}
}
private void _testMSVGithubIssue2(XMLValidationSchema schema, String XML, XMLStreamWriter2 sw, StringWriter writer) throws XMLStreamException {
XMLStreamReader2 sr = getReader(XML);
sr.validateAgainst(schema);
sw.validateAgainst(schema);
assertTokenType(START_ELEMENT, sr.next());
assertEquals("Root", sr.getLocalName());
sw.copyEventFromReader(sr, false);
assertTokenType(START_ELEMENT, sr.next());
assertEquals("Child", sr.getLocalName());
sw.copyEventFromReader(sr, false);
assertTokenType(END_ELEMENT, sr.next());
sw.copyEventFromReader(sr, false);
assertTokenType(END_ELEMENT, sr.next());
sw.copyEventFromReader(sr, false);
assertTokenType(END_DOCUMENT, sr.next());
sw.copyEventFromReader(sr, false);
assertTokenType(END_DOCUMENT, sr.getEventType());
sr.close();
sw.close();
// the writers collapse empty elements
String expectedXML = XML.replace("></ns11:Child>", "/>");
assertEquals(expectedXML, writer.toString());
}
/*
///////////////////////////////////////////////////////////////////////
// Helper methods
///////////////////////////////////////////////////////////////////////
*/
XMLStreamReader2 getReader(String contents) throws XMLStreamException
{
XMLInputFactory2 f = getInputFactory();
setValidating(f, false);
return constructStreamReader(f, contents);
}
}