blob: 9084b9064f1d098b1546d1a2b320c050bafe056e [file] [log] [blame]
/*
* Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0,
* or the Eclipse Distribution License v. 1.0 which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
// Contributors:
// dmccann - 1.0M9 - Initial implementation
package org.eclipse.persistence.testing.sdo.model.type;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.List;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Source;
import javax.xml.transform.dom.DOMSource;
import junit.textui.TestRunner;
import org.eclipse.persistence.sdo.helper.SDOXSDHelper;
import org.eclipse.persistence.sdo.helper.SchemaResolver;
import org.eclipse.persistence.testing.sdo.SDOTestCase;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import commonj.sdo.helper.HelperContext;
import commonj.sdo.helper.XMLDocument;
import commonj.sdo.impl.HelperProvider;
public class ElementWithBuiltInTypeNameTestCases extends SDOTestCase {
private static String SCHEMA_PATH = "org/eclipse/persistence/testing/sdo/schemas/elementWithBuiltInTypeName/";
public ElementWithBuiltInTypeNameTestCases(String name) {
super(name);
}
public static void main(String[] args) throws Exception {
String[] arguments = { "-c", "org.eclipse.persistence.testing.sdo.model.type.ElementWithBuiltInTypeNameTestCases" };
TestRunner.main(arguments);
}
public void testSingleSchema() {
HelperContext hc = HelperProvider.getDefaultContext();
Element[] schemas = new Element[1];
if ((schemas[0] = getDOM(SCHEMA_PATH + "schema1.xsd")) == null) {
fail("Couldn't get document element from schema [" + SCHEMA_PATH + "schema1.xsd]");
}
try {
SDOElementResolver resolver = new SDOElementResolver(schemas);
((SDOXSDHelper) hc.getXSDHelper()).define(new DOMSource(schemas[0], SCHEMA_PATH + "schema1.xsd"), resolver);
} catch (Exception x) {
fail();
}
}
public void testSchemaWithImports() {
HelperContext hc = HelperProvider.getDefaultContext();
Element[] schemas = new Element[3];
if ((schemas[0] = getDOM(SCHEMA_PATH + "schema0.xsd")) == null) {
fail("Couldn't get document element from schema [" + SCHEMA_PATH + "schema0.xsd]");
}
if ((schemas[1] = getDOM(SCHEMA_PATH + "schema1.xsd")) == null) {
fail("Couldn't get document element from schema [" + SCHEMA_PATH + "schema1.xsd]");
}
if ((schemas[2] = getDOM(SCHEMA_PATH + "schema2.xsd")) == null) {
fail("Couldn't get document element from schema [" + SCHEMA_PATH + "schema2.xsd]");
}
SDOElementResolver resolver = new SDOElementResolver(schemas);
try {
((SDOXSDHelper) hc.getXSDHelper()).define(new DOMSource(schemas[0], SCHEMA_PATH + "schema0.xsd"), resolver);
} catch (Exception x) {
fail("An exception occurred defining types for schema [" + SCHEMA_PATH + "schema0.xsd]");
}
try {
((SDOXSDHelper) hc.getXSDHelper()).define(new DOMSource(schemas[1], SCHEMA_PATH + "schema1.xsd"), resolver);
} catch (Exception x) {
fail("An exception occurred defining types for schema [" + SCHEMA_PATH + "schema1.xsd]");
}
try {
((SDOXSDHelper) hc.getXSDHelper()).define(new DOMSource(schemas[2], SCHEMA_PATH + "schema2.xsd"), resolver);
} catch (Exception x) {
fail("An exception occurred defining types for schema [" + SCHEMA_PATH + "schema2.xsd]");
}
String testMsg1 = " <tns:RetUri xmlns:tns=\"http://tempuri.org/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n" + " <tns:inUri>http://test/wsip</tns:inUri>\n" + " </tns:RetUri>";
try {
XMLDocument doc = hc.getXMLHelper().load(testMsg1);
if (!doc.getRootElementName().equals("RetUri")) {
fail("Loaded document root element name [" + doc.getRootElementName() + "] is incorrect. Expected [RetUri]");
}
if (!doc.getRootElementURI().equals("http://tempuri.org/")) {
fail("Loaded document root element uri [" + doc.getRootElementURI() + "] is incorrect. Expected [http://tempuri.org/]");
}
} catch (Exception x) {
fail("An exception occurred performing a load operation for [" + testMsg1 + "]");
}
}
private Element getDOM(String fileLoc) {
try {
FileInputStream is = new FileInputStream(fileLoc);
DocumentBuilderFactory fac = DocumentBuilderFactory.newInstance();
fac.setNamespaceAware(true);
Document doc = fac.newDocumentBuilder().parse(is);
return doc.getDocumentElement();
} catch (Exception e) {
}
return null;
}
//================================================================================
static class SDOElementResolver implements SchemaResolver {
Element[] schemas = null;
SDOElementResolver(Element[] schemas) {
this.schemas = schemas;
}
@Override
public Source resolveSchema(Source sourceXSD, String namespace, String schemaLocation) {
if (namespace.equals("http://tempuri.org/Imports")) {
return new DOMSource(schemas[0], SCHEMA_PATH + "schema0.xsd");
}
if (namespace.equals("http://www.example.com/")) {
return new DOMSource(schemas[2], SCHEMA_PATH + "schema1.xsd");
}
if (namespace.equals("http://tempuri.org/")) {
return new DOMSource(schemas[1], SCHEMA_PATH + "schema2.xsd");
}
return null;
}
@Override
public InputSource resolveEntity(String arg0, String arg1) throws SAXException, IOException {
return null;
}
}
}