/** | |
* Licensed to the Apache Software Foundation (ASF) under one | |
* or more contributor license agreements. See the NOTICE file | |
* distributed with this work for additional information | |
* regarding copyright ownership. The ASF licenses this file | |
* to you 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 tests; | |
import java.io.FileInputStream; | |
import java.io.InputStream; | |
import java.util.HashSet; | |
import java.util.List; | |
import java.util.Set; | |
import javax.xml.namespace.QName; | |
import javax.xml.transform.stream.StreamSource; | |
import org.w3c.dom.Node; | |
import org.w3c.dom.NodeList; | |
import org.apache.ws.commons.schema.XmlSchema; | |
import org.apache.ws.commons.schema.XmlSchemaAnnotation; | |
import org.apache.ws.commons.schema.XmlSchemaAnnotationItem; | |
import org.apache.ws.commons.schema.XmlSchemaAppInfo; | |
import org.apache.ws.commons.schema.XmlSchemaCollection; | |
import org.apache.ws.commons.schema.XmlSchemaDocumentation; | |
import org.apache.ws.commons.schema.XmlSchemaObject; | |
import org.apache.ws.commons.schema.XmlSchemaSimpleType; | |
import org.junit.Assert; | |
import org.junit.Test; | |
public class AnnotationTest extends Assert { | |
/** | |
* This method will test for when the appinfo element of an annotation doesn't include a source attribute | |
* and doesn't contain any content. | |
* | |
* @throws Exception Any exception encountered | |
*/ | |
@Test | |
public void testEmptyAppInfo() throws Exception { | |
/* | |
* <simpleType name="emptyAppinfo"> <annotation> <documentation source="http://test/source/doc" | |
* xml:lang="en">testing987</documentation> <appinfo/> </annotation> <restriction base="string"> | |
* <length value="1"/> </restriction> </simpleType> | |
*/ | |
QName typeQName = new QName("http://soapinterop.org/types", "emptyAppinfo"); | |
InputStream is = new FileInputStream(Resources.asURI("annotation.xsd")); | |
XmlSchemaCollection schemaCol = new XmlSchemaCollection(); | |
schemaCol.read(new StreamSource(is)); | |
XmlSchemaSimpleType simpleType = (XmlSchemaSimpleType)schemaCol.getTypeByQName(typeQName); | |
assertNotNull(simpleType); | |
XmlSchemaAnnotation xsa = simpleType.getAnnotation(); | |
assertNotNull(xsa); | |
List<XmlSchemaAnnotationItem> col = xsa.getItems(); | |
assertEquals(1, col.size()); | |
Set<String> s = new HashSet<String>(); | |
s.add(XmlSchemaDocumentation.class.getName()); | |
for (int i = 0; i < col.size(); i++) { | |
XmlSchemaObject o = col.get(i); | |
if (o instanceof XmlSchemaAppInfo) { | |
fail("The appinfo element did not contain a source" | |
+ " attribute or any content, so this element" + " was not exptected to be found."); | |
} else if (o instanceof XmlSchemaDocumentation) { | |
assertEquals("en", ((XmlSchemaDocumentation)o).getLanguage()); | |
assertEquals("http://test/source/doc", ((XmlSchemaDocumentation)o).getSource()); | |
NodeList nl = ((XmlSchemaDocumentation)o).getMarkup(); | |
for (int j = 0; j < nl.getLength(); j++) { | |
Node n = nl.item(j); | |
if (n.getNodeType() == Node.TEXT_NODE) { | |
assertEquals("testing987", n.getNodeValue()); | |
} | |
} | |
} | |
assertTrue(s.remove(o.getClass().getName())); | |
} | |
assertTrue("The set should have been empty, but instead contained: " + s + ".", s.isEmpty()); | |
} | |
/** | |
* This method will test for when the documentation element of an annotation doesn't include a source | |
* attribute or xml:lang attribute and doesn't contain any content. | |
* | |
* @throws Exception Any exception encountered | |
*/ | |
@Test | |
public void testEmptyDocumentation() throws Exception { | |
/* | |
* <simpleType name="emptyDocumentation"> <annotation> <documentation/> <appinfo | |
* source="http://test/source/appinfo">testing123</appinfo> </annotation> <restriction base="string"> | |
* <length value="2"/> </restriction> </simpleType> | |
*/ | |
QName typeQName = new QName("http://soapinterop.org/types", "emptyDocumentation"); | |
InputStream is = new FileInputStream(Resources.asURI("annotation.xsd")); | |
XmlSchemaCollection schemaCol = new XmlSchemaCollection(); | |
schemaCol.read(new StreamSource(is)); | |
XmlSchemaSimpleType simpleType = (XmlSchemaSimpleType)schemaCol.getTypeByQName(typeQName); | |
assertNotNull(simpleType); | |
XmlSchemaAnnotation xsa = simpleType.getAnnotation(); | |
assertNotNull(xsa); | |
List<XmlSchemaAnnotationItem> col = xsa.getItems(); | |
assertEquals(1, col.size()); | |
Set<String> s = new HashSet<String>(); | |
s.add(XmlSchemaAppInfo.class.getName()); | |
for (int i = 0; i < col.size(); i++) { | |
XmlSchemaObject o = col.get(i); | |
if (o instanceof XmlSchemaAppInfo) { | |
assertEquals("http://test/source/appinfo", ((XmlSchemaAppInfo)o).getSource()); | |
NodeList nl = ((XmlSchemaAppInfo)o).getMarkup(); | |
for (int j = 0; j < nl.getLength(); j++) { | |
Node n = nl.item(j); | |
if (n.getNodeType() == Node.TEXT_NODE) { | |
assertEquals("testing123", n.getNodeValue()); | |
} | |
} | |
} else if (o instanceof XmlSchemaDocumentation) { | |
fail("The documentation element did not contain a source" | |
+ " attribute or any content, so this element" + " was not exptected to be found."); | |
} | |
assertTrue(s.remove(o.getClass().getName())); | |
} | |
assertTrue("The set should have been empty, but instead contained: " + s + ".", s.isEmpty()); | |
} | |
/** | |
* This method will test for when the documentation and appinfo elements of an annotation don't include | |
* anything. | |
* | |
* @throws Exception Any exception encountered | |
*/ | |
@Test | |
public void testEmptyAppinfoDocumentation() throws Exception { | |
/* | |
* <simpleType name="emptyAppinfoDocumentation"> <annotation> <documentation/> <appinfo/> | |
* </annotation> <restriction base="string"> <length value="1"/> </restriction> </simpleType> | |
*/ | |
QName typeQName = new QName("http://soapinterop.org/types", "emptyAppinfoDocumentation"); | |
InputStream is = new FileInputStream(Resources.asURI("annotation.xsd")); | |
XmlSchemaCollection schemaCol = new XmlSchemaCollection(); | |
schemaCol.read(new StreamSource(is)); | |
XmlSchemaSimpleType simpleType = (XmlSchemaSimpleType)schemaCol.getTypeByQName(typeQName); | |
assertNotNull(simpleType); | |
XmlSchemaAnnotation xsa = simpleType.getAnnotation(); | |
assertNotNull(xsa); | |
List<XmlSchemaAnnotationItem> col = xsa.getItems(); | |
assertEquals(0, col.size()); | |
} | |
/** | |
* This method will test for when the documentation and appinfo elements contain all the information. | |
* | |
* @throws Exception Any exception encountered | |
*/ | |
@Test | |
public void testFullDocumentationAppinfo() throws Exception { | |
/* | |
* <simpleType name="annotationTest"> <annotation> <documentation source="http://test/source/doc" | |
* xml:lang="en">testing987</documentation> <appinfo | |
* source="http://test/source/appinfo">testing123</appinfo> </annotation> <restriction base="string"> | |
* <length value="1"/> </restriction> </simpleType> | |
*/ | |
QName typeQName = new QName("http://soapinterop.org/types", "annotationTest"); | |
InputStream is = new FileInputStream(Resources.asURI("annotation.xsd")); | |
XmlSchemaCollection schemaCol = new XmlSchemaCollection(); | |
schemaCol.read(new StreamSource(is)); | |
XmlSchemaSimpleType simpleType = (XmlSchemaSimpleType)schemaCol.getTypeByQName(typeQName); | |
assertNotNull(simpleType); | |
XmlSchemaAnnotation xsa = simpleType.getAnnotation(); | |
assertNotNull(xsa); | |
List<XmlSchemaAnnotationItem> col = xsa.getItems(); | |
assertEquals(2, col.size()); | |
Set<String> s = new HashSet<String>(); | |
s.add(XmlSchemaAppInfo.class.getName()); | |
s.add(XmlSchemaDocumentation.class.getName()); | |
for (int i = 0; i < col.size(); i++) { | |
XmlSchemaObject o = col.get(i); | |
if (o instanceof XmlSchemaAppInfo) { | |
assertEquals("http://test/source/appinfo", ((XmlSchemaAppInfo)o).getSource()); | |
NodeList nl = ((XmlSchemaAppInfo)o).getMarkup(); | |
for (int j = 0; j < nl.getLength(); j++) { | |
Node n = nl.item(j); | |
if (n.getNodeType() == Node.TEXT_NODE) { | |
assertEquals("testing123", n.getNodeValue()); | |
} | |
} | |
} else if (o instanceof XmlSchemaDocumentation) { | |
assertEquals("en", ((XmlSchemaDocumentation)o).getLanguage()); | |
assertEquals("http://test/source/doc", ((XmlSchemaDocumentation)o).getSource()); | |
NodeList nl = ((XmlSchemaDocumentation)o).getMarkup(); | |
for (int j = 0; j < nl.getLength(); j++) { | |
Node n = nl.item(j); | |
if (n.getNodeType() == Node.TEXT_NODE) { | |
assertEquals("testing987", n.getNodeValue()); | |
} | |
} | |
} | |
assertTrue(s.remove(o.getClass().getName())); | |
} | |
assertTrue("The set should have been empty, but instead contained: " + s + ".", s.isEmpty()); | |
} | |
/** | |
* This method will test for when an annotation is added to the Xml Schema Element. | |
* | |
* @throws Exception Any exception encountered | |
*/ | |
@Test | |
public void testXmlSchemaElementAnnotation() throws Exception { | |
/* | |
* <annotation id="schemaAnnotation"> <documentation source="http://test101/source/doc" | |
* xml:lang="en">testing101</documentation> <appinfo | |
* source="http://test101/source/appinfo">testing101</appinfo> </annotation> | |
*/ | |
InputStream is = new FileInputStream(Resources.asURI("annotation.xsd")); | |
XmlSchemaCollection schemaCol = new XmlSchemaCollection(); | |
XmlSchema schema = schemaCol.read(new StreamSource(is)); | |
XmlSchemaAnnotation xsa = schema.getAnnotation(); | |
List<XmlSchemaAnnotationItem> col = xsa.getItems(); | |
assertEquals(2, col.size()); | |
Set<String> s = new HashSet<String>(); | |
s.add(XmlSchemaAppInfo.class.getName()); | |
s.add(XmlSchemaDocumentation.class.getName()); | |
for (int i = 0; i < col.size(); i++) { | |
XmlSchemaObject o = col.get(i); | |
if (o instanceof XmlSchemaAppInfo) { | |
assertEquals("http://test101/source/appinfo", ((XmlSchemaAppInfo)o).getSource()); | |
NodeList nl = ((XmlSchemaAppInfo)o).getMarkup(); | |
for (int j = 0; j < nl.getLength(); j++) { | |
Node n = nl.item(j); | |
if (n.getNodeType() == Node.TEXT_NODE) { | |
assertEquals("testing101", n.getNodeValue()); | |
} | |
} | |
} else if (o instanceof XmlSchemaDocumentation) { | |
assertEquals("en", ((XmlSchemaDocumentation)o).getLanguage()); | |
assertEquals("http://test101/source/doc", ((XmlSchemaDocumentation)o).getSource()); | |
NodeList nl = ((XmlSchemaDocumentation)o).getMarkup(); | |
for (int j = 0; j < nl.getLength(); j++) { | |
Node n = nl.item(j); | |
if (n.getNodeType() == Node.TEXT_NODE) { | |
assertEquals("testing101", n.getNodeValue()); | |
} | |
} | |
} | |
assertTrue(s.remove(o.getClass().getName())); | |
} | |
assertTrue("The set should have been empty, but instead contained: " + s + ".", s.isEmpty()); | |
} | |
} |