1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License. You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing,
13 * software distributed under the License is distributed on an
14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 * KIND, either express or implied. See the License for the
16 * specific language governing permissions and limitations
17 * under the License.
18 */
19 package tests;
20
21 import junit.framework.TestCase;
22 import org.apache.ws.commons.schema.*;
23 import org.w3c.dom.Element;
24 import org.w3c.dom.Node;
25 import org.w3c.dom.NodeList;
26
27 import javax.xml.transform.stream.StreamSource;
28 import java.io.FileInputStream;
29 import java.io.InputStream;
30
31 public class AnnotationDeepTest extends TestCase {
32
33 /**
34 * The appinfo element has no source attribute
35 * but it has content.
36 *
37 * @throws Exception Any exception encountered
38 */
39 public void testAppInfoNoSource() throws Exception {
40
41 /*
42 <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
43 targetNamespace="http://www.abc.com/validation"
44 xmlns="http://www.abc.com/validation"
45 xmlns:xsns="http://www.abc.com/validation"
46 xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
47 elementFormDefault="qualified">
48 <xs:annotation>
49 <xs:appinfo>
50 <jaxb:schemaBindings>
51 <jaxb:package name="com.abc.validation"/>
52 </jaxb:schemaBindings>
53 </xs:appinfo>
54 </xs:annotation>
55
56 <simpleType name="emptyAppinfo">
57 <restriction base="string">
58 <length value="1"/>
59 </restriction>
60 </simpleType>
61
62 </xs:schema>
63 */
64
65 InputStream is = new FileInputStream(Resources.asURI("annotation-appinfo-no-source.xsd"));
66 XmlSchemaCollection schemaCol = new XmlSchemaCollection();
67 XmlSchema schema = schemaCol.read(new StreamSource(is), null);
68
69 XmlSchemaAnnotation annotation = schema.getAnnotation();
70 assertTrue("annotation is retrieved ok", null != annotation);
71 XmlSchemaObjectCollection items = annotation.getItems();
72 assertEquals("Annotation contains an appinfo and yet this fails", 1, items.getCount());
73
74 }
75
76 /**
77 * The appinfo element has a source attribute
78 * but the content is deep markup.
79 *
80 * @throws Exception Any exception encountered
81 */
82 public void testAppInfoDeep() throws Exception {
83
84 /*
85 <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
86 targetNamespace="http://www.abc.com/validation"
87 xmlns="http://www.abc.com/validation"
88 xmlns:xsns="http://www.abc.com/validation"
89 xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
90 elementFormDefault="qualified">
91 <xs:annotation>
92 <xs:appinfo source="anything">
93 <jaxb:schemaBindings>
94 <jaxb:package name="com.abc.validation"/>
95 </jaxb:schemaBindings>
96 </xs:appinfo>
97 </xs:annotation>
98
99 <simpleType name="emptyAppinfo">
100 <restriction base="string">
101 <length value="1"/>
102 </restriction>
103 </simpleType>
104
105 </xs:schema>
106 */
107
108 InputStream is = new FileInputStream(Resources.asURI("annotation-appinfo-deep.xsd"));
109 XmlSchemaCollection schemaCol = new XmlSchemaCollection();
110 XmlSchema schema = schemaCol.read(new StreamSource(is), null);
111
112 XmlSchemaAnnotation annotation = schema.getAnnotation();
113 assertTrue("annotation is retrieved ok", null != annotation);
114 XmlSchemaObjectCollection items = annotation.getItems();
115 assertTrue(items.getItem(0) instanceof XmlSchemaAppInfo);
116 XmlSchemaAppInfo appInfo = (XmlSchemaAppInfo) items.getItem(0);
117 NodeList markup = appInfo.getMarkup();
118 assertTrue("The markup exists", null != markup);
119 Node node = markup.item(1);
120 assertTrue(node instanceof Element);
121 Element el = (Element) node;
122 assertEquals("First level child is retrieved ok",
123 "http://java.sun.com/xml/ns/jaxb", node.getNamespaceURI());
124 assertEquals("First level child is retrieved ok",
125 "schemaBindings", node.getLocalName());
126 assertTrue("schemaBindings should have a child", el.getChildNodes().getLength() > 0);
127 NodeList l = el.getElementsByTagNameNS("http://java.sun.com/xml/ns/jaxb", "package");
128 assertTrue("ok this is actually working",l.getLength() > 0);
129
130 }
131 }