Author: veithen Date: Mon Dec 22 10:06:04 2008 New Revision: 728734 URL: http://svn.apache.org/viewvc?rev=728734&view=rev Log: WSCOMMONS-420: Added test to validate integration between DOOM and javax.xml.validation. Implemented some more DOM methods to support this (with Xerces 2.9.1).
Added: webservices/commons/trunk/modules/axiom/modules/axiom-integration/src/test/java/org/apache/axiom/om/impl/dom/jaxp/ValidatorTest.java (with props) webservices/commons/trunk/modules/axiom/modules/axiom-integration/src/test/resources/org/apache/axiom/om/impl/dom/jaxp/ipo.xsd (with props) webservices/commons/trunk/modules/axiom/modules/axiom-integration/src/test/resources/org/apache/axiom/om/impl/dom/jaxp/ipo_1.xml (with props) Modified: webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/DOMImplementationImpl.java webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/DocumentImpl.java webservices/commons/trunk/modules/axiom/modules/axiom-integration/pom.xml Modified: webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/DOMImplementationImpl.java URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/DOMImplementationImpl.java?rev=728734&r1=728733&r2=728734&view=diff ============================================================================== --- webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/DOMImplementationImpl.java (original) +++ webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/DOMImplementationImpl.java Mon Dec 22 10:06:04 2008 @@ -27,9 +27,10 @@ public class DOMImplementationImpl implements DOMImplementation { - public boolean hasFeature(String arg0, String arg1) { - // TODO - throw new UnsupportedOperationException("TODO"); + public boolean hasFeature(String feature, String version) { + boolean anyVersion = version == null || version.length() == 0; + return (feature.equalsIgnoreCase("Core") || feature.equalsIgnoreCase("XML")) + && (anyVersion || version.equals("1.0") || version.equals("2.0")); } public Document createDocument(String namespaceURI, String qualifiedName, Modified: webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/DocumentImpl.java URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/DocumentImpl.java?rev=728734&r1=728733&r2=728734&view=diff ============================================================================== --- webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/DocumentImpl.java (original) +++ webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/DocumentImpl.java Mon Dec 22 10:06:04 2008 @@ -275,8 +275,7 @@ } public DOMImplementation getImplementation() { - // TODO - throw new UnsupportedOperationException("TODO"); + return new DOMImplementationImpl(); } public Node importNode(Node importedNode, boolean deep) throws DOMException { Modified: webservices/commons/trunk/modules/axiom/modules/axiom-integration/pom.xml URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-integration/pom.xml?rev=728734&r1=728733&r2=728734&view=diff ============================================================================== --- webservices/commons/trunk/modules/axiom/modules/axiom-integration/pom.xml (original) +++ webservices/commons/trunk/modules/axiom/modules/axiom-integration/pom.xml Mon Dec 22 10:06:04 2008 @@ -68,6 +68,11 @@ <version>2.1.9</version> </dependency> <dependency> + <groupId>xerces</groupId> + <artifactId>xercesImpl</artifactId> + <version>2.9.1</version> + </dependency> + <dependency> <groupId>xalan</groupId> <artifactId>xalan</artifactId> <version>2.7.1</version> Added: webservices/commons/trunk/modules/axiom/modules/axiom-integration/src/test/java/org/apache/axiom/om/impl/dom/jaxp/ValidatorTest.java URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-integration/src/test/java/org/apache/axiom/om/impl/dom/jaxp/ValidatorTest.java?rev=728734&view=auto ============================================================================== --- webservices/commons/trunk/modules/axiom/modules/axiom-integration/src/test/java/org/apache/axiom/om/impl/dom/jaxp/ValidatorTest.java (added) +++ webservices/commons/trunk/modules/axiom/modules/axiom-integration/src/test/java/org/apache/axiom/om/impl/dom/jaxp/ValidatorTest.java Mon Dec 22 10:06:04 2008 @@ -0,0 +1,44 @@ +/* + * 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.axiom.om.impl.dom.jaxp; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.validation.Schema; +import javax.xml.validation.SchemaFactory; +import javax.xml.validation.Validator; + +import org.apache.xerces.jaxp.validation.XMLSchemaFactory; + +import junit.framework.TestCase; + +public class ValidatorTest extends TestCase { + public void test() throws Exception { + SchemaFactory factory = new XMLSchemaFactory(); + DocumentBuilderFactory dbf = new DOOMDocumentBuilderFactory(); + DocumentBuilder builder = dbf.newDocumentBuilder(); + Schema schema = factory.newSchema(new DOMSource( + builder.parse(ValidatorTest.class.getResourceAsStream("ipo.xsd")))); + Validator validator = schema.newValidator(); + validator.validate(new DOMSource( + builder.parse(ValidatorTest.class.getResourceAsStream("ipo_1.xml")))); + } +} Propchange: webservices/commons/trunk/modules/axiom/modules/axiom-integration/src/test/java/org/apache/axiom/om/impl/dom/jaxp/ValidatorTest.java ------------------------------------------------------------------------------ svn:eol-style = native Added: webservices/commons/trunk/modules/axiom/modules/axiom-integration/src/test/resources/org/apache/axiom/om/impl/dom/jaxp/ipo.xsd URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-integration/src/test/resources/org/apache/axiom/om/impl/dom/jaxp/ipo.xsd?rev=728734&view=auto ============================================================================== --- webservices/commons/trunk/modules/axiom/modules/axiom-integration/src/test/resources/org/apache/axiom/om/impl/dom/jaxp/ipo.xsd (added) +++ webservices/commons/trunk/modules/axiom/modules/axiom-integration/src/test/resources/org/apache/axiom/om/impl/dom/jaxp/ipo.xsd Mon Dec 22 10:06:04 2008 @@ -0,0 +1,126 @@ +<xsd:schema targetNamespace="http://www.example.com/IPO" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:ipo="http://www.example.com/IPO"> + + <xsd:element name="purchaseOrder" type="ipo:PurchaseOrderType"/> + + <xsd:element name="comment" type="xsd:string"/> + <xsd:element name="shipComment" type="xsd:string" + substitutionGroup="ipo:comment"/> + <xsd:element name="customerComment" type="xsd:string" + substitutionGroup="ipo:comment"/> + + <xsd:complexType name="PurchaseOrderType"> + <xsd:sequence> + <xsd:choice> + <xsd:group ref="ipo:shipAndBill"/> + <xsd:element name="singleAddress" type="ipo:AddressType"/> + </xsd:choice> + <xsd:element ref="ipo:comment" minOccurs="0"/> + <xsd:element name="items" type="ipo:ItemsType"/> + </xsd:sequence> + <xsd:attribute name="orderDate" type="xsd:date"/> + </xsd:complexType> + + <xsd:group name="shipAndBill"> + <xsd:sequence> + <xsd:element name="shipTo" type="ipo:AddressType"/> + <xsd:element name="billTo" type="ipo:AddressType"/> + </xsd:sequence> + </xsd:group> + + + <xsd:complexType name="AddressType"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="street" type="xsd:string"/> + <xsd:element name="city" type="xsd:string"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="USAddress"> + <xsd:complexContent> + <xsd:extension base="ipo:AddressType"> + <xsd:sequence> + <xsd:element name="state" type="ipo:USState"/> + <xsd:element name="zip" type="xsd:positiveInteger"/> + </xsd:sequence> + </xsd:extension> + </xsd:complexContent> + </xsd:complexType> + + <xsd:complexType name="UKAddress"> + <xsd:complexContent> + <xsd:extension base="ipo:AddressType"> + <xsd:sequence> + <xsd:element name="postcode" type="ipo:UKPostcode"/> + </xsd:sequence> + <xsd:attribute name="exportCode" type="xsd:positiveInteger" fixed="1"/> + </xsd:extension> + </xsd:complexContent> + </xsd:complexType> + + <!-- other Address derivations for more countries --> + <xsd:simpleType name="USState"> + <xsd:restriction base="xsd:string"> + <xsd:enumeration value="AK"/> + <xsd:enumeration value="AL"/> + <xsd:enumeration value="AR"/> + <xsd:enumeration value="CA"/> + <!-- and so on ... --> + <xsd:enumeration value="PA"/> + </xsd:restriction> + </xsd:simpleType> + + <!-- simple type definition for UKPostcode --> + <xsd:simpleType name="UKPostcode"> + <xsd:restriction base="xsd:string"> + <xsd:pattern value="[A-Z]{2}\d\s\d[A-Z]{2}"/> + </xsd:restriction> + </xsd:simpleType> + +<xsd:complexType name="ItemsType" mixed="true"> + <xsd:sequence> + <xsd:element name="item" minOccurs="0" maxOccurs="unbounded"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="productName" type="xsd:string"/> + <xsd:element name="quantity"> + <xsd:simpleType> + <xsd:restriction base="xsd:positiveInteger"> + <xsd:maxExclusive value="100"/> + </xsd:restriction> + </xsd:simpleType> + </xsd:element> + <xsd:element name="USPrice" type="xsd:decimal"/> + <xsd:element ref="ipo:comment" minOccurs="0" maxOccurs="2"/> + <xsd:element name="shipDate" type="xsd:date" minOccurs="0"/> + </xsd:sequence> + <!-- attributeGroup replaces individual declarations --> + <xsd:attributeGroup ref="ipo:ItemDelivery"/> + </xsd:complexType> + </xsd:element> + </xsd:sequence> +</xsd:complexType> + +<xsd:attributeGroup name="ItemDelivery"> + <xsd:attribute name="partNum" type="ipo:SKU" use="required"/> + <xsd:attribute name="weightKg" type="xsd:decimal"/> + <xsd:attribute name="shipBy"> + <xsd:simpleType> + <xsd:restriction base="xsd:string"> + <xsd:enumeration value="air"/> + <xsd:enumeration value="land"/> + <xsd:enumeration value="any"/> + </xsd:restriction> + </xsd:simpleType> + </xsd:attribute> +</xsd:attributeGroup> + + <xsd:simpleType name="SKU"> + <xsd:restriction base="xsd:string"> + <xsd:pattern value="\d{3}-[A-Z]{2}"/> + </xsd:restriction> + </xsd:simpleType> + +</xsd:schema> \ No newline at end of file Propchange: webservices/commons/trunk/modules/axiom/modules/axiom-integration/src/test/resources/org/apache/axiom/om/impl/dom/jaxp/ipo.xsd ------------------------------------------------------------------------------ svn:eol-style = native Added: webservices/commons/trunk/modules/axiom/modules/axiom-integration/src/test/resources/org/apache/axiom/om/impl/dom/jaxp/ipo_1.xml URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-integration/src/test/resources/org/apache/axiom/om/impl/dom/jaxp/ipo_1.xml?rev=728734&view=auto ============================================================================== --- webservices/commons/trunk/modules/axiom/modules/axiom-integration/src/test/resources/org/apache/axiom/om/impl/dom/jaxp/ipo_1.xml (added) +++ webservices/commons/trunk/modules/axiom/modules/axiom-integration/src/test/resources/org/apache/axiom/om/impl/dom/jaxp/ipo_1.xml Mon Dec 22 10:06:04 2008 @@ -0,0 +1,34 @@ +<?xml version='1.0' encoding='UTF-8'?> +<ipo:purchaseOrder xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ipo="http://www.example.com/IPO" orderDate="2002-10-20" xsi:schemaLocation="http://www.example.com/IPO ipo.xsd"> + <shipTo xsi:type="ipo:USAddress"> + <name>Alice Smith</name> + <street>123 Maple Street</street> + <city>Mill Valley</city> + <state>AL</state> + <zip>90952</zip> + </shipTo> + <billTo xsi:type="ipo:USAddress"> + <name>Robert Smith</name> + <street>8 Oak Avenue</street> + <city>Old Town</city> + <state>AK</state> + <zip>95800</zip> + </billTo> + <ipo:comment>Hurry, my sister loves Boeing!</ipo:comment> + <items> + <item partNum="777-BA" weightKg="4.5" shipBy="land"> + <productName>777 Model</productName> + <quantity>1</quantity> + <USPrice>99.95</USPrice> + <ipo:shipComment> Use gold wrap if possible </ipo:shipComment> + <ipo:customerComment> Want this for the holidays! </ipo:customerComment> + <shipDate>1999-12-05</shipDate> + </item> + <item partNum="833-AA"> + <productName>833 Model</productName> + <quantity>2</quantity> + <USPrice>199.95</USPrice> + <shipDate>2000-02-28</shipDate> + </item> + </items> +</ipo:purchaseOrder> Propchange: webservices/commons/trunk/modules/axiom/modules/axiom-integration/src/test/resources/org/apache/axiom/om/impl/dom/jaxp/ipo_1.xml ------------------------------------------------------------------------------ svn:eol-style = native