package nl.nn.adapterframework.soap;
import nl.nn.adapterframework.configuration.ConfigurationException;
import nl.nn.adapterframework.util.ClassUtils;
import nl.nn.adapterframework.validation.SchemaUtils;
import nl.nn.adapterframework.validation.XSD;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamWriter;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.net.URISyntaxException;
import java.net.URL;
import org.custommonkey.xmlunit.XMLUnit;
import org.junit.Ignore;
import org.junit.Test;
import org.w3c.dom.Document;
import org.xml.sax.SAXException;
import static org.custommonkey.xmlunit.XMLAssert.assertXMLEqual;
import static org.junit.Assert.assertEquals;
/**
* TODO It seems that XSD class was refactored, breaking all tests.
* @author Michiel Meeuwissen
*/
public class XSDTest {
@Test
public void xsdName() throws URISyntaxException, XMLStreamException, IOException, ConfigurationException {
XSD xsd = new XSD();
xsd.setResource("v1 test.xsd");
xsd.setNamespace("http://test");
xsd.init();
assertEquals("v1 test.xsd", xsd.getResourceTarget());
}
@Test
public void xsdNamespace() throws URISyntaxException, XMLStreamException, IOException, ConfigurationException {
XSD xsd = new XSD();
xsd.setResource("v1 test.xsd");
xsd.setNamespace("http://test");
xsd.init();
assertEquals("http://test",
xsd.getNamespace());
assertEquals("http://www.ing.com/pim",
xsd.getTargetNamespace());
}
@Test
@Ignore("Fails!!")
public void writeXSD() throws XMLStreamException, IOException, ParserConfigurationException, SAXException, URISyntaxException, ConfigurationException {
XSD xsd = new XSD();
xsd.setResource("XSDTest/test.xsd");
xsd.setNamespace("http://test");
ByteArrayOutputStream out = new ByteArrayOutputStream();
XMLStreamWriter writer = WsdlUtils.getWriter(out, false);
SchemaUtils.xsdToXmlStreamWriter(xsd, writer);
DocumentBuilder dbuilder = WsdlTest.createDocumentBuilder();
Document result = dbuilder.parse(new ByteArrayInputStream(out.toByteArray()));
Document expected = dbuilder.parse(getClass().getClassLoader().getResourceAsStream("XSDTest/test_expected.xsd"));
XMLUnit.setIgnoreWhitespace(false);
assertXMLEqual("expected xml (XSDTest/test_expected.xsd) not similar to result xml:\n" + new String(out.toByteArray()), expected, result);
}
/*
@Test
public void writeXSDStripSchemaLocation() throws XMLStreamException, IOException, ParserConfigurationException, SAXException, URISyntaxException {
XSD xsd = new XSD(
ClassUtils.getResourceURL("XSDTest/test.xsd"),
"http://test",
ByteArrayOutputStream out = new ByteArrayOutputStream();
XMLStreamWriter writer = WsdlUtils.getWriter(out, false);
SchemaUtils.xsdToXmlStreamWriter(xsd, writer, true);
DocumentBuilder dbuilder = WsdlTest.createDocumentBuilder();
Document result = dbuilder.parse(new ByteArrayInputStream(out.toByteArray()));
Document expected = dbuilder.parse(getClass().getClassLoader().getResourceAsStream("XSDTest/test_expected_removed_imported_namespaces.xsd"));
System.out.println(new String(out.toByteArray()));
XMLUnit.setIgnoreWhitespace(false);
assertXMLEqual("test xml not similar to control xml", expected, result);
}
/*
@Test
public void importedXsds() throws URISyntaxException, XMLStreamException, IOException {
XSD xsd = new XSD("", "http://test", ClassUtils.getResourceURL("XSDTest/test.xsd").toURI(), 0);
assertEquals(2, xsd.getImportXSDs(null).size());
System.out.println("" + xsd.getImportXSDs(null));
}
*/
}