/**
*
* 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 org.apache.openejb.server.axis.assembler;
import junit.framework.TestCase;
import org.apache.ws.commons.schema.XmlSchemaCollection;
import javax.xml.namespace.QName;
import java.io.InputStream;
import java.io.InputStreamReader;
public class SchemaInfoBuilderTest extends TestCase {
public void testSimpleType() throws Exception {
XmlSchemaInfo expected = new XmlSchemaInfo();
{
QName xmlTypeKey = new QName("X", "type");
XmlTypeInfo xmlType = new XmlTypeInfo();
xmlType.qname = new QName("X", "type");
xmlType.anonymous = false;
xmlType.simpleBaseType = new QName("http://www.w3.org/2001/XMLSchema", "integer");
xmlType.enumType = false;
xmlType.listType = false;
xmlType.arrayComponentType = null;
expected.types.put(xmlTypeKey, xmlType);
}
XmlSchemaInfo schemaInfo = loadSchemaInfo("schema/SimpleType.xsd");
TypeInfoTestUtil.assertEqual(expected, schemaInfo, true);
}
public void testNestedElements() throws Exception {
XmlSchemaInfo expected = new XmlSchemaInfo();
{
QName xmlTypeKey = new QName("X", "type");
XmlTypeInfo xmlType = new XmlTypeInfo();
xmlType.qname = new QName("X", "type");
xmlType.anonymous = false;
xmlType.simpleBaseType = null;
xmlType.enumType = false;
xmlType.listType = false;
xmlType.arrayComponentType = null;
xmlType.attributes.put("stringAttribute", new QName("http://www.w3.org/2001/XMLSchema", "string"));
xmlType.attributes.put("intAttribute", new QName("http://www.w3.org/2001/XMLSchema", "integer"));
{
QName key = new QName("X", "string");
XmlElementInfo xmlElement = new XmlElementInfo();
xmlElement.qname = new QName("X", "string");
xmlElement.xmlType = new QName("http://www.w3.org/2001/XMLSchema", "string");
xmlElement.minOccurs = 1;
xmlElement.maxOccurs = 1;
xmlElement.nillable = false;
xmlType.elements.put(key, xmlElement);
}
{
QName key = new QName("X", "int");
XmlElementInfo xmlElement = new XmlElementInfo();
xmlElement.qname = new QName("X", "int");
xmlElement.xmlType = new QName("http://www.w3.org/2001/XMLSchema", "integer");
xmlElement.minOccurs = 1;
xmlElement.maxOccurs = 1;
xmlElement.nillable = false;
xmlType.elements.put(key, xmlElement);
}
expected.types.put(xmlTypeKey, xmlType);
}
XmlSchemaInfo schemaInfo = loadSchemaInfo("schema/ComplexSequenceType.xsd");
TypeInfoTestUtil.assertEqual(expected, schemaInfo, true);
schemaInfo = loadSchemaInfo("schema/ComplexAllType.xsd");
TypeInfoTestUtil.assertEqual(expected, schemaInfo, true);
}
public void testSoapArrayByAttribute() throws Exception {
XmlSchemaInfo expected = new XmlSchemaInfo();
{
QName xmlTypeKey = new QName("X", "array");
XmlTypeInfo xmlType = new XmlTypeInfo();
xmlType.qname = new QName("X", "array");
xmlType.anonymous = false;
xmlType.simpleBaseType = null;
xmlType.enumType = false;
xmlType.listType = false;
xmlType.arrayComponentType = new QName("http://www.w3.org/2001/XMLSchema", "integer[]");
expected.types.put(xmlTypeKey, xmlType);
}
XmlSchemaInfo schemaInfo = loadSchemaInfo("schema/SoapArrayByAttribute.xsd");
TypeInfoTestUtil.assertEqual(expected, schemaInfo, true);
}
public void testSoapArrayByRestriction() throws Exception {
XmlSchemaInfo expected = new XmlSchemaInfo();
{
QName xmlTypeKey = new QName("X", "array");
XmlTypeInfo xmlType = new XmlTypeInfo();
xmlType.qname = new QName("X", "array");
xmlType.anonymous = false;
xmlType.simpleBaseType = null;
xmlType.enumType = false;
xmlType.listType = false;
xmlType.arrayComponentType = new QName("http://www.w3.org/2001/XMLSchema", "integer");
expected.types.put(xmlTypeKey, xmlType);
}
XmlSchemaInfo schemaInfo = loadSchemaInfo("schema/SoapArrayByRestriction.xsd");
TypeInfoTestUtil.assertEqual(expected, schemaInfo, true);
}
public void testSimpleElement() throws Exception {
XmlSchemaInfo expected = new XmlSchemaInfo();
{
QName xmlElementKey = new QName("X", "element");
XmlElementInfo xmlElement = new XmlElementInfo();
xmlElement.qname = new QName("X", "element");
xmlElement.xmlType = new QName("X", ">element");
xmlElement.minOccurs = 1;
xmlElement.maxOccurs = 1;
xmlElement.nillable = false;
expected.elements.put(xmlElementKey, xmlElement);
}
{
QName xmlTypeKey = new QName("X", ">element");
XmlTypeInfo xmlType = new XmlTypeInfo();
xmlType.qname = new QName("X", ">element");
xmlType.anonymous = true;
xmlType.simpleBaseType = new QName("http://www.w3.org/2001/XMLSchema", "integer");
xmlType.enumType = false;
xmlType.listType = false;
xmlType.arrayComponentType = null;
expected.types.put(xmlTypeKey, xmlType);
}
XmlSchemaInfo schemaInfo = loadSchemaInfo("schema/SimpleElement.xsd");
TypeInfoTestUtil.assertEqual(expected, schemaInfo, true);
}
public void testComplexElement() throws Exception {
XmlSchemaInfo expected = new XmlSchemaInfo();
{
QName xmlElementKey = new QName("X", "element");
XmlElementInfo xmlElement = new XmlElementInfo();
xmlElement.qname = new QName("X", "element");
xmlElement.xmlType = new QName("X", ">element");
xmlElement.minOccurs = 1;
xmlElement.maxOccurs = 1;
xmlElement.nillable = false;
expected.elements.put(xmlElementKey, xmlElement);
}
{
QName xmlTypeKey = new QName("X", ">element");
XmlTypeInfo xmlType = new XmlTypeInfo();
xmlType.qname = new QName("X", ">element");
xmlType.anonymous = true;
xmlType.simpleBaseType = null;
xmlType.enumType = false;
xmlType.listType = false;
xmlType.arrayComponentType = null;
xmlType.attributes.put("stringAttribute", new QName("http://www.w3.org/2001/XMLSchema", "string"));
xmlType.attributes.put("intAttribute", new QName("http://www.w3.org/2001/XMLSchema", "integer"));
{
QName key = new QName("X", "string");
XmlElementInfo xmlElement = new XmlElementInfo();
xmlElement.qname = new QName("X", "string");
xmlElement.xmlType = new QName("http://www.w3.org/2001/XMLSchema", "string");
xmlElement.minOccurs = 1;
xmlElement.maxOccurs = 1;
xmlElement.nillable = false;
xmlType.elements.put(key, xmlElement);
}
{
QName key = new QName("X", "int");
XmlElementInfo xmlElement = new XmlElementInfo();
xmlElement.qname = new QName("X", "int");
xmlElement.xmlType = new QName("http://www.w3.org/2001/XMLSchema", "integer");
xmlElement.minOccurs = 1;
xmlElement.maxOccurs = 1;
xmlElement.nillable = false;
xmlType.elements.put(key, xmlElement);
}
expected.types.put(xmlTypeKey, xmlType);
}
XmlSchemaInfo schemaInfo = loadSchemaInfo("schema/ComplexSequenceElement.xsd");
TypeInfoTestUtil.assertEqual(expected, schemaInfo, true);
schemaInfo = loadSchemaInfo("schema/ComplexAllElement.xsd");
TypeInfoTestUtil.assertEqual(expected, schemaInfo, true);
}
public void testJaxRpcSpecExample() throws Exception {
XmlSchemaInfo expected = new XmlSchemaInfo();
// <complexType name="root">
// <sequence>
// <element name="data" type="string"/>
// </sequence>
// </complexType>
{
QName xmlTypeKey = new QName("X", "root");
XmlTypeInfo xmlType = new XmlTypeInfo();
xmlType.qname = new QName("X", "root");
xmlType.anonymous = false;
xmlType.simpleBaseType = null;
xmlType.enumType = false;
xmlType.listType = false;
xmlType.arrayComponentType = null;
{
QName xmlElementKey = new QName("X", "data");
XmlElementInfo xmlElement = new XmlElementInfo();
xmlElement.qname = new QName("X", "data");
xmlElement.xmlType = new QName("http://www.w3.org/2001/XMLSchema", "string");
xmlElement.minOccurs = 1;
xmlElement.maxOccurs = 1;
xmlElement.nillable = false;
xmlType.elements.put(xmlElementKey, xmlElement);
}
expected.types.put(xmlTypeKey, xmlType);
}
// <element name="root">
// <complexType>
// <sequence>
// <element name="inside" maxOccurs="10">
// <complexType>
// <sequence>
// <element name="data2" type="string"/>
// </sequence>
// </complexType>
// </element>
// <element ref="tns:someOtherElement" maxOccurs="20"/>
// </sequence>
// </complexType>
// </element>
{
QName xmlElementKey = new QName("X", "root");
XmlElementInfo xmlElement = new XmlElementInfo();
xmlElement.qname = new QName("X", "root");
xmlElement.xmlType = new QName("X", ">root");
xmlElement.minOccurs = 1;
xmlElement.maxOccurs = 1;
xmlElement.nillable = false;
expected.elements.put(xmlElementKey, xmlElement);
}
{
QName xmlTypeKey = new QName("X", ">root");
XmlTypeInfo xmlType = new XmlTypeInfo();
xmlType.qname = new QName("X", ">root");
xmlType.anonymous = true;
xmlType.simpleBaseType = null;
xmlType.enumType = false;
xmlType.listType = false;
xmlType.arrayComponentType = null;
{
QName xmlElementKey = new QName("X", "inside");
XmlElementInfo xmlElement = new XmlElementInfo();
xmlElement.qname = new QName("X", "inside");
xmlElement.xmlType = new QName("X", ">>root>inside");
xmlElement.minOccurs = 1;
xmlElement.maxOccurs = 10;
xmlElement.nillable = false;
xmlType.elements.put(xmlElementKey, xmlElement);
}
{
QName xmlElementKey = new QName("X", "someOtherElement");
XmlElementInfo xmlElement = new XmlElementInfo();
xmlElement.qname = new QName("X", "someOtherElement");
xmlElement.xmlType = new QName("http://www.w3.org/2001/XMLSchema", "int");
xmlElement.minOccurs = 1;
xmlElement.maxOccurs = 20;
xmlElement.nillable = false;
xmlType.elements.put(xmlElementKey, xmlElement);
}
expected.types.put(xmlTypeKey, xmlType);
}
{
QName xmlTypeKey = new QName("X", ">>root>inside");
XmlTypeInfo xmlType = new XmlTypeInfo();
xmlType.qname = new QName("X", ">>root>inside");
xmlType.anonymous = true;
xmlType.simpleBaseType = null;
xmlType.enumType = false;
xmlType.listType = false;
xmlType.arrayComponentType = null;
{
QName xmlElementKey = new QName("X", "data2");
XmlElementInfo xmlElement = new XmlElementInfo();
xmlElement.qname = new QName("X", "data2");
xmlElement.xmlType = new QName("http://www.w3.org/2001/XMLSchema", "string");
xmlElement.minOccurs = 1;
xmlElement.maxOccurs = 1;
xmlElement.nillable = false;
xmlType.elements.put(xmlElementKey, xmlElement);
}
expected.types.put(xmlTypeKey, xmlType);
}
// <element name="someOtherElement" type="xsd:int"/>
{
QName xmlElementKey = new QName("X", "someOtherElement");
XmlElementInfo xmlElement = new XmlElementInfo();
xmlElement.qname = new QName("X", "someOtherElement");
xmlElement.xmlType = new QName("http://www.w3.org/2001/XMLSchema", "int");
xmlElement.minOccurs = 1;
xmlElement.maxOccurs = 1;
xmlElement.nillable = false;
expected.elements.put(xmlElementKey, xmlElement);
}
XmlSchemaInfo schemaInfo = loadSchemaInfo("schema/JaxRpcSpecExample.xsd");
TypeInfoTestUtil.assertEqual(expected, schemaInfo, true);
}
private XmlSchemaInfo loadSchemaInfo(String fileName) throws Exception {
InputStream in = getClass().getClassLoader().getResourceAsStream(fileName);
XmlSchemaCollection xmlSchemaCollection = new XmlSchemaCollection();
xmlSchemaCollection.read(new InputStreamReader(in), null);
CommonsSchemaInfoBuilder schemaInfoBuilder = new CommonsSchemaInfoBuilder(xmlSchemaCollection);
XmlSchemaInfo schemaInfo = schemaInfoBuilder.createSchemaInfo();
return schemaInfo;
}
}