/**
* 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.List;
import javax.xml.transform.stream.StreamSource;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import junit.framework.TestCase;
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;
public class AnnotationDeepTest extends TestCase {
/**
* The appinfo element has no source attribute
* but it has content.
*
* @throws Exception Any exception encountered
*/
public void testAppInfoNoSource() throws Exception {
/*
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.abc.com/validation"
xmlns="http://www.abc.com/validation"
xmlns:xsns="http://www.abc.com/validation"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
elementFormDefault="qualified">
<xs:annotation>
<xs:appinfo>
<jaxb:schemaBindings>
<jaxb:package name="com.abc.validation"/>
</jaxb:schemaBindings>
</xs:appinfo>
</xs:annotation>
<simpleType name="emptyAppinfo">
<restriction base="string">
<length value="1"/>
</restriction>
</simpleType>
</xs:schema>
*/
InputStream is = new FileInputStream(Resources.asURI("annotation-appinfo-no-source.xsd"));
XmlSchemaCollection schemaCol = new XmlSchemaCollection();
XmlSchema schema = schemaCol.read(new StreamSource(is));
XmlSchemaAnnotation annotation = schema.getAnnotation();
assertTrue("annotation is retrieved ok", null != annotation);
List<XmlSchemaAnnotationItem> items = annotation.getItems();
assertEquals("Annotation contains an appinfo and yet this fails", 1, items.size());
}
/**
* The appinfo element has a source attribute
* but the content is deep markup.
*
* @throws Exception Any exception encountered
*/
public void testAppInfoDeep() throws Exception {
/*
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.abc.com/validation"
xmlns="http://www.abc.com/validation"
xmlns:xsns="http://www.abc.com/validation"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
elementFormDefault="qualified">
<xs:annotation>
<xs:appinfo source="anything">
<jaxb:schemaBindings>
<jaxb:package name="com.abc.validation"/>
</jaxb:schemaBindings>
</xs:appinfo>
</xs:annotation>
<simpleType name="emptyAppinfo">
<restriction base="string">
<length value="1"/>
</restriction>
</simpleType>
</xs:schema>
*/
InputStream is = new FileInputStream(Resources.asURI("annotation-appinfo-deep.xsd"));
XmlSchemaCollection schemaCol = new XmlSchemaCollection();
XmlSchema schema = schemaCol.read(new StreamSource(is));
XmlSchemaAnnotation annotation = schema.getAnnotation();
assertTrue("annotation is retrieved ok", null != annotation);
List<XmlSchemaAnnotationItem> items = annotation.getItems();
assertTrue(items.get(0) instanceof XmlSchemaAppInfo);
XmlSchemaAppInfo appInfo = (XmlSchemaAppInfo) items.get(0);
NodeList markup = appInfo.getMarkup();
assertTrue("The markup exists", null != markup);
Node node = markup.item(1);
assertTrue(node instanceof Element);
Element el = (Element) node;
assertEquals("First level child is retrieved ok",
"http://java.sun.com/xml/ns/jaxb", node.getNamespaceURI());
assertEquals("First level child is retrieved ok",
"schemaBindings", node.getLocalName());
assertTrue("schemaBindings should have a child", el.getChildNodes().getLength() > 0);
NodeList l = el.getElementsByTagNameNS("http://java.sun.com/xml/ns/jaxb", "package");
assertTrue("ok this is actually working", l.getLength() > 0);
}
}