Migrated to Gradle build
This commit migrates from a Maven-based build system to a Gradle-based one. Changes include: - Removed archetype & parent - Renamed core, support, test, security and xml directories to spring-ws-core, spring-ws-test, spring-ws-security, spring-xml respectively. - Moved samples to separate project (https://github.com/spring-projects/spring-ws-samples)
This commit is contained in:
committed by
Arjen Poutsma
parent
a8c1d2ad97
commit
843ca6d2ef
@@ -0,0 +1,95 @@
|
||||
/*
|
||||
* 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.dom;
|
||||
|
||||
import java.io.StringReader;
|
||||
import javax.xml.parsers.DocumentBuilder;
|
||||
import javax.xml.parsers.DocumentBuilderFactory;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Element;
|
||||
import org.xml.sax.InputSource;
|
||||
import org.xml.sax.XMLReader;
|
||||
import org.xml.sax.helpers.XMLReaderFactory;
|
||||
|
||||
import static org.custommonkey.xmlunit.XMLAssert.assertXMLEqual;
|
||||
|
||||
public class DomContentHandlerTest {
|
||||
|
||||
private static final String XML_1 = "<?xml version='1.0' encoding='UTF-8'?>" + "<?pi content?>" +
|
||||
"<root xmlns='namespace'>" +
|
||||
"<prefix:child xmlns:prefix='namespace2' xmlns:prefix2='namespace3' prefix2:attr='value'>content</prefix:child>" +
|
||||
"</root>";
|
||||
|
||||
private static final String XML_2_EXPECTED = "<?xml version='1.0' encoding='UTF-8'?>" + "<root xmlns='namespace'>" +
|
||||
"<child xmlns='namespace2' />" + "</root>";
|
||||
|
||||
private static final String XML_2_SNIPPET =
|
||||
"<?xml version='1.0' encoding='UTF-8'?>" + "<child xmlns='namespace2' />";
|
||||
|
||||
private Document expected;
|
||||
|
||||
private DomContentHandler handler;
|
||||
|
||||
private Document result;
|
||||
|
||||
private XMLReader xmlReader;
|
||||
|
||||
private DocumentBuilder documentBuilder;
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
|
||||
documentBuilderFactory.setNamespaceAware(true);
|
||||
documentBuilder = documentBuilderFactory.newDocumentBuilder();
|
||||
result = documentBuilder.newDocument();
|
||||
xmlReader = XMLReaderFactory.createXMLReader();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testContentHandlerDocumentNamespacePrefixes() throws Exception {
|
||||
xmlReader.setFeature("http://xml.org/sax/features/namespace-prefixes", true);
|
||||
handler = new DomContentHandler(result);
|
||||
expected = documentBuilder.parse(new InputSource(new StringReader(XML_1)));
|
||||
xmlReader.setContentHandler(handler);
|
||||
xmlReader.parse(new InputSource(new StringReader(XML_1)));
|
||||
assertXMLEqual("Invalid result", expected, result);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testContentHandlerDocumentNoNamespacePrefixes() throws Exception {
|
||||
handler = new DomContentHandler(result);
|
||||
expected = documentBuilder.parse(new InputSource(new StringReader(XML_1)));
|
||||
xmlReader.setContentHandler(handler);
|
||||
xmlReader.parse(new InputSource(new StringReader(XML_1)));
|
||||
assertXMLEqual("Invalid result", expected, result);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testContentHandlerElement() throws Exception {
|
||||
Element rootElement = result.createElementNS("namespace", "root");
|
||||
result.appendChild(rootElement);
|
||||
handler = new DomContentHandler(rootElement);
|
||||
expected = documentBuilder.parse(new InputSource(new StringReader(XML_2_EXPECTED)));
|
||||
xmlReader.setContentHandler(handler);
|
||||
xmlReader.parse(new InputSource(new StringReader(XML_2_SNIPPET)));
|
||||
assertXMLEqual("Invalid result", expected, result);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
/*
|
||||
* 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.namespace;
|
||||
|
||||
import javax.xml.namespace.QName;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
public class QNameEditorTest {
|
||||
|
||||
private QNameEditor editor;
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
editor = new QNameEditor();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNamespaceLocalPartPrefix() throws Exception {
|
||||
QName qname = new QName("namespace", "localpart", "prefix");
|
||||
doTest(qname);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNamespaceLocalPart() throws Exception {
|
||||
QName qname = new QName("namespace", "localpart");
|
||||
doTest(qname);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLocalPart() throws Exception {
|
||||
QName qname = new QName("localpart");
|
||||
doTest(qname);
|
||||
}
|
||||
|
||||
private void doTest(QName qname) {
|
||||
editor.setValue(qname);
|
||||
String text = editor.getAsText();
|
||||
Assert.assertNotNull("getAsText returns null", text);
|
||||
editor.setAsText(text);
|
||||
QName result = (QName) editor.getValue();
|
||||
Assert.assertNotNull("getValue returns null", result);
|
||||
Assert.assertEquals("Parsed QName local part is not equal to original", qname.getLocalPart(), result.getLocalPart());
|
||||
Assert.assertEquals("Parsed QName prefix is not equal to original", qname.getPrefix(), result.getPrefix());
|
||||
Assert.assertEquals("Parsed QName namespace is not equal to original", qname.getNamespaceURI(),
|
||||
result.getNamespaceURI());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,117 @@
|
||||
/*
|
||||
* 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.namespace;
|
||||
|
||||
import javax.xml.namespace.QName;
|
||||
import javax.xml.parsers.DocumentBuilder;
|
||||
import javax.xml.parsers.DocumentBuilderFactory;
|
||||
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Element;
|
||||
|
||||
public class QNameUtilsTest {
|
||||
|
||||
@Test
|
||||
public void testValidQNames() {
|
||||
Assert.assertTrue("Namespace QName not validated", QNameUtils.validateQName("{namespace}local"));
|
||||
Assert.assertTrue("No Namespace QName not validated", QNameUtils.validateQName("local"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testInvalidQNames() {
|
||||
Assert.assertFalse("Null QName validated", QNameUtils.validateQName(null));
|
||||
Assert.assertFalse("Empty QName validated", QNameUtils.validateQName(""));
|
||||
Assert.assertFalse("Invalid QName validated", QNameUtils.validateQName("{namespace}"));
|
||||
Assert.assertFalse("Invalid QName validated", QNameUtils.validateQName("{namespace"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetQNameForNodeNoNamespace() throws Exception {
|
||||
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
|
||||
DocumentBuilder builder = factory.newDocumentBuilder();
|
||||
Document document = builder.newDocument();
|
||||
Element element = document.createElement("localname");
|
||||
QName qName = QNameUtils.getQNameForNode(element);
|
||||
Assert.assertNotNull("getQNameForNode returns null", qName);
|
||||
Assert.assertEquals("QName has invalid localname", "localname", qName.getLocalPart());
|
||||
Assert.assertFalse("Qname has invalid namespace", StringUtils.hasLength(qName.getNamespaceURI()));
|
||||
Assert.assertFalse("Qname has invalid prefix", StringUtils.hasLength(qName.getPrefix()));
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetQNameForNodeNoPrefix() throws Exception {
|
||||
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
|
||||
DocumentBuilder builder = factory.newDocumentBuilder();
|
||||
Document document = builder.newDocument();
|
||||
Element element = document.createElementNS("namespace", "localname");
|
||||
QName qName = QNameUtils.getQNameForNode(element);
|
||||
Assert.assertNotNull("getQNameForNode returns null", qName);
|
||||
Assert.assertEquals("QName has invalid localname", "localname", qName.getLocalPart());
|
||||
Assert.assertEquals("Qname has invalid namespace", "namespace", qName.getNamespaceURI());
|
||||
Assert.assertFalse("Qname has invalid prefix", StringUtils.hasLength(qName.getPrefix()));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetQNameForNode() throws Exception {
|
||||
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
|
||||
DocumentBuilder builder = factory.newDocumentBuilder();
|
||||
Document document = builder.newDocument();
|
||||
Element element = document.createElementNS("namespace", "prefix:localname");
|
||||
QName qName = QNameUtils.getQNameForNode(element);
|
||||
Assert.assertNotNull("getQNameForNode returns null", qName);
|
||||
Assert.assertEquals("QName has invalid localname", "localname", qName.getLocalPart());
|
||||
Assert.assertEquals("Qname has invalid namespace", "namespace", qName.getNamespaceURI());
|
||||
Assert.assertEquals("Qname has invalid prefix", "prefix", qName.getPrefix());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testToQualifiedNamePrefix() throws Exception {
|
||||
QName qName = new QName("namespace", "localName", "prefix");
|
||||
String result = QNameUtils.toQualifiedName(qName);
|
||||
Assert.assertEquals("Invalid result", "prefix:localName", result);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testToQualifiedNameNoPrefix() throws Exception {
|
||||
QName qName = new QName("localName");
|
||||
String result = QNameUtils.toQualifiedName(qName);
|
||||
Assert.assertEquals("Invalid result", "localName", result);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testToQNamePrefix() throws Exception {
|
||||
QName result = QNameUtils.toQName("namespace", "prefix:localName");
|
||||
Assert.assertEquals("invalid namespace", "namespace", result.getNamespaceURI());
|
||||
Assert.assertEquals("invalid prefix", "prefix", result.getPrefix());
|
||||
Assert.assertEquals("invalid localname", "localName", result.getLocalPart());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testToQNameNoPrefix() throws Exception {
|
||||
QName result = QNameUtils.toQName("namespace", "localName");
|
||||
Assert.assertEquals("invalid namespace", "namespace", result.getNamespaceURI());
|
||||
Assert.assertEquals("invalid prefix", "", result.getPrefix());
|
||||
Assert.assertEquals("invalid localname", "localName", result.getLocalPart());
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,182 @@
|
||||
/*
|
||||
* 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.namespace;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Iterator;
|
||||
import javax.xml.XMLConstants;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
public class SimpleNamespaceContextTest {
|
||||
|
||||
private SimpleNamespaceContext context;
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
context = new SimpleNamespaceContext();
|
||||
context.bindNamespaceUri("prefix", "namespaceURI");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetNamespaceURI() {
|
||||
Assert.assertEquals("Invalid namespaceURI for default namespace", "", context
|
||||
.getNamespaceURI(XMLConstants.DEFAULT_NS_PREFIX));
|
||||
String defaultNamespaceUri = "defaultNamespace";
|
||||
context.bindNamespaceUri(XMLConstants.DEFAULT_NS_PREFIX, defaultNamespaceUri);
|
||||
Assert.assertEquals("Invalid namespaceURI for default namespace", defaultNamespaceUri, context
|
||||
.getNamespaceURI(XMLConstants.DEFAULT_NS_PREFIX));
|
||||
Assert.assertEquals("Invalid namespaceURI for bound prefix", "namespaceURI", context.getNamespaceURI("prefix"));
|
||||
Assert.assertEquals("Invalid namespaceURI for unbound prefix", "", context.getNamespaceURI("unbound"));
|
||||
Assert.assertEquals("Invalid namespaceURI for namespace prefix", XMLConstants.XML_NS_URI, context
|
||||
.getNamespaceURI(XMLConstants.XML_NS_PREFIX));
|
||||
Assert.assertEquals("Invalid namespaceURI for attribute prefix", XMLConstants.XMLNS_ATTRIBUTE_NS_URI, context
|
||||
.getNamespaceURI(XMLConstants.XMLNS_ATTRIBUTE));
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetPrefix() {
|
||||
context.bindDefaultNamespaceUri("defaultNamespaceURI");
|
||||
Assert.assertEquals("Invalid prefix for default namespace", XMLConstants.DEFAULT_NS_PREFIX, context.getPrefix("defaultNamespaceURI"));
|
||||
Assert.assertEquals("Invalid prefix for bound namespace", "prefix", context.getPrefix("namespaceURI"));
|
||||
Assert.assertNull("Invalid prefix for unbound namespace", context.getPrefix("unbound"));
|
||||
Assert.assertEquals("Invalid prefix for namespace", XMLConstants.XML_NS_PREFIX, context
|
||||
.getPrefix(XMLConstants.XML_NS_URI));
|
||||
Assert.assertEquals("Invalid prefix for attribute namespace", XMLConstants.XMLNS_ATTRIBUTE, context
|
||||
.getPrefix(XMLConstants.XMLNS_ATTRIBUTE_NS_URI));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetPrefixes() {
|
||||
context.bindDefaultNamespaceUri("defaultNamespaceURI");
|
||||
assertPrefixes("defaultNamespaceURI", XMLConstants.DEFAULT_NS_PREFIX);
|
||||
assertPrefixes("namespaceURI", "prefix");
|
||||
Assert.assertFalse("Invalid prefix for unbound namespace", context.getPrefixes("unbound").hasNext());
|
||||
assertPrefixes(XMLConstants.XML_NS_URI, XMLConstants.XML_NS_PREFIX);
|
||||
assertPrefixes(XMLConstants.XMLNS_ATTRIBUTE_NS_URI, XMLConstants.XMLNS_ATTRIBUTE);
|
||||
}
|
||||
|
||||
@Test(expected = UnsupportedOperationException.class)
|
||||
public void unmodifiableGetPrefixes() {
|
||||
String namespaceUri = "namespaceUri";
|
||||
context.bindNamespaceUri("prefix1", namespaceUri);
|
||||
context.bindNamespaceUri("prefix2", namespaceUri);
|
||||
|
||||
Iterator<String> prefixes = context.getPrefixes(namespaceUri);
|
||||
prefixes.next();
|
||||
prefixes.remove();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMultiplePrefixes() {
|
||||
context.bindNamespaceUri("prefix1", "namespace");
|
||||
context.bindNamespaceUri("prefix2", "namespace");
|
||||
Iterator<String> iterator = context.getPrefixes("namespace");
|
||||
Assert.assertNotNull("getPrefixes returns null", iterator);
|
||||
Assert.assertTrue("iterator is empty", iterator.hasNext());
|
||||
String result = (String) iterator.next();
|
||||
Assert.assertTrue("Invalid prefix", result.equals("prefix1") || result.equals("prefix2"));
|
||||
Assert.assertTrue("iterator is empty", iterator.hasNext());
|
||||
result = (String) iterator.next();
|
||||
Assert.assertTrue("Invalid prefix", result.equals("prefix1") || result.equals("prefix2"));
|
||||
Assert.assertFalse("iterator contains more than two values", iterator.hasNext());
|
||||
}
|
||||
|
||||
private void assertPrefixes(String namespaceUri, String prefix) {
|
||||
Iterator<String> iterator = context.getPrefixes(namespaceUri);
|
||||
Assert.assertNotNull("getPrefixes returns null", iterator);
|
||||
Assert.assertTrue("iterator is empty", iterator.hasNext());
|
||||
String result = (String) iterator.next();
|
||||
Assert.assertEquals("Invalid prefix", prefix, result);
|
||||
Assert.assertFalse("iterator contains multiple values", iterator.hasNext());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetBoundPrefixes() throws Exception {
|
||||
Iterator<String> iterator = context.getBoundPrefixes();
|
||||
Assert.assertNotNull("getPrefixes returns null", iterator);
|
||||
Assert.assertTrue("iterator is empty", iterator.hasNext());
|
||||
String result = (String) iterator.next();
|
||||
Assert.assertEquals("Invalid prefix", "prefix", result);
|
||||
Assert.assertFalse("iterator contains multiple values", iterator.hasNext());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSetBindings() throws Exception {
|
||||
context.setBindings(Collections.singletonMap("prefix", "namespace"));
|
||||
Assert.assertEquals("Invalid namespace uri", "namespace", context.getNamespaceURI("prefix"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRemoveBinding() {
|
||||
context.clear();
|
||||
String prefix1 = "prefix1";
|
||||
String prefix2 = "prefix2";
|
||||
String namespaceUri = "namespaceUri";
|
||||
context.bindNamespaceUri(prefix1, namespaceUri);
|
||||
context.bindNamespaceUri(prefix2, namespaceUri);
|
||||
Iterator<String> iter = context.getPrefixes(namespaceUri);
|
||||
Assert.assertTrue("iterator is empty", iter.hasNext());
|
||||
Assert.assertEquals(prefix1, iter.next());
|
||||
Assert.assertTrue("iterator is empty", iter.hasNext());
|
||||
Assert.assertEquals(prefix2, iter.next());
|
||||
Assert.assertFalse("iterator not empty", iter.hasNext());
|
||||
|
||||
context.removeBinding(prefix1);
|
||||
|
||||
iter = context.getPrefixes(namespaceUri);
|
||||
Assert.assertTrue("iterator is empty", iter.hasNext());
|
||||
Assert.assertEquals(prefix2, iter.next());
|
||||
Assert.assertFalse("iterator not empty", iter.hasNext());
|
||||
|
||||
context.removeBinding(prefix2);
|
||||
|
||||
iter = context.getPrefixes(namespaceUri);
|
||||
Assert.assertFalse("iterator not empty", iter.hasNext());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testHasBinding() {
|
||||
context.clear();
|
||||
String prefix = "prefix";
|
||||
Assert.assertFalse("Context has binding", context.hasBinding(prefix));
|
||||
String namespaceUri = "namespaceUri";
|
||||
context.bindNamespaceUri(prefix, namespaceUri);
|
||||
Assert.assertTrue("Context has no binding", context.hasBinding(prefix));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDefaultNamespaceMultiplePrefixes() {
|
||||
String defaultNamespace = "http://springframework.org/spring-ws";
|
||||
context.bindDefaultNamespaceUri(defaultNamespace);
|
||||
context.bindNamespaceUri("prefix", defaultNamespace);
|
||||
Assert.assertEquals("Invalid prefix", XMLConstants.DEFAULT_NS_PREFIX, context.getPrefix(defaultNamespace));
|
||||
Iterator<String> iterator = context.getPrefixes(defaultNamespace);
|
||||
Assert.assertNotNull("getPrefixes returns null", iterator);
|
||||
Assert.assertTrue("iterator is empty", iterator.hasNext());
|
||||
String result = (String) iterator.next();
|
||||
Assert.assertTrue("Invalid prefix", result.equals(XMLConstants.DEFAULT_NS_PREFIX) || result.equals("prefix"));
|
||||
Assert.assertTrue("iterator is empty", iterator.hasNext());
|
||||
result = (String) iterator.next();
|
||||
Assert.assertTrue("Invalid prefix", result.equals(XMLConstants.DEFAULT_NS_PREFIX) || result.equals("prefix"));
|
||||
Assert.assertFalse("iterator contains more than two values", iterator.hasNext());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
/*
|
||||
* 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.sax;
|
||||
|
||||
import org.springframework.core.io.FileSystemResource;
|
||||
import org.springframework.core.io.Resource;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
public class SaxUtilsTest {
|
||||
|
||||
@Test
|
||||
public void testGetSystemId() throws Exception {
|
||||
Resource resource = new FileSystemResource("/path with spaces/file with spaces.txt");
|
||||
String systemId = SaxUtils.getSystemId(resource);
|
||||
Assert.assertNotNull("No systemId returned", systemId);
|
||||
Assert.assertTrue("Invalid system id", systemId.endsWith("path%20with%20spaces/file%20with%20spaces.txt"));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
/*
|
||||
* 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.transform;
|
||||
|
||||
import javax.xml.transform.Transformer;
|
||||
import javax.xml.transform.TransformerFactory;
|
||||
import javax.xml.transform.dom.DOMResult;
|
||||
|
||||
import org.springframework.core.io.ClassPathResource;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
import org.w3c.dom.Element;
|
||||
|
||||
public class ResourceSourceTest {
|
||||
|
||||
@Test
|
||||
public void testStringSource() throws Exception {
|
||||
Transformer transformer = TransformerFactory.newInstance().newTransformer();
|
||||
DOMResult result = new DOMResult();
|
||||
ResourceSource source = new ResourceSource(new ClassPathResource("resourceSource.xml", getClass()));
|
||||
transformer.transform(source, result);
|
||||
Element rootElement = (Element) result.getNode().getFirstChild();
|
||||
Assert.assertEquals("Invalid local name", "content", rootElement.getLocalName());
|
||||
Assert.assertEquals("Invalid prefix", "prefix", rootElement.getPrefix());
|
||||
Assert.assertEquals("Invalid namespace", "namespace", rootElement.getNamespaceURI());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
/*
|
||||
* 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.transform;
|
||||
|
||||
import javax.xml.parsers.DocumentBuilderFactory;
|
||||
import javax.xml.transform.Transformer;
|
||||
import javax.xml.transform.TransformerFactory;
|
||||
import javax.xml.transform.dom.DOMSource;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Element;
|
||||
|
||||
import static org.custommonkey.xmlunit.XMLAssert.assertXMLEqual;
|
||||
|
||||
public class StringResultTest {
|
||||
|
||||
@Test
|
||||
public void testStringResult() throws Exception {
|
||||
Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
|
||||
Element element = document.createElementNS("namespace", "prefix:localName");
|
||||
document.appendChild(element);
|
||||
Transformer transformer = TransformerFactory.newInstance().newTransformer();
|
||||
StringResult result = new StringResult();
|
||||
transformer.transform(new DOMSource(document), result);
|
||||
assertXMLEqual("Invalid result", "<prefix:localName xmlns:prefix='namespace'/>", result.toString());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
/*
|
||||
* 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.transform;
|
||||
|
||||
import javax.xml.transform.Transformer;
|
||||
import javax.xml.transform.TransformerException;
|
||||
import javax.xml.transform.TransformerFactory;
|
||||
import javax.xml.transform.dom.DOMResult;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
import org.w3c.dom.Element;
|
||||
|
||||
public class StringSourceTest {
|
||||
|
||||
@Test
|
||||
public void testStringSource() throws TransformerException {
|
||||
Transformer transformer = TransformerFactory.newInstance().newTransformer();
|
||||
String content = "<prefix:content xmlns:prefix='namespace'/>";
|
||||
DOMResult result = new DOMResult();
|
||||
transformer.transform(new StringSource(content), result);
|
||||
Element rootElement = (Element) result.getNode().getFirstChild();
|
||||
Assert.assertEquals("Invalid local name", "content", rootElement.getLocalName());
|
||||
Assert.assertEquals("Invalid prefix", "prefix", rootElement.getPrefix());
|
||||
Assert.assertEquals("Invalid namespace", "namespace", rootElement.getNamespaceURI());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
/*
|
||||
* 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.transform;
|
||||
|
||||
import java.io.IOException;
|
||||
import javax.xml.transform.Result;
|
||||
import javax.xml.transform.Source;
|
||||
import javax.xml.transform.TransformerException;
|
||||
|
||||
import com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.xml.sax.SAXException;
|
||||
|
||||
import static org.custommonkey.xmlunit.XMLAssert.assertXMLEqual;
|
||||
|
||||
public class TransformerHelperTest {
|
||||
|
||||
private TransformerHelper helper;
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
helper = new TransformerHelper();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void defaultTransformerFactory() throws TransformerException, IOException, SAXException {
|
||||
doTest();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void customTransformerFactory() throws TransformerException, IOException, SAXException {
|
||||
helper.setTransformerFactoryClass(TransformerFactoryImpl.class);
|
||||
doTest();
|
||||
}
|
||||
|
||||
private void doTest() throws TransformerException, SAXException, IOException {
|
||||
String xml = "<root xmlns='http://springframework.org/spring-ws'><child>text</child></root>";
|
||||
Source source = new StringSource(xml);
|
||||
Result result = new StringResult();
|
||||
|
||||
helper.transform(source, result);
|
||||
|
||||
assertXMLEqual(xml, result.toString());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,326 @@
|
||||
/*
|
||||
* 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.transform;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.io.Reader;
|
||||
import java.io.StringReader;
|
||||
import java.io.StringWriter;
|
||||
import java.io.Writer;
|
||||
import javax.xml.parsers.DocumentBuilder;
|
||||
import javax.xml.parsers.DocumentBuilderFactory;
|
||||
import javax.xml.stream.XMLEventReader;
|
||||
import javax.xml.stream.XMLEventWriter;
|
||||
import javax.xml.stream.XMLInputFactory;
|
||||
import javax.xml.stream.XMLOutputFactory;
|
||||
import javax.xml.stream.XMLStreamReader;
|
||||
import javax.xml.stream.XMLStreamWriter;
|
||||
import javax.xml.transform.Result;
|
||||
import javax.xml.transform.Source;
|
||||
import javax.xml.transform.dom.DOMResult;
|
||||
import javax.xml.transform.dom.DOMSource;
|
||||
import javax.xml.transform.sax.SAXResult;
|
||||
import javax.xml.transform.sax.SAXSource;
|
||||
import javax.xml.transform.stream.StreamResult;
|
||||
import javax.xml.transform.stream.StreamSource;
|
||||
|
||||
import org.springframework.util.xml.StaxUtils;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Element;
|
||||
import org.xml.sax.ContentHandler;
|
||||
import org.xml.sax.InputSource;
|
||||
import org.xml.sax.XMLReader;
|
||||
import org.xml.sax.ext.DefaultHandler2;
|
||||
import org.xml.sax.ext.LexicalHandler;
|
||||
import org.xml.sax.helpers.DefaultHandler;
|
||||
import org.xml.sax.helpers.XMLReaderFactory;
|
||||
|
||||
import static org.easymock.EasyMock.*;
|
||||
|
||||
public class TraxUtilsTest {
|
||||
|
||||
@Test
|
||||
public void testGetDocument() throws Exception {
|
||||
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
|
||||
documentBuilderFactory.setNamespaceAware(true);
|
||||
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
|
||||
Document document = documentBuilder.newDocument();
|
||||
Assert.assertSame("Invalid document", document, TraxUtils.getDocument(new DOMSource(document)));
|
||||
Element element = document.createElement("element");
|
||||
document.appendChild(element);
|
||||
Assert.assertSame("Invalid document", document, TraxUtils.getDocument(new DOMSource(element)));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDoWithDomSource() throws Exception {
|
||||
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
|
||||
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
|
||||
Document document = documentBuilder.newDocument();
|
||||
|
||||
TraxUtils.SourceCallback mock = createMock(TraxUtils.SourceCallback.class);
|
||||
mock.domSource(document);
|
||||
|
||||
replay(mock);
|
||||
|
||||
TraxUtils.doWithSource(new DOMSource(document), mock);
|
||||
|
||||
verify(mock);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDoWithDomResult() throws Exception {
|
||||
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
|
||||
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
|
||||
Document document = documentBuilder.newDocument();
|
||||
|
||||
TraxUtils.ResultCallback mock = createMock(TraxUtils.ResultCallback.class);
|
||||
mock.domResult(document);
|
||||
|
||||
replay(mock);
|
||||
|
||||
TraxUtils.doWithResult(new DOMResult(document), mock);
|
||||
|
||||
verify(mock);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDoWithSaxSource() throws Exception {
|
||||
XMLReader reader = XMLReaderFactory.createXMLReader();
|
||||
InputSource inputSource = new InputSource();
|
||||
|
||||
TraxUtils.SourceCallback mock = createMock(TraxUtils.SourceCallback.class);
|
||||
mock.saxSource(reader, inputSource);
|
||||
|
||||
replay(mock);
|
||||
|
||||
TraxUtils.doWithSource(new SAXSource(reader, inputSource), mock);
|
||||
|
||||
verify(mock);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDoWithSaxResult() throws Exception {
|
||||
ContentHandler contentHandler = new DefaultHandler();
|
||||
LexicalHandler lexicalHandler = new DefaultHandler2();
|
||||
|
||||
TraxUtils.ResultCallback mock = createMock(TraxUtils.ResultCallback.class);
|
||||
mock.saxResult(contentHandler, lexicalHandler);
|
||||
|
||||
replay(mock);
|
||||
|
||||
SAXResult result = new SAXResult(contentHandler);
|
||||
result.setLexicalHandler(lexicalHandler);
|
||||
TraxUtils.doWithResult(result, mock);
|
||||
|
||||
verify(mock);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDoWithStaxSourceEventReader() throws Exception {
|
||||
XMLInputFactory inputFactory = XMLInputFactory.newInstance();
|
||||
XMLEventReader eventReader = inputFactory.createXMLEventReader(new StringReader("<element/>"));
|
||||
|
||||
TraxUtils.SourceCallback mock = createMock(TraxUtils.SourceCallback.class);
|
||||
mock.staxSource(eventReader);
|
||||
|
||||
replay(mock);
|
||||
|
||||
TraxUtils.doWithSource(StaxUtils.createStaxSource(eventReader), mock);
|
||||
|
||||
verify(mock);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDoWithStaxResultEventWriter() throws Exception {
|
||||
XMLOutputFactory outputFactory = XMLOutputFactory.newInstance();
|
||||
XMLEventWriter eventWriter = outputFactory.createXMLEventWriter(new StringWriter());
|
||||
|
||||
TraxUtils.ResultCallback mock = createMock(TraxUtils.ResultCallback.class);
|
||||
mock.staxResult(eventWriter);
|
||||
|
||||
replay(mock);
|
||||
|
||||
TraxUtils.doWithResult(StaxUtils.createStaxResult(eventWriter), mock);
|
||||
|
||||
verify(mock);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDoWithStaxSourceStreamReader() throws Exception {
|
||||
XMLInputFactory inputFactory = XMLInputFactory.newInstance();
|
||||
XMLStreamReader streamReader = inputFactory.createXMLStreamReader(new StringReader("<element/>"));
|
||||
|
||||
TraxUtils.SourceCallback mock = createMock(TraxUtils.SourceCallback.class);
|
||||
mock.staxSource(streamReader);
|
||||
|
||||
replay(mock);
|
||||
|
||||
TraxUtils.doWithSource(StaxUtils.createStaxSource(streamReader), mock);
|
||||
|
||||
verify(mock);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDoWithStaxResultStreamWriter() throws Exception {
|
||||
XMLOutputFactory outputFactory = XMLOutputFactory.newInstance();
|
||||
XMLStreamWriter streamWriter = outputFactory.createXMLStreamWriter(new StringWriter());
|
||||
|
||||
TraxUtils.ResultCallback mock = createMock(TraxUtils.ResultCallback.class);
|
||||
mock.staxResult(streamWriter);
|
||||
|
||||
replay(mock);
|
||||
|
||||
TraxUtils.doWithResult(StaxUtils.createStaxResult(streamWriter), mock);
|
||||
|
||||
verify(mock);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDoWithStreamSourceInputStream() throws Exception {
|
||||
byte[] xml = "<element/>".getBytes("UTF-8");
|
||||
InputStream inputStream = new ByteArrayInputStream(xml);
|
||||
|
||||
TraxUtils.SourceCallback mock = createMock(TraxUtils.SourceCallback.class);
|
||||
mock.streamSource(inputStream);
|
||||
|
||||
replay(mock);
|
||||
|
||||
TraxUtils.doWithSource(new StreamSource(inputStream), mock);
|
||||
|
||||
verify(mock);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDoWithStreamResultOutputStream() throws Exception {
|
||||
OutputStream outputStream = new ByteArrayOutputStream();
|
||||
|
||||
TraxUtils.ResultCallback mock = createMock(TraxUtils.ResultCallback.class);
|
||||
mock.streamResult(outputStream);
|
||||
|
||||
replay(mock);
|
||||
|
||||
TraxUtils.doWithResult(new StreamResult(outputStream), mock);
|
||||
|
||||
verify(mock);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDoWithStreamSourceReader() throws Exception {
|
||||
String xml = "<element/>";
|
||||
Reader reader = new StringReader(xml);
|
||||
|
||||
TraxUtils.SourceCallback mock = createMock(TraxUtils.SourceCallback.class);
|
||||
mock.streamSource(reader);
|
||||
|
||||
replay(mock);
|
||||
|
||||
TraxUtils.doWithSource(new StreamSource(reader), mock);
|
||||
|
||||
verify(mock);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDoWithStreamResultWriter() throws Exception {
|
||||
Writer writer = new StringWriter();
|
||||
|
||||
TraxUtils.ResultCallback mock = createMock(TraxUtils.ResultCallback.class);
|
||||
mock.streamResult(writer);
|
||||
|
||||
replay(mock);
|
||||
|
||||
TraxUtils.doWithResult(new StreamResult(writer), mock);
|
||||
|
||||
verify(mock);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDoWithSystemIdSource() throws Exception {
|
||||
String systemId = "http://www.springframework.org/dtd/spring-beans.dtd";
|
||||
|
||||
TraxUtils.SourceCallback mock = createMock(TraxUtils.SourceCallback.class);
|
||||
mock.source(systemId);
|
||||
|
||||
replay(mock);
|
||||
|
||||
TraxUtils.doWithSource(new StreamSource(systemId), mock);
|
||||
|
||||
verify(mock);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDoWithSystemIdResult() throws Exception {
|
||||
String systemId = "http://www.springframework.org/dtd/spring-beans.dtd";
|
||||
|
||||
TraxUtils.ResultCallback mock = createMock(TraxUtils.ResultCallback.class);
|
||||
mock.result(systemId);
|
||||
|
||||
replay(mock);
|
||||
|
||||
TraxUtils.doWithResult(new StreamResult(systemId), mock);
|
||||
|
||||
verify(mock);
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testDoWithInvalidSource() throws Exception {
|
||||
Source source = new Source() {
|
||||
|
||||
public void setSystemId(String systemId) {
|
||||
}
|
||||
|
||||
public String getSystemId() {
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
try {
|
||||
TraxUtils.doWithSource(source, null);
|
||||
Assert.fail("IllegalArgumentException expected");
|
||||
}
|
||||
catch (IllegalArgumentException ex) {
|
||||
// expected
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDoWithInvalidResult() throws Exception {
|
||||
Result result = new Result() {
|
||||
|
||||
public void setSystemId(String systemId) {
|
||||
}
|
||||
|
||||
public String getSystemId() {
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
try {
|
||||
TraxUtils.doWithResult(result, null);
|
||||
Assert.fail("IllegalArgumentException expected");
|
||||
}
|
||||
catch (IllegalArgumentException ex) {
|
||||
// expected
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,160 @@
|
||||
/*
|
||||
* Copyright 2005-2011 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.validation;
|
||||
|
||||
import java.io.InputStream;
|
||||
import javax.xml.parsers.DocumentBuilderFactory;
|
||||
import javax.xml.transform.Source;
|
||||
import javax.xml.transform.dom.DOMSource;
|
||||
import javax.xml.transform.sax.SAXSource;
|
||||
import javax.xml.transform.stream.StreamSource;
|
||||
|
||||
import org.springframework.core.io.ClassPathResource;
|
||||
import org.springframework.core.io.Resource;
|
||||
import org.springframework.xml.transform.ResourceSource;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.w3c.dom.Document;
|
||||
import org.xml.sax.InputSource;
|
||||
import org.xml.sax.SAXException;
|
||||
import org.xml.sax.SAXParseException;
|
||||
|
||||
public abstract class AbstractValidatorFactoryTestCase {
|
||||
|
||||
private XmlValidator validator;
|
||||
|
||||
private InputStream validInputStream;
|
||||
|
||||
private InputStream invalidInputStream;
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
Resource[] schemaResource =
|
||||
new Resource[]{new ClassPathResource("schema.xsd", AbstractValidatorFactoryTestCase.class)};
|
||||
validator = createValidator(schemaResource, XmlValidatorFactory.SCHEMA_W3C_XML);
|
||||
validInputStream = AbstractValidatorFactoryTestCase.class.getResourceAsStream("validDocument.xml");
|
||||
invalidInputStream = AbstractValidatorFactoryTestCase.class.getResourceAsStream("invalidDocument.xml");
|
||||
}
|
||||
|
||||
@After
|
||||
public void tearDown() throws Exception {
|
||||
validInputStream.close();
|
||||
invalidInputStream.close();
|
||||
}
|
||||
|
||||
protected abstract XmlValidator createValidator(Resource[] schemaResources, String schemaLanguage) throws Exception;
|
||||
|
||||
@Test
|
||||
public void testHandleValidMessageStream() throws Exception {
|
||||
SAXParseException[] errors = validator.validate(new StreamSource(validInputStream));
|
||||
Assert.assertNotNull("Null returned for errors", errors);
|
||||
Assert.assertEquals("ValidationErrors returned", 0, errors.length);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testValidateTwice() throws Exception {
|
||||
validator.validate(new StreamSource(validInputStream));
|
||||
validInputStream = AbstractValidatorFactoryTestCase.class.getResourceAsStream("validDocument.xml");
|
||||
validator.validate(new StreamSource(validInputStream));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testHandleInvalidMessageStream() throws Exception {
|
||||
SAXParseException[] errors = validator.validate(new StreamSource(invalidInputStream));
|
||||
Assert.assertNotNull("Null returned for errors", errors);
|
||||
Assert.assertEquals("ValidationErrors returned", 3, errors.length);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testHandleValidMessageSax() throws Exception {
|
||||
SAXParseException[] errors = validator.validate(new SAXSource(new InputSource(validInputStream)));
|
||||
Assert.assertNotNull("Null returned for errors", errors);
|
||||
Assert.assertEquals("ValidationErrors returned", 0, errors.length);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testHandleInvalidMessageSax() throws Exception {
|
||||
SAXParseException[] errors = validator.validate(new SAXSource(new InputSource(invalidInputStream)));
|
||||
Assert.assertNotNull("Null returned for errors", errors);
|
||||
Assert.assertEquals("ValidationErrors returned", 3, errors.length);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testHandleValidMessageDom() throws Exception {
|
||||
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
|
||||
documentBuilderFactory.setNamespaceAware(true);
|
||||
Document document = documentBuilderFactory.newDocumentBuilder()
|
||||
.parse(new InputSource(validInputStream));
|
||||
SAXParseException[] errors = validator.validate(new DOMSource(document));
|
||||
Assert.assertNotNull("Null returned for errors", errors);
|
||||
Assert.assertEquals("ValidationErrors returned", 0, errors.length);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testHandleInvalidMessageDom() throws Exception {
|
||||
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
|
||||
documentBuilderFactory.setNamespaceAware(true);
|
||||
Document document = documentBuilderFactory.newDocumentBuilder()
|
||||
.parse(new InputSource(invalidInputStream));
|
||||
SAXParseException[] errors = validator.validate(new DOMSource(document));
|
||||
Assert.assertNotNull("Null returned for errors", errors);
|
||||
Assert.assertEquals("ValidationErrors returned", 3, errors.length);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMultipleSchemasValidMessage() throws Exception {
|
||||
Resource[] schemaResources = new Resource[]{
|
||||
new ClassPathResource("multipleSchemas1.xsd", AbstractValidatorFactoryTestCase.class),
|
||||
new ClassPathResource("multipleSchemas2.xsd", AbstractValidatorFactoryTestCase.class)};
|
||||
validator = createValidator(schemaResources, XmlValidatorFactory.SCHEMA_W3C_XML);
|
||||
|
||||
Source document = new ResourceSource(
|
||||
new ClassPathResource("multipleSchemas1.xml", AbstractValidatorFactoryTestCase.class));
|
||||
SAXParseException[] errors = validator.validate(document);
|
||||
Assert.assertEquals("ValidationErrors returned", 0, errors.length);
|
||||
validator = createValidator(schemaResources, XmlValidatorFactory.SCHEMA_W3C_XML);
|
||||
document = new ResourceSource(
|
||||
new ClassPathResource("multipleSchemas2.xml", AbstractValidatorFactoryTestCase.class));
|
||||
errors = validator.validate(document);
|
||||
Assert.assertEquals("ValidationErrors returned", 0, errors.length);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void customErrorHandler() throws Exception {
|
||||
ValidationErrorHandler myHandler = new ValidationErrorHandler() {
|
||||
public SAXParseException[] getErrors() {
|
||||
return new SAXParseException[0];
|
||||
}
|
||||
|
||||
public void warning(SAXParseException exception) throws SAXException {
|
||||
}
|
||||
|
||||
public void error(SAXParseException exception) throws SAXException {
|
||||
}
|
||||
|
||||
public void fatalError(SAXParseException exception) throws SAXException {
|
||||
}
|
||||
};
|
||||
SAXParseException[] errors = validator.validate(new StreamSource(invalidInputStream), myHandler);
|
||||
Assert.assertNotNull("Null returned for errors", errors);
|
||||
Assert.assertEquals("ValidationErrors returned", 0, errors.length);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
/*
|
||||
* 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.validation;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import org.springframework.core.io.Resource;
|
||||
|
||||
public class Jaxp13ValidatorFactoryTest extends AbstractValidatorFactoryTestCase {
|
||||
|
||||
@Override
|
||||
protected XmlValidator createValidator(Resource[] schemaResources, String schemaLanguage) throws IOException {
|
||||
return Jaxp13ValidatorFactory.createValidator(schemaResources, schemaLanguage);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
/*
|
||||
* 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.validation;
|
||||
|
||||
import javax.xml.XMLConstants;
|
||||
import javax.xml.validation.Schema;
|
||||
|
||||
import org.springframework.core.io.ClassPathResource;
|
||||
import org.springframework.core.io.Resource;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
public class SchemaLoaderUtilsTest {
|
||||
|
||||
@Test
|
||||
public void testLoadSchema() throws Exception {
|
||||
Resource resource = new ClassPathResource("schema.xsd", getClass());
|
||||
Schema schema = SchemaLoaderUtils.loadSchema(resource, XMLConstants.W3C_XML_SCHEMA_NS_URI);
|
||||
Assert.assertNotNull("No schema returned", schema);
|
||||
Assert.assertFalse("Resource not closed", resource.isOpen());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLoadNonExistantSchema() throws Exception {
|
||||
try {
|
||||
Resource nonExistant = new ClassPathResource("bla");
|
||||
SchemaLoaderUtils.loadSchema(nonExistant, XMLConstants.W3C_XML_SCHEMA_NS_URI);
|
||||
Assert.fail("Should have thrown an IllegalArgumentException");
|
||||
}
|
||||
catch (IllegalArgumentException e) {
|
||||
// expected
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLoadNullSchema() throws Exception {
|
||||
try {
|
||||
SchemaLoaderUtils.loadSchema((Resource) null, XMLConstants.W3C_XML_SCHEMA_NS_URI);
|
||||
Assert.fail("Should have thrown an IllegalArgumentException");
|
||||
}
|
||||
catch (IllegalArgumentException e) {
|
||||
// expected
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLoadMultipleSchemas() throws Exception {
|
||||
Resource envelope = new ClassPathResource("envelope.xsd", getClass());
|
||||
Resource encoding = new ClassPathResource("encoding.xsd", getClass());
|
||||
Schema schema =
|
||||
SchemaLoaderUtils.loadSchema(new Resource[]{envelope, encoding}, XMLConstants.W3C_XML_SCHEMA_NS_URI);
|
||||
Assert.assertNotNull("No schema returned", schema);
|
||||
Assert.assertFalse("Resource not closed", envelope.isOpen());
|
||||
Assert.assertFalse("Resource not closed", encoding.isOpen());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,115 @@
|
||||
/*
|
||||
* 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.validation;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.net.URI;
|
||||
import java.net.URL;
|
||||
|
||||
import org.springframework.core.io.AbstractResource;
|
||||
import org.springframework.core.io.ClassPathResource;
|
||||
import org.springframework.core.io.Resource;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
public class XmlValidatorFactoryTest {
|
||||
|
||||
@Test
|
||||
public void testCreateValidator() throws Exception {
|
||||
Resource resource = new ClassPathResource("schema.xsd", AbstractValidatorFactoryTestCase.class);
|
||||
XmlValidator validator = XmlValidatorFactory.createValidator(resource, XmlValidatorFactory.SCHEMA_W3C_XML);
|
||||
Assert.assertNotNull("No validator returned", validator);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNonExistentResource() throws Exception {
|
||||
Resource resource = new NonExistentResource();
|
||||
try {
|
||||
XmlValidatorFactory.createValidator(resource, XmlValidatorFactory.SCHEMA_W3C_XML);
|
||||
Assert.fail("IllegalArgumentException expected");
|
||||
}
|
||||
catch (IllegalArgumentException ex) {
|
||||
// expected
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testInvalidSchemaLanguage() throws Exception {
|
||||
Resource resource = new ClassPathResource("schema.xsd", AbstractValidatorFactoryTestCase.class);
|
||||
try {
|
||||
XmlValidatorFactory.createValidator(resource, "bla");
|
||||
Assert.fail("IllegalArgumentException expected");
|
||||
}
|
||||
catch (IllegalArgumentException ex) {
|
||||
// expected
|
||||
}
|
||||
}
|
||||
|
||||
private static class NonExistentResource extends AbstractResource {
|
||||
|
||||
@Override
|
||||
public Resource createRelative(String relativePath) throws IOException {
|
||||
throw new IOException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean exists() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public File getFile() throws IOException {
|
||||
throw new IOException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getFilename() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public URL getURL() throws IOException {
|
||||
throw new IOException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public URI getURI() throws IOException {
|
||||
throw new IOException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isOpen() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public InputStream getInputStream() throws IOException {
|
||||
throw new IOException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isReadable() {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,242 @@
|
||||
/*
|
||||
* 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.xpath;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import javax.xml.parsers.DocumentBuilder;
|
||||
import javax.xml.parsers.DocumentBuilderFactory;
|
||||
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.w3c.dom.DOMException;
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Node;
|
||||
import org.xml.sax.SAXException;
|
||||
|
||||
public abstract class AbstractXPathExpressionFactoryTestCase {
|
||||
|
||||
private Document noNamespacesDocument;
|
||||
|
||||
private Document namespacesDocument;
|
||||
|
||||
private Map<String, String> namespaces = new HashMap<String, String>();
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
namespaces.put("prefix1", "namespace1");
|
||||
namespaces.put("prefix2", "namespace2");
|
||||
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
|
||||
documentBuilderFactory.setNamespaceAware(true);
|
||||
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
|
||||
InputStream inputStream = getClass().getResourceAsStream("nonamespaces.xml");
|
||||
try {
|
||||
noNamespacesDocument = documentBuilder.parse(inputStream);
|
||||
}
|
||||
finally {
|
||||
inputStream.close();
|
||||
}
|
||||
inputStream = getClass().getResourceAsStream("namespaces.xml");
|
||||
try {
|
||||
namespacesDocument = documentBuilder.parse(inputStream);
|
||||
}
|
||||
finally {
|
||||
inputStream.close();
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEvaluateAsBooleanInvalidNamespaces() throws IOException, SAXException {
|
||||
XPathExpression expression = createXPathExpression("/prefix1:root/prefix2:otherchild", namespaces);
|
||||
boolean result = expression.evaluateAsBoolean(namespacesDocument);
|
||||
Assert.assertFalse("Invalid result [" + result + "]", result);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEvaluateAsBooleanInvalidNoNamespaces() throws IOException, SAXException {
|
||||
XPathExpression expression = createXPathExpression("/root/otherchild");
|
||||
boolean result = expression.evaluateAsBoolean(noNamespacesDocument);
|
||||
Assert.assertFalse("Invalid result [" + result + "]", result);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEvaluateAsBooleanNamespaces() throws IOException, SAXException {
|
||||
XPathExpression expression =
|
||||
createXPathExpression("/prefix1:root/prefix2:child/prefix2:boolean/text()", namespaces);
|
||||
boolean result = expression.evaluateAsBoolean(namespacesDocument);
|
||||
Assert.assertTrue("Invalid result", result);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEvaluateAsBooleanNoNamespaces() throws IOException, SAXException {
|
||||
XPathExpression expression = createXPathExpression("/root/child/boolean/text()");
|
||||
boolean result = expression.evaluateAsBoolean(noNamespacesDocument);
|
||||
Assert.assertTrue("Invalid result", result);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEvaluateAsDoubleInvalidNamespaces() throws IOException, SAXException {
|
||||
XPathExpression expression = createXPathExpression("/prefix1:root/prefix2:otherchild", namespaces);
|
||||
double result = expression.evaluateAsNumber(noNamespacesDocument);
|
||||
Assert.assertTrue("Invalid result [" + result + "]", Double.isNaN(result));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEvaluateAsDoubleInvalidNoNamespaces() throws IOException, SAXException {
|
||||
XPathExpression expression = createXPathExpression("/root/otherchild");
|
||||
double result = expression.evaluateAsNumber(noNamespacesDocument);
|
||||
Assert.assertTrue("Invalid result [" + result + "]", Double.isNaN(result));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEvaluateAsDoubleNamespaces() throws IOException, SAXException {
|
||||
XPathExpression expression =
|
||||
createXPathExpression("/prefix1:root/prefix2:child/prefix2:number/text()", namespaces);
|
||||
double result = expression.evaluateAsNumber(namespacesDocument);
|
||||
Assert.assertEquals("Invalid result", 42D, result, 0D);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEvaluateAsDoubleNoNamespaces() throws IOException, SAXException {
|
||||
XPathExpression expression = createXPathExpression("/root/child/number/text()");
|
||||
double result = expression.evaluateAsNumber(noNamespacesDocument);
|
||||
Assert.assertEquals("Invalid result", 42D, result, 0D);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEvaluateAsNodeInvalidNamespaces() throws IOException, SAXException {
|
||||
XPathExpression expression = createXPathExpression("/prefix1:root/prefix2:otherchild", namespaces);
|
||||
Node result = expression.evaluateAsNode(namespacesDocument);
|
||||
Assert.assertNull("Invalid result [" + result + "]", result);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEvaluateAsNodeInvalidNoNamespaces() throws IOException, SAXException {
|
||||
XPathExpression expression = createXPathExpression("/root/otherchild");
|
||||
Node result = expression.evaluateAsNode(noNamespacesDocument);
|
||||
Assert.assertNull("Invalid result [" + result + "]", result);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEvaluateAsNodeNamespaces() throws IOException, SAXException {
|
||||
XPathExpression expression = createXPathExpression("/prefix1:root/prefix2:child", namespaces);
|
||||
Node result = expression.evaluateAsNode(namespacesDocument);
|
||||
Assert.assertNotNull("Invalid result", result);
|
||||
Assert.assertEquals("Invalid localname", "child", result.getLocalName());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEvaluateAsNodeNoNamespaces() throws IOException, SAXException {
|
||||
XPathExpression expression = createXPathExpression("/root/child");
|
||||
Node result = expression.evaluateAsNode(noNamespacesDocument);
|
||||
Assert.assertNotNull("Invalid result", result);
|
||||
Assert.assertEquals("Invalid localname", "child", result.getLocalName());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEvaluateAsNodeListNamespaces() throws IOException, SAXException {
|
||||
XPathExpression expression = createXPathExpression("/prefix1:root/prefix2:child/*", namespaces);
|
||||
List<Node> results = expression.evaluateAsNodeList(namespacesDocument);
|
||||
Assert.assertNotNull("Invalid result", results);
|
||||
Assert.assertEquals("Invalid amount of results", 3, results.size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEvaluateAsNodeListNoNamespaces() throws IOException, SAXException {
|
||||
XPathExpression expression = createXPathExpression("/root/child/*");
|
||||
List<Node> results = expression.evaluateAsNodeList(noNamespacesDocument);
|
||||
Assert.assertNotNull("Invalid result", results);
|
||||
Assert.assertEquals("Invalid amount of results", 3, results.size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEvaluateAsStringInvalidNamespaces() throws IOException, SAXException {
|
||||
XPathExpression expression = createXPathExpression("/prefix1:root/prefix2:otherchild", namespaces);
|
||||
String result = expression.evaluateAsString(namespacesDocument);
|
||||
Assert.assertFalse("Invalid result [" + result + "]", StringUtils.hasText(result));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEvaluateAsStringInvalidNoNamespaces() throws IOException, SAXException {
|
||||
XPathExpression expression = createXPathExpression("/root/otherchild");
|
||||
String result = expression.evaluateAsString(noNamespacesDocument);
|
||||
Assert.assertFalse("Invalid result [" + result + "]", StringUtils.hasText(result));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEvaluateAsStringNamespaces() throws IOException, SAXException {
|
||||
XPathExpression expression =
|
||||
createXPathExpression("/prefix1:root/prefix2:child/prefix2:text/text()", namespaces);
|
||||
String result = expression.evaluateAsString(namespacesDocument);
|
||||
Assert.assertEquals("Invalid result", "text", result);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEvaluateAsStringNoNamespaces() throws IOException, SAXException {
|
||||
XPathExpression expression = createXPathExpression("/root/child/text/text()");
|
||||
String result = expression.evaluateAsString(noNamespacesDocument);
|
||||
Assert.assertEquals("Invalid result", "text", result);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEvaluateAsObject() throws Exception {
|
||||
XPathExpression expression = createXPathExpression("/root/child");
|
||||
String result = expression.evaluateAsObject(noNamespacesDocument, new NodeMapper<String>() {
|
||||
public String mapNode(Node node, int nodeNum) throws DOMException {
|
||||
return node.getLocalName();
|
||||
}
|
||||
});
|
||||
Assert.assertNotNull("Invalid result", result);
|
||||
Assert.assertEquals("Invalid localname", "child", result);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEvaluate() throws Exception {
|
||||
XPathExpression expression = createXPathExpression("/root/child/*");
|
||||
List<String> results = expression.evaluate(noNamespacesDocument, new NodeMapper<String>() {
|
||||
public String mapNode(Node node, int nodeNum) throws DOMException {
|
||||
return node.getLocalName();
|
||||
}
|
||||
});
|
||||
Assert.assertNotNull("Invalid result", results);
|
||||
Assert.assertEquals("Invalid amount of results", 3, results.size());
|
||||
Assert.assertEquals("Invalid first result", "text", results.get(0));
|
||||
Assert.assertEquals("Invalid first result", "number", results.get(1));
|
||||
Assert.assertEquals("Invalid first result", "boolean", results.get(2));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testInvalidExpression() {
|
||||
try {
|
||||
createXPathExpression("\\");
|
||||
Assert.fail("No XPathParseException thrown");
|
||||
}
|
||||
catch (XPathParseException ex) {
|
||||
// Expected behaviour
|
||||
}
|
||||
}
|
||||
|
||||
protected abstract XPathExpression createXPathExpression(String expression);
|
||||
|
||||
protected abstract XPathExpression createXPathExpression(String expression, Map<String, String> namespaces);
|
||||
}
|
||||
@@ -0,0 +1,208 @@
|
||||
/*
|
||||
* 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.xpath;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.net.URL;
|
||||
import java.util.List;
|
||||
import javax.xml.parsers.DocumentBuilder;
|
||||
import javax.xml.parsers.DocumentBuilderFactory;
|
||||
import javax.xml.parsers.ParserConfigurationException;
|
||||
import javax.xml.stream.XMLInputFactory;
|
||||
import javax.xml.stream.XMLStreamReader;
|
||||
import javax.xml.transform.Source;
|
||||
import javax.xml.transform.dom.DOMSource;
|
||||
import javax.xml.transform.sax.SAXSource;
|
||||
import javax.xml.transform.stax.StAXSource;
|
||||
import javax.xml.transform.stream.StreamSource;
|
||||
|
||||
import org.springframework.core.io.ClassPathResource;
|
||||
import org.springframework.xml.sax.SaxUtils;
|
||||
import org.springframework.xml.transform.ResourceSource;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.w3c.dom.DOMException;
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Node;
|
||||
import org.xml.sax.InputSource;
|
||||
import org.xml.sax.SAXException;
|
||||
|
||||
public abstract class AbstractXPathTemplateTestCase {
|
||||
|
||||
XPathOperations template;
|
||||
|
||||
private Source namespaces;
|
||||
|
||||
private Source nonamespaces;
|
||||
|
||||
@Before
|
||||
public final void setUp() throws Exception {
|
||||
template = createTemplate();
|
||||
namespaces = new ResourceSource(new ClassPathResource("namespaces.xml", AbstractXPathTemplateTestCase.class));
|
||||
nonamespaces =
|
||||
new ResourceSource(new ClassPathResource("nonamespaces.xml", AbstractXPathTemplateTestCase.class));
|
||||
}
|
||||
|
||||
protected abstract XPathOperations createTemplate() throws Exception;
|
||||
|
||||
@Test
|
||||
public void testEvaluateAsBoolean() {
|
||||
boolean result = template.evaluateAsBoolean("/root/child/boolean", nonamespaces);
|
||||
Assert.assertTrue("Invalid result", result);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEvaluateAsBooleanNamespaces() {
|
||||
boolean result = template.evaluateAsBoolean("/prefix1:root/prefix2:child/prefix2:boolean", namespaces);
|
||||
Assert.assertTrue("Invalid result", result);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEvaluateAsDouble() {
|
||||
double result = template.evaluateAsDouble("/root/child/number", nonamespaces);
|
||||
Assert.assertEquals("Invalid result", 42D, result, 0D);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEvaluateAsDoubleNamespaces() {
|
||||
double result = template.evaluateAsDouble("/prefix1:root/prefix2:child/prefix2:number", namespaces);
|
||||
Assert.assertEquals("Invalid result", 42D, result, 0D);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEvaluateAsNode() {
|
||||
Node result = template.evaluateAsNode("/root/child", nonamespaces);
|
||||
Assert.assertNotNull("Invalid result", result);
|
||||
Assert.assertEquals("Invalid localname", "child", result.getLocalName());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEvaluateAsNodeNamespaces() {
|
||||
Node result = template.evaluateAsNode("/prefix1:root/prefix2:child", namespaces);
|
||||
Assert.assertNotNull("Invalid result", result);
|
||||
Assert.assertEquals("Invalid localname", "child", result.getLocalName());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEvaluateAsNodes() {
|
||||
List<Node> results = template.evaluateAsNodeList("/root/child/*", nonamespaces);
|
||||
Assert.assertNotNull("Invalid result", results);
|
||||
Assert.assertEquals("Invalid amount of results", 3, results.size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEvaluateAsNodesNamespaces() {
|
||||
List<Node> results = template.evaluateAsNodeList("/prefix1:root/prefix2:child/*", namespaces);
|
||||
Assert.assertNotNull("Invalid result", results);
|
||||
Assert.assertEquals("Invalid amount of results", 3, results.size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEvaluateAsStringNamespaces() throws IOException, SAXException {
|
||||
String result = template.evaluateAsString("/prefix1:root/prefix2:child/prefix2:text", namespaces);
|
||||
Assert.assertEquals("Invalid result", "text", result);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEvaluateAsString() throws IOException, SAXException {
|
||||
String result = template.evaluateAsString("/root/child/text", nonamespaces);
|
||||
Assert.assertEquals("Invalid result", "text", result);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEvaluateDomSource() throws IOException, SAXException, ParserConfigurationException {
|
||||
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
|
||||
documentBuilderFactory.setNamespaceAware(true);
|
||||
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
|
||||
Document document = documentBuilder.parse(SaxUtils.createInputSource(
|
||||
new ClassPathResource("nonamespaces.xml", AbstractXPathTemplateTestCase.class)));
|
||||
|
||||
String result = template.evaluateAsString("/root/child/text", new DOMSource(document));
|
||||
Assert.assertEquals("Invalid result", "text", result);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEvaluateSAXSource() throws Exception {
|
||||
InputStream in = AbstractXPathTemplateTestCase.class.getResourceAsStream("nonamespaces.xml");
|
||||
SAXSource source = new SAXSource(new InputSource(in));
|
||||
String result = template.evaluateAsString("/root/child/text", source);
|
||||
Assert.assertEquals("Invalid result", "text", result);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEvaluateStaxSource() throws Exception {
|
||||
InputStream in = AbstractXPathTemplateTestCase.class.getResourceAsStream("nonamespaces.xml");
|
||||
XMLStreamReader streamReader = XMLInputFactory.newFactory().createXMLStreamReader(in);
|
||||
StAXSource source = new StAXSource(streamReader);
|
||||
String result = template.evaluateAsString("/root/child/text", source);
|
||||
Assert.assertEquals("Invalid result", "text", result);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEvaluateStreamSourceInputStream() throws IOException, SAXException, ParserConfigurationException {
|
||||
InputStream in = AbstractXPathTemplateTestCase.class.getResourceAsStream("nonamespaces.xml");
|
||||
StreamSource source = new StreamSource(in);
|
||||
String result = template.evaluateAsString("/root/child/text", source);
|
||||
Assert.assertEquals("Invalid result", "text", result);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEvaluateStreamSourceSystemId() throws IOException, SAXException, ParserConfigurationException {
|
||||
URL url = AbstractXPathTemplateTestCase.class.getResource("nonamespaces.xml");
|
||||
String result = template.evaluateAsString("/root/child/text", new StreamSource(url.toString()));
|
||||
Assert.assertEquals("Invalid result", "text", result);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testInvalidExpression() {
|
||||
try {
|
||||
template.evaluateAsBoolean("\\", namespaces);
|
||||
Assert.fail("No XPathException thrown");
|
||||
}
|
||||
catch (XPathException ex) {
|
||||
// Expected behaviour
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEvaluateAsObject() throws Exception {
|
||||
String result = template.evaluateAsObject("/root/child", nonamespaces, new NodeMapper<String>() {
|
||||
public String mapNode(Node node, int nodeNum) throws DOMException {
|
||||
return node.getLocalName();
|
||||
}
|
||||
});
|
||||
Assert.assertNotNull("Invalid result", result);
|
||||
Assert.assertEquals("Invalid localname", "child", result);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEvaluate() throws Exception {
|
||||
List<String> results = template.evaluate("/root/child/*", nonamespaces, new NodeMapper<String>() {
|
||||
public String mapNode(Node node, int nodeNum) throws DOMException {
|
||||
return node.getLocalName();
|
||||
}
|
||||
});
|
||||
Assert.assertNotNull("Invalid result", results);
|
||||
Assert.assertEquals("Invalid amount of results", 3, results.size());
|
||||
Assert.assertEquals("Invalid first result", "text", results.get(0));
|
||||
Assert.assertEquals("Invalid first result", "number", results.get(1));
|
||||
Assert.assertEquals("Invalid first result", "boolean", results.get(2));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
/*
|
||||
* 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.xpath;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Map;
|
||||
|
||||
import org.xml.sax.SAXException;
|
||||
|
||||
public class JaxenXPathExpressionFactoryTest extends AbstractXPathExpressionFactoryTestCase {
|
||||
|
||||
@Override
|
||||
protected XPathExpression createXPathExpression(String expression) {
|
||||
return JaxenXPathExpressionFactory.createXPathExpression(expression);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected XPathExpression createXPathExpression(String expression, Map<String, String> namespaces) {
|
||||
return JaxenXPathExpressionFactory.createXPathExpression(expression, namespaces);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void testEvaluateAsDoubleNoNamespaces() throws IOException, SAXException {
|
||||
// Currently not working on Jaxen 1.1 beta 8, hence the override here
|
||||
}
|
||||
|
||||
@Override
|
||||
public void testEvaluateAsDoubleNamespaces() throws IOException, SAXException {
|
||||
// Currently not working on Jaxen 1.1 beta 8, hence the override here
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
/*
|
||||
* 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.xpath;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class JaxenXPathTemplateTest extends AbstractXPathTemplateTestCase {
|
||||
|
||||
@Override
|
||||
protected XPathOperations createTemplate() throws Exception {
|
||||
JaxenXPathTemplate template = new JaxenXPathTemplate();
|
||||
Map<String, String> namespaces = new HashMap<String, String>();
|
||||
namespaces.put("prefix1", "namespace1");
|
||||
namespaces.put("prefix2", "namespace2");
|
||||
template.setNamespaces(namespaces);
|
||||
return template;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
/*
|
||||
* 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.xpath;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public class Jaxp13XPathExpressionFactoryTest extends AbstractXPathExpressionFactoryTestCase {
|
||||
|
||||
@Override
|
||||
protected XPathExpression createXPathExpression(String expression) {
|
||||
return Jaxp13XPathExpressionFactory.createXPathExpression(expression);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected XPathExpression createXPathExpression(String expression, Map<String, String> namespaces) {
|
||||
return Jaxp13XPathExpressionFactory.createXPathExpression(expression, namespaces);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
/*
|
||||
* 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.xpath;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class Jaxp13XPathTemplateTest extends AbstractXPathTemplateTestCase {
|
||||
|
||||
@Override
|
||||
protected XPathOperations createTemplate() throws Exception {
|
||||
Jaxp13XPathTemplate template = new Jaxp13XPathTemplate();
|
||||
Map<String, String> namespaces = new HashMap<String, String>();
|
||||
namespaces.put("prefix1", "namespace1");
|
||||
namespaces.put("prefix2", "namespace2");
|
||||
template.setNamespaces(namespaces);
|
||||
return template;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
/*
|
||||
* 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.xpath;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
public class XPathExpressionFactoryBeanTest {
|
||||
|
||||
private XPathExpressionFactoryBean factoryBean;
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
factoryBean = new XPathExpressionFactoryBean();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFactoryBean() throws Exception {
|
||||
factoryBean.setExpression("/root");
|
||||
factoryBean.afterPropertiesSet();
|
||||
Object result = factoryBean.getObject();
|
||||
Assert.assertNotNull("No result obtained", result);
|
||||
Assert.assertTrue("No XPathExpression returned", result instanceof XPathExpression);
|
||||
Assert.assertTrue("Not a singleton", factoryBean.isSingleton());
|
||||
Assert.assertEquals("Not a XPathExpresison", XPathExpression.class, factoryBean.getObjectType());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
/*
|
||||
* 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.xpath;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
public class XPathExpressionFactoryTest {
|
||||
|
||||
@Test
|
||||
public void testCreateXPathExpression() throws Exception {
|
||||
XPathExpression expression = XPathExpressionFactory.createXPathExpression("/root");
|
||||
Assert.assertNotNull("No expression returned", expression);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCreateEmptyXPathExpression() throws Exception {
|
||||
try {
|
||||
XPathExpressionFactory.createXPathExpression("");
|
||||
Assert.fail("Should have thrown an Exception");
|
||||
}
|
||||
catch (IllegalArgumentException ex) {
|
||||
// expected
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,119 @@
|
||||
/*
|
||||
* 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.xsd;
|
||||
|
||||
import javax.xml.parsers.DocumentBuilder;
|
||||
import javax.xml.parsers.DocumentBuilderFactory;
|
||||
import javax.xml.transform.Transformer;
|
||||
import javax.xml.transform.TransformerFactory;
|
||||
import javax.xml.transform.dom.DOMResult;
|
||||
|
||||
import org.springframework.core.io.ClassPathResource;
|
||||
import org.springframework.core.io.Resource;
|
||||
import org.springframework.xml.sax.SaxUtils;
|
||||
import org.springframework.xml.validation.XmlValidator;
|
||||
|
||||
import org.custommonkey.xmlunit.XMLUnit;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.w3c.dom.Document;
|
||||
|
||||
import static org.custommonkey.xmlunit.XMLAssert.assertXMLEqual;
|
||||
|
||||
public abstract class AbstractXsdSchemaTestCase {
|
||||
|
||||
private DocumentBuilder documentBuilder;
|
||||
|
||||
protected Transformer transformer;
|
||||
|
||||
@Before
|
||||
public final void setUp() throws Exception {
|
||||
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
|
||||
documentBuilderFactory.setNamespaceAware(true);
|
||||
documentBuilder = documentBuilderFactory.newDocumentBuilder();
|
||||
TransformerFactory transformerFactory = TransformerFactory.newInstance();
|
||||
transformer = transformerFactory.newTransformer();
|
||||
XMLUnit.setIgnoreWhitespace(true);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSingle() throws Exception {
|
||||
Resource resource = new ClassPathResource("single.xsd", AbstractXsdSchemaTestCase.class);
|
||||
XsdSchema single = createSchema(resource);
|
||||
String namespace = "http://www.springframework.org/spring-ws/single/schema";
|
||||
Assert.assertEquals("Invalid target namespace", namespace, single.getTargetNamespace());
|
||||
resource = new ClassPathResource("single.xsd", AbstractXsdSchemaTestCase.class);
|
||||
Document expected = documentBuilder.parse(SaxUtils.createInputSource(resource));
|
||||
DOMResult domResult = new DOMResult();
|
||||
transformer.transform(single.getSource(), domResult);
|
||||
Document result = (Document) domResult.getNode();
|
||||
assertXMLEqual("Invalid Source returned", expected, result);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIncludes() throws Exception {
|
||||
Resource resource = new ClassPathResource("including.xsd", AbstractXsdSchemaTestCase.class);
|
||||
XsdSchema including = createSchema(resource);
|
||||
String namespace = "http://www.springframework.org/spring-ws/include/schema";
|
||||
Assert.assertEquals("Invalid target namespace", namespace, including.getTargetNamespace());
|
||||
resource = new ClassPathResource("including.xsd", AbstractXsdSchemaTestCase.class);
|
||||
Document expected = documentBuilder.parse(SaxUtils.createInputSource(resource));
|
||||
DOMResult domResult = new DOMResult();
|
||||
transformer.transform(including.getSource(), domResult);
|
||||
Document result = (Document) domResult.getNode();
|
||||
assertXMLEqual("Invalid Source returned", expected, result);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testImports() throws Exception {
|
||||
Resource resource = new ClassPathResource("importing.xsd", AbstractXsdSchemaTestCase.class);
|
||||
XsdSchema importing = createSchema(resource);
|
||||
String namespace = "http://www.springframework.org/spring-ws/importing/schema";
|
||||
Assert.assertEquals("Invalid target namespace", namespace, importing.getTargetNamespace());
|
||||
resource = new ClassPathResource("importing.xsd", AbstractXsdSchemaTestCase.class);
|
||||
Document expected = documentBuilder.parse(SaxUtils.createInputSource(resource));
|
||||
DOMResult domResult = new DOMResult();
|
||||
transformer.transform(importing.getSource(), domResult);
|
||||
Document result = (Document) domResult.getNode();
|
||||
assertXMLEqual("Invalid Source returned", expected, result);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testXmlNamespace() throws Exception {
|
||||
Resource resource = new ClassPathResource("xmlNamespace.xsd", AbstractXsdSchemaTestCase.class);
|
||||
XsdSchema importing = createSchema(resource);
|
||||
String namespace = "http://www.springframework.org/spring-ws/xmlNamespace";
|
||||
Assert.assertEquals("Invalid target namespace", namespace, importing.getTargetNamespace());
|
||||
resource = new ClassPathResource("xmlNamespace.xsd", AbstractXsdSchemaTestCase.class);
|
||||
Document expected = documentBuilder.parse(SaxUtils.createInputSource(resource));
|
||||
DOMResult domResult = new DOMResult();
|
||||
transformer.transform(importing.getSource(), domResult);
|
||||
Document result = (Document) domResult.getNode();
|
||||
assertXMLEqual("Invalid Source returned", expected, result);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCreateValidator() throws Exception {
|
||||
Resource resource = new ClassPathResource("single.xsd", AbstractXsdSchemaTestCase.class);
|
||||
XsdSchema single = createSchema(resource);
|
||||
XmlValidator validator = single.createValidator();
|
||||
Assert.assertNotNull("No XmlValidator returned", validator);
|
||||
}
|
||||
|
||||
protected abstract XsdSchema createSchema(Resource resource) throws Exception;
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
/*
|
||||
* 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.xsd;
|
||||
|
||||
import org.springframework.core.io.Resource;
|
||||
|
||||
public class SimpleXsdSchemaTest extends AbstractXsdSchemaTestCase {
|
||||
|
||||
@Override
|
||||
protected XsdSchema createSchema(Resource resource) throws Exception {
|
||||
SimpleXsdSchema schema = new SimpleXsdSchema(resource);
|
||||
schema.afterPropertiesSet();
|
||||
return schema;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,160 @@
|
||||
/*
|
||||
* 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.xsd.commons;
|
||||
|
||||
import javax.xml.parsers.DocumentBuilder;
|
||||
import javax.xml.parsers.DocumentBuilderFactory;
|
||||
import javax.xml.transform.Transformer;
|
||||
import javax.xml.transform.TransformerFactory;
|
||||
import javax.xml.transform.dom.DOMResult;
|
||||
|
||||
import org.springframework.core.io.ClassPathResource;
|
||||
import org.springframework.core.io.Resource;
|
||||
import org.springframework.xml.sax.SaxUtils;
|
||||
import org.springframework.xml.validation.XmlValidator;
|
||||
import org.springframework.xml.xsd.AbstractXsdSchemaTestCase;
|
||||
import org.springframework.xml.xsd.XsdSchema;
|
||||
|
||||
import org.custommonkey.xmlunit.XMLUnit;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.w3c.dom.Document;
|
||||
|
||||
import static org.custommonkey.xmlunit.XMLAssert.assertXMLEqual;
|
||||
|
||||
public class CommonsXsdSchemaCollectionTest {
|
||||
|
||||
private CommonsXsdSchemaCollection collection;
|
||||
|
||||
private Transformer transformer;
|
||||
|
||||
private DocumentBuilder documentBuilder;
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
collection = new CommonsXsdSchemaCollection();
|
||||
TransformerFactory transformerFactory = TransformerFactory.newInstance();
|
||||
transformer = transformerFactory.newTransformer();
|
||||
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
|
||||
documentBuilderFactory.setNamespaceAware(true);
|
||||
documentBuilder = documentBuilderFactory.newDocumentBuilder();
|
||||
XMLUnit.setIgnoreWhitespace(true);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSingle() throws Exception {
|
||||
Resource resource = new ClassPathResource("single.xsd", AbstractXsdSchemaTestCase.class);
|
||||
collection.setXsds(new Resource[]{resource});
|
||||
collection.afterPropertiesSet();
|
||||
Assert.assertEquals("Invalid amount of XSDs loaded", 1, collection.getXsdSchemas().length);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testInlineComplex() throws Exception {
|
||||
Resource a = new ClassPathResource("A.xsd", AbstractXsdSchemaTestCase.class);
|
||||
collection.setXsds(new Resource[]{a});
|
||||
collection.setInline(true);
|
||||
collection.afterPropertiesSet();
|
||||
XsdSchema[] schemas = collection.getXsdSchemas();
|
||||
Assert.assertEquals("Invalid amount of XSDs loaded", 2, schemas.length);
|
||||
|
||||
Assert.assertEquals("Invalid target namespace", "urn:1", schemas[0].getTargetNamespace());
|
||||
Resource abc = new ClassPathResource("ABC.xsd", AbstractXsdSchemaTestCase.class);
|
||||
Document expected = documentBuilder.parse(SaxUtils.createInputSource(abc));
|
||||
DOMResult domResult = new DOMResult();
|
||||
transformer.transform(schemas[0].getSource(), domResult);
|
||||
assertXMLEqual("Invalid XSD generated", expected, (Document) domResult.getNode());
|
||||
|
||||
Assert.assertEquals("Invalid target namespace", "urn:2", schemas[1].getTargetNamespace());
|
||||
Resource cd = new ClassPathResource("CD.xsd", AbstractXsdSchemaTestCase.class);
|
||||
expected = documentBuilder.parse(SaxUtils.createInputSource(cd));
|
||||
domResult = new DOMResult();
|
||||
transformer.transform(schemas[1].getSource(), domResult);
|
||||
assertXMLEqual("Invalid XSD generated", expected, (Document) domResult.getNode());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCircular() throws Exception {
|
||||
Resource resource = new ClassPathResource("circular-1.xsd", AbstractXsdSchemaTestCase.class);
|
||||
collection.setXsds(new Resource[]{resource});
|
||||
collection.setInline(true);
|
||||
collection.afterPropertiesSet();
|
||||
XsdSchema[] schemas = collection.getXsdSchemas();
|
||||
Assert.assertEquals("Invalid amount of XSDs loaded", 1, schemas.length);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testXmlNamespace() throws Exception {
|
||||
Resource resource = new ClassPathResource("xmlNamespace.xsd", AbstractXsdSchemaTestCase.class);
|
||||
collection.setXsds(new Resource[]{resource});
|
||||
collection.setInline(true);
|
||||
collection.afterPropertiesSet();
|
||||
XsdSchema[] schemas = collection.getXsdSchemas();
|
||||
Assert.assertEquals("Invalid amount of XSDs loaded", 1, schemas.length);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCreateValidator() throws Exception {
|
||||
Resource a = new ClassPathResource("A.xsd", AbstractXsdSchemaTestCase.class);
|
||||
collection.setXsds(new Resource[]{a});
|
||||
collection.setInline(true);
|
||||
collection.afterPropertiesSet();
|
||||
|
||||
XmlValidator validator = collection.createValidator();
|
||||
Assert.assertNotNull("No XmlValidator returned", validator);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testInvalidSchema() throws Exception {
|
||||
Resource invalid = new ClassPathResource("invalid.xsd", AbstractXsdSchemaTestCase.class);
|
||||
collection.setXsds(new Resource[]{invalid});
|
||||
try {
|
||||
collection.afterPropertiesSet();
|
||||
Assert.fail("CommonsXsdSchemaException expected");
|
||||
}
|
||||
catch (CommonsXsdSchemaException ex) {
|
||||
// expected
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIncludesAndImports() throws Exception {
|
||||
Resource hr = new ClassPathResource("hr.xsd", getClass());
|
||||
collection.setXsds(new Resource[]{hr});
|
||||
collection.setInline(true);
|
||||
collection.afterPropertiesSet();
|
||||
|
||||
XsdSchema[] schemas = collection.getXsdSchemas();
|
||||
Assert.assertEquals("Invalid amount of XSDs loaded", 2, schemas.length);
|
||||
|
||||
Assert.assertEquals("Invalid target namespace", "http://mycompany.com/hr/schemas", schemas[0].getTargetNamespace());
|
||||
Resource hr_employee = new ClassPathResource("hr_employee.xsd", getClass());
|
||||
Document expected = documentBuilder.parse(SaxUtils.createInputSource(hr_employee));
|
||||
DOMResult domResult = new DOMResult();
|
||||
transformer.transform(schemas[0].getSource(), domResult);
|
||||
assertXMLEqual("Invalid XSD generated", expected, (Document) domResult.getNode());
|
||||
|
||||
Assert.assertEquals("Invalid target namespace", "http://mycompany.com/hr/schemas/holiday", schemas[1].getTargetNamespace());
|
||||
Resource holiday = new ClassPathResource("holiday.xsd", getClass());
|
||||
expected = documentBuilder.parse(SaxUtils.createInputSource(holiday));
|
||||
domResult = new DOMResult();
|
||||
transformer.transform(schemas[1].getSource(), domResult);
|
||||
assertXMLEqual("Invalid XSD generated", expected, (Document) domResult.getNode());
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
/*
|
||||
* Copyright 2005-2012 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.xsd.commons;
|
||||
|
||||
import javax.xml.transform.dom.DOMSource;
|
||||
|
||||
import org.springframework.core.io.ClassPathResource;
|
||||
import org.springframework.core.io.Resource;
|
||||
import org.springframework.xml.sax.SaxUtils;
|
||||
import org.springframework.xml.xsd.AbstractXsdSchemaTestCase;
|
||||
import org.springframework.xml.xsd.XsdSchema;
|
||||
|
||||
import org.apache.ws.commons.schema.XmlSchema;
|
||||
import org.apache.ws.commons.schema.XmlSchemaCollection;
|
||||
import org.junit.Test;
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Element;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
|
||||
public class CommonsXsdSchemaTest extends AbstractXsdSchemaTestCase {
|
||||
|
||||
@Override
|
||||
protected XsdSchema createSchema(Resource resource) throws Exception {
|
||||
XmlSchemaCollection schemaCollection = new XmlSchemaCollection();
|
||||
XmlSchema schema = schemaCollection.read(SaxUtils.createInputSource(resource));
|
||||
return new CommonsXsdSchema(schema);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testXmime() throws Exception {
|
||||
Resource resource = new ClassPathResource("xmime.xsd", AbstractXsdSchemaTestCase.class);
|
||||
XsdSchema schema = createSchema(resource);
|
||||
String namespace = "urn:test";
|
||||
assertEquals("Invalid target namespace", namespace, schema.getTargetNamespace());
|
||||
Document result = (Document) ((DOMSource) schema.getSource()).getNode();
|
||||
Element schemaElement = result.getDocumentElement();
|
||||
Element elementElement = (Element) schemaElement.getFirstChild();
|
||||
assertNotNull("No expectedContentTypes found",
|
||||
elementElement.getAttributeNS("http://www.w3.org/2005/05/xmlmime", "expectedContentTypes"));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
6
spring-xml/src/test/resources/log4j.properties
Normal file
6
spring-xml/src/test/resources/log4j.properties
Normal file
@@ -0,0 +1,6 @@
|
||||
log4j.rootCategory=INFO, stdout
|
||||
log4j.logger.org.springframework.xml=DEBUG
|
||||
|
||||
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
|
||||
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
|
||||
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - <%m>%n
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<prefix:content xmlns:prefix='namespace'/>
|
||||
@@ -0,0 +1,504 @@
|
||||
<?xml version='1.0' encoding='UTF-8' ?>
|
||||
|
||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||
xmlns:tns="http://schemas.xmlsoap.org/soap/encoding/"
|
||||
targetNamespace="http://schemas.xmlsoap.org/soap/encoding/">
|
||||
|
||||
<xs:attribute name="root">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
'root' can be used to distinguish serialization roots from other
|
||||
elements that are present in a serialization but are not roots of
|
||||
a serialized value graph
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:simpleType>
|
||||
<xs:restriction base='xs:boolean'>
|
||||
<xs:pattern value='0|1'/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:attribute>
|
||||
|
||||
<xs:attributeGroup name="commonAttributes">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
Attributes common to all elements that function as accessors or
|
||||
represent independent (multi-ref) values. The href attribute is
|
||||
intended to be used in a manner like CONREF. That is, the element
|
||||
content should be empty iff the href attribute appears
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:attribute name="id" type="xs:ID"/>
|
||||
<xs:attribute name="href" type="xs:anyURI"/>
|
||||
<xs:anyAttribute namespace="##other" processContents="lax"/>
|
||||
</xs:attributeGroup>
|
||||
|
||||
<!-- Global Attributes. The following attributes are intended to be usable via qualified attribute names on any complex type referencing them. -->
|
||||
|
||||
<!-- Array attributes. Needed to give the type and dimensions of an array's contents, and the offset for partially-transmitted arrays. -->
|
||||
|
||||
<xs:simpleType name="arrayCoordinate">
|
||||
<xs:restriction base="xs:string"/>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:attribute name="arrayType" type="xs:string"/>
|
||||
<xs:attribute name="offset" type="tns:arrayCoordinate"/>
|
||||
|
||||
<xs:attributeGroup name="arrayAttributes">
|
||||
<xs:attribute ref="tns:arrayType"/>
|
||||
<xs:attribute ref="tns:offset"/>
|
||||
</xs:attributeGroup>
|
||||
|
||||
<xs:attribute name="position" type="tns:arrayCoordinate"/>
|
||||
|
||||
<xs:attributeGroup name="arrayMemberAttributes">
|
||||
<xs:attribute ref="tns:position"/>
|
||||
</xs:attributeGroup>
|
||||
|
||||
<xs:group name="Array">
|
||||
<xs:sequence>
|
||||
<xs:any namespace="##any" minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
|
||||
</xs:sequence>
|
||||
</xs:group>
|
||||
|
||||
<xs:element name="Array" type="tns:Array"/>
|
||||
<xs:complexType name="Array">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
'Array' is a complex type for accessors identified by position
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:group ref="tns:Array" minOccurs="0"/>
|
||||
<xs:attributeGroup ref="tns:arrayAttributes"/>
|
||||
<xs:attributeGroup ref="tns:commonAttributes"/>
|
||||
</xs:complexType>
|
||||
|
||||
<!-- 'Struct' is a complex type for accessors identified by name.
|
||||
Constraint: No element may be have the same name as any other,
|
||||
nor may any element have a maxOccurs > 1. -->
|
||||
|
||||
<xs:element name="Struct" type="tns:Struct"/>
|
||||
|
||||
<xs:group name="Struct">
|
||||
<xs:sequence>
|
||||
<xs:any namespace="##any" minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
|
||||
</xs:sequence>
|
||||
</xs:group>
|
||||
|
||||
<xs:complexType name="Struct">
|
||||
<xs:group ref="tns:Struct" minOccurs="0"/>
|
||||
<xs:attributeGroup ref="tns:commonAttributes"/>
|
||||
</xs:complexType>
|
||||
|
||||
<!-- 'Base64' can be used to serialize binary data using base64 encoding
|
||||
as defined in RFC2045 but without the MIME line length limitation. -->
|
||||
|
||||
<xs:simpleType name="base64">
|
||||
<xs:restriction base="xs:base64Binary"/>
|
||||
</xs:simpleType>
|
||||
|
||||
<!-- Element declarations corresponding to each of the simple types in the
|
||||
XML Schemas Specification. -->
|
||||
|
||||
<xs:element name="duration" type="tns:duration"/>
|
||||
<xs:complexType name="duration">
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:duration">
|
||||
<xs:attributeGroup ref="tns:commonAttributes"/>
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:element name="dateTime" type="tns:dateTime"/>
|
||||
<xs:complexType name="dateTime">
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:dateTime">
|
||||
<xs:attributeGroup ref="tns:commonAttributes"/>
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
|
||||
|
||||
<xs:element name="NOTATION" type="tns:NOTATION"/>
|
||||
<xs:complexType name="NOTATION">
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:QName">
|
||||
<xs:attributeGroup ref="tns:commonAttributes"/>
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
|
||||
|
||||
<xs:element name="time" type="tns:time"/>
|
||||
<xs:complexType name="time">
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:time">
|
||||
<xs:attributeGroup ref="tns:commonAttributes"/>
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:element name="date" type="tns:date"/>
|
||||
<xs:complexType name="date">
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:date">
|
||||
<xs:attributeGroup ref="tns:commonAttributes"/>
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:element name="gYearMonth" type="tns:gYearMonth"/>
|
||||
<xs:complexType name="gYearMonth">
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:gYearMonth">
|
||||
<xs:attributeGroup ref="tns:commonAttributes"/>
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:element name="gYear" type="tns:gYear"/>
|
||||
<xs:complexType name="gYear">
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:gYear">
|
||||
<xs:attributeGroup ref="tns:commonAttributes"/>
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:element name="gMonthDay" type="tns:gMonthDay"/>
|
||||
<xs:complexType name="gMonthDay">
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:gMonthDay">
|
||||
<xs:attributeGroup ref="tns:commonAttributes"/>
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:element name="gDay" type="tns:gDay"/>
|
||||
<xs:complexType name="gDay">
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:gDay">
|
||||
<xs:attributeGroup ref="tns:commonAttributes"/>
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:element name="gMonth" type="tns:gMonth"/>
|
||||
<xs:complexType name="gMonth">
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:gMonth">
|
||||
<xs:attributeGroup ref="tns:commonAttributes"/>
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:element name="boolean" type="tns:boolean"/>
|
||||
<xs:complexType name="boolean">
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:boolean">
|
||||
<xs:attributeGroup ref="tns:commonAttributes"/>
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:element name="base64Binary" type="tns:base64Binary"/>
|
||||
<xs:complexType name="base64Binary">
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:base64Binary">
|
||||
<xs:attributeGroup ref="tns:commonAttributes"/>
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:element name="hexBinary" type="tns:hexBinary"/>
|
||||
<xs:complexType name="hexBinary">
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:hexBinary">
|
||||
<xs:attributeGroup ref="tns:commonAttributes"/>
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:element name="float" type="tns:float"/>
|
||||
<xs:complexType name="float">
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:float">
|
||||
<xs:attributeGroup ref="tns:commonAttributes"/>
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:element name="double" type="tns:double"/>
|
||||
<xs:complexType name="double">
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:double">
|
||||
<xs:attributeGroup ref="tns:commonAttributes"/>
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:element name="anyURI" type="tns:anyURI"/>
|
||||
<xs:complexType name="anyURI">
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:anyURI">
|
||||
<xs:attributeGroup ref="tns:commonAttributes"/>
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:element name="QName" type="tns:QName"/>
|
||||
<xs:complexType name="QName">
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:QName">
|
||||
<xs:attributeGroup ref="tns:commonAttributes"/>
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
|
||||
|
||||
<xs:element name="string" type="tns:string"/>
|
||||
<xs:complexType name="string">
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:string">
|
||||
<xs:attributeGroup ref="tns:commonAttributes"/>
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:element name="normalizedString" type="tns:normalizedString"/>
|
||||
<xs:complexType name="normalizedString">
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:normalizedString">
|
||||
<xs:attributeGroup ref="tns:commonAttributes"/>
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:element name="token" type="tns:token"/>
|
||||
<xs:complexType name="token">
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:token">
|
||||
<xs:attributeGroup ref="tns:commonAttributes"/>
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:element name="language" type="tns:language"/>
|
||||
<xs:complexType name="language">
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:language">
|
||||
<xs:attributeGroup ref="tns:commonAttributes"/>
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:element name="Name" type="tns:Name"/>
|
||||
<xs:complexType name="Name">
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:Name">
|
||||
<xs:attributeGroup ref="tns:commonAttributes"/>
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:element name="NMTOKEN" type="tns:NMTOKEN"/>
|
||||
<xs:complexType name="NMTOKEN">
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:NMTOKEN">
|
||||
<xs:attributeGroup ref="tns:commonAttributes"/>
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:element name="NCName" type="tns:NCName"/>
|
||||
<xs:complexType name="NCName">
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:NCName">
|
||||
<xs:attributeGroup ref="tns:commonAttributes"/>
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:element name="NMTOKENS" type="tns:NMTOKENS"/>
|
||||
<xs:complexType name="NMTOKENS">
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:NMTOKENS">
|
||||
<xs:attributeGroup ref="tns:commonAttributes"/>
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:element name="ID" type="tns:ID"/>
|
||||
<xs:complexType name="ID">
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:ID">
|
||||
<xs:attributeGroup ref="tns:commonAttributes"/>
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:element name="IDREF" type="tns:IDREF"/>
|
||||
<xs:complexType name="IDREF">
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:IDREF">
|
||||
<xs:attributeGroup ref="tns:commonAttributes"/>
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:element name="ENTITY" type="tns:ENTITY"/>
|
||||
<xs:complexType name="ENTITY">
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:ENTITY">
|
||||
<xs:attributeGroup ref="tns:commonAttributes"/>
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:element name="IDREFS" type="tns:IDREFS"/>
|
||||
<xs:complexType name="IDREFS">
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:IDREFS">
|
||||
<xs:attributeGroup ref="tns:commonAttributes"/>
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:element name="ENTITIES" type="tns:ENTITIES"/>
|
||||
<xs:complexType name="ENTITIES">
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:ENTITIES">
|
||||
<xs:attributeGroup ref="tns:commonAttributes"/>
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:element name="decimal" type="tns:decimal"/>
|
||||
<xs:complexType name="decimal">
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:decimal">
|
||||
<xs:attributeGroup ref="tns:commonAttributes"/>
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:element name="integer" type="tns:integer"/>
|
||||
<xs:complexType name="integer">
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:integer">
|
||||
<xs:attributeGroup ref="tns:commonAttributes"/>
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:element name="nonPositiveInteger" type="tns:nonPositiveInteger"/>
|
||||
<xs:complexType name="nonPositiveInteger">
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:nonPositiveInteger">
|
||||
<xs:attributeGroup ref="tns:commonAttributes"/>
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:element name="negativeInteger" type="tns:negativeInteger"/>
|
||||
<xs:complexType name="negativeInteger">
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:negativeInteger">
|
||||
<xs:attributeGroup ref="tns:commonAttributes"/>
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:element name="long" type="tns:long"/>
|
||||
<xs:complexType name="long">
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:long">
|
||||
<xs:attributeGroup ref="tns:commonAttributes"/>
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:element name="int" type="tns:int"/>
|
||||
<xs:complexType name="int">
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:int">
|
||||
<xs:attributeGroup ref="tns:commonAttributes"/>
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:element name="short" type="tns:short"/>
|
||||
<xs:complexType name="short">
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:short">
|
||||
<xs:attributeGroup ref="tns:commonAttributes"/>
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:element name="byte" type="tns:byte"/>
|
||||
<xs:complexType name="byte">
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:byte">
|
||||
<xs:attributeGroup ref="tns:commonAttributes"/>
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:element name="nonNegativeInteger" type="tns:nonNegativeInteger"/>
|
||||
<xs:complexType name="nonNegativeInteger">
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:nonNegativeInteger">
|
||||
<xs:attributeGroup ref="tns:commonAttributes"/>
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:element name="unsignedLong" type="tns:unsignedLong"/>
|
||||
<xs:complexType name="unsignedLong">
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:unsignedLong">
|
||||
<xs:attributeGroup ref="tns:commonAttributes"/>
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:element name="unsignedInt" type="tns:unsignedInt"/>
|
||||
<xs:complexType name="unsignedInt">
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:unsignedInt">
|
||||
<xs:attributeGroup ref="tns:commonAttributes"/>
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:element name="unsignedShort" type="tns:unsignedShort"/>
|
||||
<xs:complexType name="unsignedShort">
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:unsignedShort">
|
||||
<xs:attributeGroup ref="tns:commonAttributes"/>
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:element name="unsignedByte" type="tns:unsignedByte"/>
|
||||
<xs:complexType name="unsignedByte">
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:unsignedByte">
|
||||
<xs:attributeGroup ref="tns:commonAttributes"/>
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:element name="positiveInteger" type="tns:positiveInteger"/>
|
||||
<xs:complexType name="positiveInteger">
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:positiveInteger">
|
||||
<xs:attributeGroup ref="tns:commonAttributes"/>
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:element name="anyType"/>
|
||||
</xs:schema>
|
||||
|
||||
@@ -0,0 +1,96 @@
|
||||
<?xml version='1.0' encoding='UTF-8' ?>
|
||||
|
||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||
xmlns:tns="http://schemas.xmlsoap.org/soap/envelope/"
|
||||
targetNamespace="http://schemas.xmlsoap.org/soap/envelope/">
|
||||
|
||||
|
||||
<!-- Envelope, header and body -->
|
||||
<xs:element name="Envelope" type="tns:Envelope"/>
|
||||
<xs:complexType name="Envelope">
|
||||
<xs:sequence>
|
||||
<xs:element ref="tns:Header" minOccurs="0"/>
|
||||
<xs:element ref="tns:Body" minOccurs="1"/>
|
||||
<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
|
||||
</xs:sequence>
|
||||
<xs:anyAttribute namespace="##other" processContents="lax"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:element name="Header" type="tns:Header"/>
|
||||
<xs:complexType name="Header">
|
||||
<xs:sequence>
|
||||
<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
|
||||
</xs:sequence>
|
||||
<xs:anyAttribute namespace="##other" processContents="lax"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:element name="Body" type="tns:Body"/>
|
||||
<xs:complexType name="Body">
|
||||
<xs:sequence>
|
||||
<xs:any namespace="##any" minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
|
||||
</xs:sequence>
|
||||
<xs:anyAttribute namespace="##any" processContents="lax">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
Prose in the spec does not specify that attributes are allowed on the Body element
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:anyAttribute>
|
||||
</xs:complexType>
|
||||
|
||||
|
||||
<!-- Global Attributes. The following attributes are intended to be usable via qualified attribute names on any complex type referencing them. -->
|
||||
<xs:attribute name="mustUnderstand">
|
||||
<xs:simpleType>
|
||||
<xs:restriction base='xs:boolean'>
|
||||
<xs:pattern value='0|1'/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="actor" type="xs:anyURI"/>
|
||||
|
||||
<xs:simpleType name="encodingStyle">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
'encodingStyle' indicates any canonicalization conventions followed in the contents of the containing
|
||||
element. For example, the value 'http://schemas.xmlsoap.org/soap/encoding/' indicates the pattern
|
||||
described in SOAP specification
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:list itemType="xs:anyURI"/>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:attribute name="encodingStyle" type="tns:encodingStyle"/>
|
||||
<xs:attributeGroup name="encodingStyle">
|
||||
<xs:attribute ref="tns:encodingStyle"/>
|
||||
</xs:attributeGroup>
|
||||
|
||||
<xs:element name="Fault" type="tns:Fault"/>
|
||||
<xs:complexType name="Fault" final="extension">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
Fault reporting structure
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:sequence>
|
||||
<xs:element name="faultcode" type="xs:QName"/>
|
||||
<xs:element name="faultstring" type="xs:string"/>
|
||||
<xs:element name="faultactor" type="xs:anyURI" minOccurs="0"/>
|
||||
<xs:element name="detail" type="tns:detail" minOccurs="0"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="detail">
|
||||
<xs:sequence>
|
||||
<xs:any namespace="##any" minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
|
||||
</xs:sequence>
|
||||
<xs:anyAttribute namespace="##any" processContents="lax"/>
|
||||
</xs:complexType>
|
||||
|
||||
</xs:schema>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<product xmlns="http://www.springframework.org/spring-ws/test/validation" effDate="2006-01-01">
|
||||
<size>20</size>
|
||||
</product>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<multipleSchemas1 xmlns="http://www.springframework.org/spring-ws/test/multipleSchemas1">abc</multipleSchemas1>
|
||||
@@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<schema xmlns="http://www.w3.org/2001/XMLSchema"
|
||||
targetNamespace="http://www.springframework.org/spring-ws/test/multipleSchemas1"
|
||||
elementFormDefault="qualified">
|
||||
|
||||
<element name="multipleSchemas1">
|
||||
<simpleType>
|
||||
<restriction base="string">
|
||||
<pattern value="[a-c]+"/>
|
||||
</restriction>
|
||||
</simpleType>
|
||||
</element>
|
||||
|
||||
</schema>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<multipleSchemas2 xmlns="http://www.springframework.org/spring-ws/test/multipleSchemas2">123</multipleSchemas2>
|
||||
@@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<schema xmlns="http://www.w3.org/2001/XMLSchema"
|
||||
targetNamespace="http://www.springframework.org/spring-ws/test/multipleSchemas2"
|
||||
elementFormDefault="qualified">
|
||||
|
||||
<element name="multipleSchemas2">
|
||||
<simpleType>
|
||||
<restriction base="string">
|
||||
<pattern value="[1-3]+"/>
|
||||
</restriction>
|
||||
</simpleType>
|
||||
</element>
|
||||
|
||||
</schema>
|
||||
@@ -0,0 +1,22 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<schema xmlns="http://www.w3.org/2001/XMLSchema"
|
||||
targetNamespace="http://www.springframework.org/spring-ws/test/validation"
|
||||
xmlns:tns="http://www.springframework.org/spring-ws/test/validation" elementFormDefault="qualified">
|
||||
|
||||
<element name="product" type="tns:ProductType"/>
|
||||
|
||||
<complexType name="ProductType">
|
||||
<sequence>
|
||||
<element name="number" type="integer"/>
|
||||
<element name="size" type="tns:SizeType"/>
|
||||
</sequence>
|
||||
<attribute name="effDate" type="date"/>
|
||||
</complexType>
|
||||
|
||||
<simpleType name="SizeType">
|
||||
<restriction base="integer">
|
||||
<minInclusive value="2"/>
|
||||
<maxInclusive value="18"/>
|
||||
</restriction>
|
||||
</simpleType>
|
||||
</schema>
|
||||
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<product xmlns="http://www.springframework.org/spring-ws/test/validation" effDate="2006-01-01">
|
||||
<number>42</number>
|
||||
<size>10</size>
|
||||
</product>
|
||||
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<root xmlns="namespace1">
|
||||
<prefix:child xmlns:prefix="namespace2">
|
||||
<prefix:text>text</prefix:text>
|
||||
<prefix:number>42.0</prefix:number>
|
||||
<prefix:boolean>1</prefix:boolean>
|
||||
</prefix:child>
|
||||
</root>
|
||||
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<root>
|
||||
<child>
|
||||
<text>text</text>
|
||||
<number>42.0</number>
|
||||
<boolean>1</boolean>
|
||||
</child>
|
||||
</root>
|
||||
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||
targetNamespace="urn:1"
|
||||
xmlns:tns="urn:1" elementFormDefault="qualified"
|
||||
attributeFormDefault="unqualified">
|
||||
<xsd:include schemaLocation="B.xsd"/>
|
||||
<xsd:complexType name="A">
|
||||
<xsd:complexContent>
|
||||
<xsd:extension base="tns:B"/>
|
||||
</xsd:complexContent>
|
||||
</xsd:complexType>
|
||||
</xsd:schema>
|
||||
@@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns0="urn:2" xmlns:tns="urn:1"
|
||||
attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="urn:1">
|
||||
<xsd:import namespace="urn:2"/>
|
||||
<xsd:complexType name="A">
|
||||
<xsd:complexContent>
|
||||
<xsd:extension base="tns:B"/>
|
||||
</xsd:complexContent>
|
||||
</xsd:complexType>
|
||||
<xsd:complexType name="B">
|
||||
<xsd:sequence>
|
||||
<xsd:element name="c" type="tns:C"/>
|
||||
<xsd:element name="d" type="ns0:D"/>
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
<xsd:simpleType name="C">
|
||||
<xsd:restriction base="xsd:string"/>
|
||||
</xsd:simpleType>
|
||||
</xsd:schema>
|
||||
@@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||
targetNamespace="urn:1"
|
||||
xmlns="urn:1"
|
||||
xmlns:imported="urn:2" elementFormDefault="qualified">
|
||||
<xsd:include schemaLocation="C.xsd"/>
|
||||
<xsd:import schemaLocation="D.xsd" namespace="urn:2"/>
|
||||
<xsd:complexType name="B">
|
||||
<xsd:sequence>
|
||||
<xsd:element type="C" name="c"/>
|
||||
<xsd:element type="imported:D" name="d"/>
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
</xsd:schema>
|
||||
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||
elementFormDefault="qualified">
|
||||
<xsd:simpleType name="C">
|
||||
<xsd:restriction base="xsd:string"/>
|
||||
</xsd:simpleType>
|
||||
</xsd:schema>
|
||||
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="urn:2" attributeFormDefault="unqualified"
|
||||
elementFormDefault="qualified" targetNamespace="urn:2">
|
||||
<xsd:simpleType name="D">
|
||||
<xsd:restriction base="C"/>
|
||||
</xsd:simpleType>
|
||||
<xsd:simpleType name="C">
|
||||
<xsd:restriction base="xsd:string"/>
|
||||
</xsd:simpleType>
|
||||
</xsd:schema>
|
||||
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||
targetNamespace="urn:2"
|
||||
xmlns="urn:2" elementFormDefault="qualified">
|
||||
<xsd:include schemaLocation="C.xsd"/>
|
||||
<xsd:simpleType name="D">
|
||||
<xsd:restriction base="C"/>
|
||||
</xsd:simpleType>
|
||||
</xsd:schema>
|
||||
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||
targetNamespace="urn:1"
|
||||
xmlns:tns="urn:1" elementFormDefault="qualified"
|
||||
attributeFormDefault="unqualified">
|
||||
<xsd:include schemaLocation="circular-2.xsd"/>
|
||||
<xsd:simpleType name="A1">
|
||||
<xsd:restriction base="tns:B1"/>
|
||||
</xsd:simpleType>
|
||||
<xsd:simpleType name="A2">
|
||||
<xsd:restriction base="xsd:string"/>
|
||||
</xsd:simpleType>
|
||||
</xsd:schema>
|
||||
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||
targetNamespace="urn:1"
|
||||
xmlns:tns="urn:1" elementFormDefault="qualified"
|
||||
attributeFormDefault="unqualified">
|
||||
<xsd:include schemaLocation="circular-3.xsd"/>
|
||||
<xsd:simpleType name="B1">
|
||||
<xsd:restriction base="tns:C1"/>
|
||||
</xsd:simpleType>
|
||||
</xsd:schema>
|
||||
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||
targetNamespace="urn:1"
|
||||
xmlns:tns="urn:1" elementFormDefault="qualified"
|
||||
attributeFormDefault="unqualified">
|
||||
<xsd:include schemaLocation="circular-1.xsd"/>
|
||||
<xsd:simpleType name="C1">
|
||||
<xsd:restriction base="xsd:string"/>
|
||||
</xsd:simpleType>
|
||||
<xsd:simpleType name="C2">
|
||||
<xsd:restriction base="tns:A1"/>
|
||||
</xsd:simpleType>
|
||||
</xsd:schema>
|
||||
@@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||
xmlns:hr="http://mycompany.com/hr/schemas"
|
||||
elementFormDefault="qualified"
|
||||
targetNamespace="http://mycompany.com/hr/schemas">
|
||||
<xs:complexType name="EmployeeType">
|
||||
<xs:sequence>
|
||||
<xs:element name="Number" type="xs:integer"/>
|
||||
<xs:element name="FirstName" type="xs:string"/>
|
||||
<xs:element name="LastName" type="xs:string"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:schema>
|
||||
@@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||
xmlns:hrh="http://mycompany.com/hr/schemas/holiday"
|
||||
attributeFormDefault="unqualified"
|
||||
elementFormDefault="qualified"
|
||||
targetNamespace="http://mycompany.com/hr/schemas/holiday">
|
||||
<xs:complexType name="HolidayType">
|
||||
<xs:sequence>
|
||||
<xs:element name="StartDate" type="xs:date"/>
|
||||
<xs:element name="EndDate" type="xs:date"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:schema>
|
||||
@@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||
xmlns:hr="http://mycompany.com/hr/schemas"
|
||||
xmlns:hrh="http://mycompany.com/hr/schemas/holiday"
|
||||
elementFormDefault="qualified"
|
||||
targetNamespace="http://mycompany.com/hr/schemas">
|
||||
|
||||
<xs:import namespace="http://mycompany.com/hr/schemas/holiday" schemaLocation="holiday.xsd"/>
|
||||
<xs:include schemaLocation="employee.xsd"/>
|
||||
<xs:element name="HolidayRequest">
|
||||
<xs:complexType>
|
||||
<xs:all>
|
||||
<xs:element name="Holiday" type="hrh:HolidayType"/>
|
||||
<xs:element name="Employee" type="hr:EmployeeType"/>
|
||||
</xs:all>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:schema>
|
||||
@@ -0,0 +1,25 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||
xmlns:hr="http://mycompany.com/hr/schemas"
|
||||
xmlns:hrh="http://mycompany.com/hr/schemas/holiday"
|
||||
attributeFormDefault="unqualified"
|
||||
elementFormDefault="qualified"
|
||||
targetNamespace="http://mycompany.com/hr/schemas">
|
||||
|
||||
<xs:import namespace="http://mycompany.com/hr/schemas/holiday"/>
|
||||
<xs:element name="HolidayRequest">
|
||||
<xs:complexType>
|
||||
<xs:all>
|
||||
<xs:element name="Holiday" type="hrh:HolidayType"/>
|
||||
<xs:element name="Employee" type="hr:EmployeeType"/>
|
||||
</xs:all>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:complexType name="EmployeeType">
|
||||
<xs:sequence>
|
||||
<xs:element name="Number" type="xs:integer"/>
|
||||
<xs:element name="FirstName" type="xs:string"/>
|
||||
<xs:element name="LastName" type="xs:string"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:schema>
|
||||
@@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||
targetNamespace="http://www.springframework.org/spring-ws/imported/schema"
|
||||
xmlns="http://www.springframework.org/spring-ws/imported/schema" elementFormDefault="qualified"
|
||||
attributeFormDefault="unqualified">
|
||||
|
||||
<xsd:element name="GetOrderResponse">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="child" type="xsd:string"/>
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
|
||||
</xsd:schema>
|
||||
@@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||
targetNamespace="http://www.springframework.org/spring-ws/importing/schema"
|
||||
xmlns="http://www.springframework.org/spring-ws/importing/schema" elementFormDefault="qualified"
|
||||
attributeFormDefault="unqualified">
|
||||
|
||||
<xsd:import namespace="http://www.springframework.org/spring-ws/imported/schema" schemaLocation="imported.xsd"/>
|
||||
|
||||
<xsd:element name="GetOrderRequest">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="child" type="xsd:string"/>
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
|
||||
</xsd:schema>
|
||||
@@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||
targetNamespace="http://www.springframework.org/spring-ws/include/schema"
|
||||
xmlns="http://www.springframework.org/spring-ws/include/schema" elementFormDefault="qualified"
|
||||
attributeFormDefault="unqualified">
|
||||
|
||||
<xsd:element name="GetOrderResponse">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="child" type="xsd:string"/>
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
|
||||
</xsd:schema>
|
||||
@@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||
targetNamespace="http://www.springframework.org/spring-ws/include/schema"
|
||||
xmlns="http://www.springframework.org/spring-ws/include/schema" elementFormDefault="qualified"
|
||||
attributeFormDefault="unqualified">
|
||||
|
||||
<xsd:include schemaLocation="included.xsd"/>
|
||||
|
||||
<xsd:element name="GetOrderRequest">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="child" type="xsd:string"/>
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
|
||||
|
||||
</xsd:schema>
|
||||
@@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||
targetNamespace="urn:1"
|
||||
xmlns="urn:1"
|
||||
xmlns:imported="urn:2" elementFormDefault="qualified">
|
||||
<xsd:include schemaLocation="X.xsd"/>
|
||||
<!--<xsd:import schemaLocation="D.xsd" namespace="urn:2"/>-->
|
||||
<xsd:complexType name="B">
|
||||
<xsd:sequence>
|
||||
<xsd:element type="C" name="c"/>
|
||||
<xsd:element type="imported:D" name="d"/>
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
</xsd:schema>
|
||||
@@ -0,0 +1,35 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||
targetNamespace="http://www.springframework.org/spring-ws/single/schema"
|
||||
xmlns="http://www.springframework.org/spring-ws/single/schema" elementFormDefault="qualified"
|
||||
attributeFormDefault="unqualified">
|
||||
|
||||
<xsd:simpleType name="customType">
|
||||
<xsd:restriction base="xsd:string"/>
|
||||
</xsd:simpleType>
|
||||
|
||||
<xsd:element name="GetOrderRequest">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="child" type="xsd:string"/>
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
|
||||
<xsd:element name="GetOrderResponse">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="child" type="xsd:string"/>
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
|
||||
<xsd:element name="GetOrderFault">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="child" type="xsd:string"/>
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
|
||||
</xsd:schema>
|
||||
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||
targetNamespace="urn:test"
|
||||
xmlns="urn:test"
|
||||
elementFormDefault="qualified"
|
||||
attributeFormDefault="unqualified"
|
||||
|
||||
xmlns:xmime="http://www.w3.org/2005/05/xmlmime">
|
||||
<xs:element name="BinaryData" type="xs:base64Binary" xmime:expectedContentTypes="application/octet-stream"/>
|
||||
</xs:schema>
|
||||
|
||||
@@ -0,0 +1,287 @@
|
||||
<?xml version='1.0'?>
|
||||
<?xml-stylesheet href="../2008/09/xsd.xsl" type="text/xsl"?>
|
||||
<xs:schema targetNamespace="http://www.w3.org/XML/1998/namespace"
|
||||
xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||
xmlns ="http://www.w3.org/1999/xhtml"
|
||||
xml:lang="en">
|
||||
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
<div>
|
||||
<h1>About the XML namespace</h1>
|
||||
|
||||
<div class="bodytext">
|
||||
<p>
|
||||
This schema document describes the XML namespace, in a form
|
||||
suitable for import by other schema documents.
|
||||
</p>
|
||||
<p>
|
||||
See <a href="http://www.w3.org/XML/1998/namespace.html">
|
||||
http://www.w3.org/XML/1998/namespace.html</a> and
|
||||
<a href="http://www.w3.org/TR/REC-xml">
|
||||
http://www.w3.org/TR/REC-xml</a> for information
|
||||
about this namespace.
|
||||
</p>
|
||||
<p>
|
||||
Note that local names in this namespace are intended to be
|
||||
defined only by the World Wide Web Consortium or its subgroups.
|
||||
The names currently defined in this namespace are listed below.
|
||||
They should not be used with conflicting semantics by any Working
|
||||
Group, specification, or document instance.
|
||||
</p>
|
||||
<p>
|
||||
See further below in this document for more information about <a
|
||||
href="#usage">how to refer to this schema document from your own
|
||||
XSD schema documents</a> and about <a href="#nsversioning">the
|
||||
namespace-versioning policy governing this schema document</a>.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
|
||||
<xs:attribute name="lang">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
<div>
|
||||
|
||||
<h3>lang (as an attribute name)</h3>
|
||||
<p>
|
||||
denotes an attribute whose value
|
||||
is a language code for the natural language of the content of
|
||||
any element; its value is inherited. This name is reserved
|
||||
by virtue of its definition in the XML specification.</p>
|
||||
|
||||
</div>
|
||||
<div>
|
||||
<h4>Notes</h4>
|
||||
<p>
|
||||
Attempting to install the relevant ISO 2- and 3-letter
|
||||
codes as the enumerated possible values is probably never
|
||||
going to be a realistic possibility.
|
||||
</p>
|
||||
<p>
|
||||
See BCP 47 at <a href="http://www.rfc-editor.org/rfc/bcp/bcp47.txt">
|
||||
http://www.rfc-editor.org/rfc/bcp/bcp47.txt</a>
|
||||
and the IANA language subtag registry at
|
||||
<a href="http://www.iana.org/assignments/language-subtag-registry">
|
||||
http://www.iana.org/assignments/language-subtag-registry</a>
|
||||
for further information.
|
||||
</p>
|
||||
<p>
|
||||
The union allows for the 'un-declaration' of xml:lang with
|
||||
the empty string.
|
||||
</p>
|
||||
</div>
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:simpleType>
|
||||
<xs:union memberTypes="xs:language">
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value=""/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:union>
|
||||
</xs:simpleType>
|
||||
</xs:attribute>
|
||||
|
||||
<xs:attribute name="space">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
<div>
|
||||
|
||||
<h3>space (as an attribute name)</h3>
|
||||
<p>
|
||||
denotes an attribute whose
|
||||
value is a keyword indicating what whitespace processing
|
||||
discipline is intended for the content of the element; its
|
||||
value is inherited. This name is reserved by virtue of its
|
||||
definition in the XML specification.</p>
|
||||
|
||||
</div>
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:NCName">
|
||||
<xs:enumeration value="default"/>
|
||||
<xs:enumeration value="preserve"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:attribute>
|
||||
|
||||
<xs:attribute name="base" type="xs:anyURI"> <xs:annotation>
|
||||
<xs:documentation>
|
||||
<div>
|
||||
|
||||
<h3>base (as an attribute name)</h3>
|
||||
<p>
|
||||
denotes an attribute whose value
|
||||
provides a URI to be used as the base for interpreting any
|
||||
relative URIs in the scope of the element on which it
|
||||
appears; its value is inherited. This name is reserved
|
||||
by virtue of its definition in the XML Base specification.</p>
|
||||
|
||||
<p>
|
||||
See <a
|
||||
href="http://www.w3.org/TR/xmlbase/">http://www.w3.org/TR/xmlbase/</a>
|
||||
for information about this attribute.
|
||||
</p>
|
||||
</div>
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
|
||||
<xs:attribute name="id" type="xs:ID">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
<div>
|
||||
|
||||
<h3>id (as an attribute name)</h3>
|
||||
<p>
|
||||
denotes an attribute whose value
|
||||
should be interpreted as if declared to be of type ID.
|
||||
This name is reserved by virtue of its definition in the
|
||||
xml:id specification.</p>
|
||||
|
||||
<p>
|
||||
See <a
|
||||
href="http://www.w3.org/TR/xml-id/">http://www.w3.org/TR/xml-id/</a>
|
||||
for information about this attribute.
|
||||
</p>
|
||||
</div>
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
|
||||
<xs:attributeGroup name="specialAttrs">
|
||||
<xs:attribute ref="xml:base"/>
|
||||
<xs:attribute ref="xml:lang"/>
|
||||
<xs:attribute ref="xml:space"/>
|
||||
<xs:attribute ref="xml:id"/>
|
||||
</xs:attributeGroup>
|
||||
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
<div>
|
||||
|
||||
<h3>Father (in any context at all)</h3>
|
||||
|
||||
<div class="bodytext">
|
||||
<p>
|
||||
denotes Jon Bosak, the chair of
|
||||
the original XML Working Group. This name is reserved by
|
||||
the following decision of the W3C XML Plenary and
|
||||
XML Coordination groups:
|
||||
</p>
|
||||
<blockquote>
|
||||
<p>
|
||||
In appreciation for his vision, leadership and
|
||||
dedication the W3C XML Plenary on this 10th day of
|
||||
February, 2000, reserves for Jon Bosak in perpetuity
|
||||
the XML name "xml:Father".
|
||||
</p>
|
||||
</blockquote>
|
||||
</div>
|
||||
</div>
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
<div xml:id="usage" id="usage">
|
||||
<h2><a name="usage">About this schema document</a></h2>
|
||||
|
||||
<div class="bodytext">
|
||||
<p>
|
||||
This schema defines attributes and an attribute group suitable
|
||||
for use by schemas wishing to allow <code>xml:base</code>,
|
||||
<code>xml:lang</code>, <code>xml:space</code> or
|
||||
<code>xml:id</code> attributes on elements they define.
|
||||
</p>
|
||||
<p>
|
||||
To enable this, such a schema must import this schema for
|
||||
the XML namespace, e.g. as follows:
|
||||
</p>
|
||||
<pre>
|
||||
<schema . . .>
|
||||
. . .
|
||||
<import namespace="http://www.w3.org/XML/1998/namespace"
|
||||
schemaLocation="http://www.w3.org/2001/xml.xsd"/>
|
||||
</pre>
|
||||
<p>
|
||||
or
|
||||
</p>
|
||||
<pre>
|
||||
<import namespace="http://www.w3.org/XML/1998/namespace"
|
||||
schemaLocation="http://www.w3.org/2009/01/xml.xsd"/>
|
||||
</pre>
|
||||
<p>
|
||||
Subsequently, qualified reference to any of the attributes or the
|
||||
group defined below will have the desired effect, e.g.
|
||||
</p>
|
||||
<pre>
|
||||
<type . . .>
|
||||
. . .
|
||||
<attributeGroup ref="xml:specialAttrs"/>
|
||||
</pre>
|
||||
<p>
|
||||
will define a type which will schema-validate an instance element
|
||||
with any of those attributes.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
<div id="nsversioning" xml:id="nsversioning">
|
||||
<h2><a name="nsversioning">Versioning policy for this schema document</a></h2>
|
||||
<div class="bodytext">
|
||||
<p>
|
||||
In keeping with the XML Schema WG's standard versioning
|
||||
policy, this schema document will persist at
|
||||
<a href="http://www.w3.org/2009/01/xml.xsd">
|
||||
http://www.w3.org/2009/01/xml.xsd</a>.
|
||||
</p>
|
||||
<p>
|
||||
At the date of issue it can also be found at
|
||||
<a href="http://www.w3.org/2001/xml.xsd">
|
||||
http://www.w3.org/2001/xml.xsd</a>.
|
||||
</p>
|
||||
<p>
|
||||
The schema document at that URI may however change in the future,
|
||||
in order to remain compatible with the latest version of XML
|
||||
Schema itself, or with the XML namespace itself. In other words,
|
||||
if the XML Schema or XML namespaces change, the version of this
|
||||
document at <a href="http://www.w3.org/2001/xml.xsd">
|
||||
http://www.w3.org/2001/xml.xsd
|
||||
</a>
|
||||
will change accordingly; the version at
|
||||
<a href="http://www.w3.org/2009/01/xml.xsd">
|
||||
http://www.w3.org/2009/01/xml.xsd
|
||||
</a>
|
||||
will not change.
|
||||
</p>
|
||||
<p>
|
||||
Previous dated (and unchanging) versions of this schema
|
||||
document are at:
|
||||
</p>
|
||||
<ul>
|
||||
<li><a href="http://www.w3.org/2009/01/xml.xsd">
|
||||
http://www.w3.org/2009/01/xml.xsd</a></li>
|
||||
<li><a href="http://www.w3.org/2007/08/xml.xsd">
|
||||
http://www.w3.org/2007/08/xml.xsd</a></li>
|
||||
<li><a href="http://www.w3.org/2004/10/xml.xsd">
|
||||
http://www.w3.org/2004/10/xml.xsd</a></li>
|
||||
<li><a href="http://www.w3.org/2001/03/xml.xsd">
|
||||
http://www.w3.org/2001/03/xml.xsd</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
|
||||
</xs:schema>
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||
targetNamespace="http://www.springframework.org/spring-ws/xmlNamespace"
|
||||
xmlns="http://www.springframework.org/spring-ws/xmlNamespace" elementFormDefault="qualified"
|
||||
attributeFormDefault="unqualified">
|
||||
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="xml.xsd"/>
|
||||
|
||||
<xsd:element name="GetOrderRequest">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="child" type="xsd:string"/>
|
||||
</xsd:sequence>
|
||||
<xsd:attribute ref="xml:lang" use="required"/>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
|
||||
</xsd:schema>
|
||||
Reference in New Issue
Block a user