/**
*
* Copyright 2004 The Apache Software Foundation
*
* Licensed 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.geronimo.schema;
import java.util.ArrayList;
import java.util.List;
import java.net.URL;
import javax.xml.namespace.QName;
import junit.framework.TestCase;
import org.apache.xmlbeans.XmlCursor;
import org.apache.xmlbeans.XmlObject;
import org.apache.xmlbeans.XmlException;
import org.apache.geronimo.xbeans.j2ee.EjbJarType;
/**
* ejb 1.1 dtd appears to be a subset of ejb 2.0 dtd so the same xsl should
* work for both.
*
* @version $Rev: 413780 $ $Date: 2006-06-13 03:20:35 +0200 (Tue, 13 Jun 2006) $
*/
public class SchemaConversionUtilsTest extends TestCase {
private ClassLoader classLoader = this.getClass().getClassLoader();
//comment on validity of j2ee 1.4 schemas: validation doesn't work...
// From: "Radu Preotiuc-Pietro" <radup@bea.com>
// Date: Tue Jun 15, 2004 3:37:50 PM US/Pacific
// To: <xmlbeans-user@xml.apache.org>
// Subject: RE: Problem with validate -- xsb schema file missing/wrong name
// Reply-To: xmlbeans-user@xml.apache.org
//
// Unfortunately, there is an issue in XmlBeans v1 having to do with duplicate id constraints definitions.
// XmlBeans v2 does not have this issue.
// Also, these ejb Schemas are techically incorrect because they violate the id constraint uniqueness rule (at least when processed together, you could try and compile each one separately)
// So, there are a couple of options:
// 1. you hand-edit the schemas to rename those problematic id constraints
// 2. you upgrade to v2
// Well, there is a third alternative, which is a fix integrated in XmlBeans v1, may or may not be feasible
//
// Radu
//I've taken option (1) and fixed the schemas
//The schemas have been fixed by sun, we can use the official schemas.
public void testApplicationClient13ToApplicationClient14Transform() throws Exception {
URL srcXml = classLoader.getResource("j2ee_1_3dtd/application-client-13.xml");
URL expectedOutputXml = classLoader.getResource("j2ee_1_3dtd/application-client-14.xml");
XmlObject xmlObject = XmlObject.Factory.parse(srcXml);
XmlObject expected = XmlObject.Factory.parse(expectedOutputXml);
SchemaConversionUtils.validateDD(expected);
xmlObject = SchemaConversionUtils.convertToApplicationClientSchema(xmlObject);
// System.out.println(xmlObject.toString());
// System.out.println(expected.toString());
List problems = new ArrayList();
boolean ok = compareXmlObjects(xmlObject, expected, problems);
assertTrue("Differences: " + problems, ok);
//make sure trying to convert twice has no bad effects
XmlCursor cursor2 = xmlObject.newCursor();
try {
String schemaLocationURL = "http://java.sun.com/xml/ns/j2ee/application_1_4.xsd";
String version = "1.4";
assertFalse(SchemaConversionUtils.convertToSchema(cursor2, SchemaConversionUtils.J2EE_NAMESPACE, schemaLocationURL, version));
} finally {
cursor2.dispose();
}
boolean ok2 = compareXmlObjects(xmlObject, expected, problems);
assertTrue("Differences after reconverting to schema: " + problems, ok2);
//do the whole transform twice...
xmlObject = SchemaConversionUtils.convertToApplicationClientSchema(xmlObject);
boolean ok3 = compareXmlObjects(xmlObject, expected, problems);
assertTrue("Differences after reconverting to application client schema: " + problems, ok3);
}
public void testApplication13ToApplication14Transform() throws Exception {
URL srcXml = classLoader.getResource("j2ee_1_3dtd/application-13.xml");
URL expectedOutputXml = classLoader.getResource("j2ee_1_3dtd/application-14.xml");
XmlObject xmlObject = XmlObject.Factory.parse(srcXml);
XmlObject expected = XmlObject.Factory.parse(expectedOutputXml);
SchemaConversionUtils.validateDD(expected);
xmlObject = SchemaConversionUtils.convertToApplicationSchema(xmlObject);
// System.out.println(xmlObject.toString());
// System.out.println(expected.toString());
List problems = new ArrayList();
boolean ok = compareXmlObjects(xmlObject, expected, problems);
assertTrue("Differences: " + problems, ok);
//make sure trying to convert twice has no bad effects
XmlCursor cursor2 = xmlObject.newCursor();
try {
String schemaLocationURL = "http://java.sun.com/xml/ns/j2ee/application_1_4.xsd";
String version = "1.4";
assertFalse(SchemaConversionUtils.convertToSchema(cursor2, SchemaConversionUtils.J2EE_NAMESPACE, schemaLocationURL, version));
} finally {
cursor2.dispose();
}
boolean ok2 = compareXmlObjects(xmlObject, expected, problems);
assertTrue("Differences after reconverting to schema: " + problems, ok2);
//do the whole transform twice...
xmlObject = SchemaConversionUtils.convertToApplicationSchema(xmlObject);
boolean ok3 = compareXmlObjects(xmlObject, expected, problems);
assertTrue("Differences after reconverting to application schema: " + problems, ok3);
}
public void testConnector10ToConnector15Transform() throws Exception {
URL srcXml = classLoader.getResource("j2ee_1_3dtd/ra-10.xml");
URL expectedOutputXml = classLoader.getResource("j2ee_1_3dtd/ra-15.xml");
XmlObject xmlObject = XmlObject.Factory.parse(srcXml);
XmlObject expected = XmlObject.Factory.parse(expectedOutputXml);
SchemaConversionUtils.validateDD(expected);
xmlObject = SchemaConversionUtils.convertToConnectorSchema(xmlObject);
// System.out.println(xmlObject.toString());
// System.out.println(expected.toString());
List problems = new ArrayList();
boolean ok = compareXmlObjects(xmlObject, expected, problems);
assertTrue("Differences: " + problems, ok);
//make sure trying to convert twice has no bad effects
XmlCursor cursor2 = xmlObject.newCursor();
try {
String schemaLocationURL = "http://java.sun.com/xml/ns/j2ee/connector_1_5.xsd";
String version = "1.4";
assertFalse(SchemaConversionUtils.convertToSchema(cursor2, SchemaConversionUtils.J2EE_NAMESPACE, schemaLocationURL, version));
} finally {
cursor2.dispose();
}
boolean ok2 = compareXmlObjects(xmlObject, expected, problems);
assertTrue("Differences after reconverting to schema: " + problems, ok2);
//do the whole transform twice...
xmlObject = SchemaConversionUtils.convertToConnectorSchema(xmlObject);
boolean ok3 = compareXmlObjects(xmlObject, expected, problems);
assertTrue("Differences after reconverting to application schema: " + problems, ok3);
}
public void testEJB11ToEJB21Transform() throws Exception {
URL srcXml = classLoader.getResource("j2ee_1_2dtd/ejb-1-11.xml");
URL expectedOutputXml = classLoader.getResource("j2ee_1_2dtd/ejb-1-21.xml");
XmlObject xmlObject = XmlObject.Factory.parse(srcXml);
XmlObject expected = XmlObject.Factory.parse(expectedOutputXml);
SchemaConversionUtils.validateDD(expected);
xmlObject = SchemaConversionUtils.convertToEJBSchema(xmlObject);
// System.out.println(xmlObject.toString());
// System.out.println(expected.toString());
List problems = new ArrayList();
boolean ok = compareXmlObjects(xmlObject, expected, problems);
assertTrue("Differences: " + problems, ok);
//make sure trying to convert twice has no bad effects
XmlCursor cursor2 = xmlObject.newCursor();
try {
String schemaLocationURL = "http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd";
String version = "2.1";
assertFalse(SchemaConversionUtils.convertToSchema(cursor2, SchemaConversionUtils.J2EE_NAMESPACE, schemaLocationURL, version));
} finally {
cursor2.dispose();
}
boolean ok2 = compareXmlObjects(xmlObject, expected, problems);
assertTrue("Differences after reconverting to schema: " + problems, ok2);
//do the whole transform twice...
xmlObject = SchemaConversionUtils.convertToEJBSchema(xmlObject);
boolean ok3 = compareXmlObjects(xmlObject, expected, problems);
assertTrue("Differences after reconverting to ejb schema: " + problems, ok3);
}
public void testEJB20ToEJB21Transform() throws Exception {
URL srcXml = classLoader.getResource("j2ee_1_3dtd/ejb-jar.xml");
URL expectedOutputXml = classLoader.getResource("j2ee_1_3dtd/ejb-jar-21.xml");
XmlObject xmlObject = XmlObject.Factory.parse(srcXml);
XmlObject expected = XmlObject.Factory.parse(expectedOutputXml);
SchemaConversionUtils.validateDD(expected);
xmlObject = SchemaConversionUtils.convertToEJBSchema(xmlObject);
// System.out.println(xmlObject.toString());
// System.out.println(expected.toString());
List problems = new ArrayList();
boolean ok = compareXmlObjects(xmlObject, expected, problems);
assertTrue("Differences: " + problems, ok);
//make sure trying to convert twice has no bad effects
XmlCursor cursor2 = xmlObject.newCursor();
try {
String schemaLocationURL = "http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd";
String version = "2.1";
assertFalse(SchemaConversionUtils.convertToSchema(cursor2, SchemaConversionUtils.J2EE_NAMESPACE, schemaLocationURL, version));
} finally {
cursor2.dispose();
}
boolean ok2 = compareXmlObjects(xmlObject, expected, problems);
assertTrue("Differences after reconverting to schema: " + problems, ok2);
//do the whole transform twice...
xmlObject = SchemaConversionUtils.convertToEJBSchema(xmlObject);
boolean ok3 = compareXmlObjects(xmlObject, expected, problems);
assertTrue("Differences after reconverting to ejb schema: " + problems, ok3);
}
public void testMDB20ToEJB21TransformBugGERONIMO_1649() throws Exception {
URL srcXml = classLoader.getResource("j2ee_1_3dtd/mdb-ejb-jar-20-GERONIMO-1649.xml");
URL expectedOutputXml = classLoader.getResource("j2ee_1_3dtd/mdb-ejb-jar-21-GERONIMO-1649.xml");
XmlObject xmlObject = XmlObject.Factory.parse(srcXml);
XmlObject expected = XmlObject.Factory.parse(expectedOutputXml);
SchemaConversionUtils.validateDD(expected);
xmlObject = SchemaConversionUtils.convertToEJBSchema(xmlObject);
// System.out.println(xmlObject.toString());
// System.out.println(expected.toString());
List problems = new ArrayList();
boolean ok = compareXmlObjects(xmlObject, expected, problems);
assertTrue("Differences: " + problems, ok);
//make sure trying to convert twice has no bad effects
XmlCursor cursor2 = xmlObject.newCursor();
try {
String schemaLocationURL = "http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd";
String version = "2.1";
assertFalse(SchemaConversionUtils.convertToSchema(cursor2, SchemaConversionUtils.J2EE_NAMESPACE, schemaLocationURL, version));
} finally {
cursor2.dispose();
}
boolean ok2 = compareXmlObjects(xmlObject, expected, problems);
assertTrue("Differences after reconverting to schema: " + problems, ok2);
//do the whole transform twice...
xmlObject = SchemaConversionUtils.convertToEJBSchema(xmlObject);
boolean ok3 = compareXmlObjects(xmlObject, expected, problems);
assertTrue("Differences after reconverting to ejb schema: " + problems, ok3);
}
public void testMDB20To21Transform() throws Exception {
URL srcXml = classLoader.getResource("j2ee_1_3dtd/mdb-ejb-jar-20.xml");
URL expectedOutputXml = classLoader.getResource("j2ee_1_3dtd/mdb-ejb-jar-21.xml");
XmlObject xmlObject = XmlObject.Factory.parse(srcXml);
XmlObject expected = XmlObject.Factory.parse(expectedOutputXml);
SchemaConversionUtils.validateDD(expected);
xmlObject = SchemaConversionUtils.convertToEJBSchema(xmlObject);
// System.out.println(xmlObject.toString());
// System.out.println(expected.toString());
List problems = new ArrayList();
boolean ok = compareXmlObjects(xmlObject, expected, problems);
assertTrue("Differences: " + problems, ok);
//make sure trying to convert twice has no bad effects
XmlCursor cursor2 = xmlObject.newCursor();
try {
String schemaLocationURL = "http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd";
String version = "2.1";
assertFalse(SchemaConversionUtils.convertToSchema(cursor2, SchemaConversionUtils.J2EE_NAMESPACE, schemaLocationURL, version));
} finally {
cursor2.dispose();
}
boolean ok2 = compareXmlObjects(xmlObject, expected, problems);
assertTrue("Differences after reconverting to schema: " + problems, ok2);
//do the whole transform twice...
xmlObject = SchemaConversionUtils.convertToEJBSchema(xmlObject);
boolean ok3 = compareXmlObjects(xmlObject, expected, problems);
assertTrue("Differences after reconverting to ejb schema: " + problems, ok3);
}
public void testOrderDescriptionGroup() throws Exception {
URL srcXml = classLoader.getResource("j2ee_1_3dtd/DescriptionGroupTestSource.xml");
URL expectedOutputXml = classLoader.getResource("j2ee_1_3dtd/DescriptionGroupTestExpected.xml");
XmlObject srcObject = XmlObject.Factory.parse(srcXml);
XmlCursor srcCursor = srcObject.newCursor();
XmlCursor moveable = srcObject.newCursor();
try {
srcCursor.toFirstChild();
srcCursor.toFirstChild();
assertTrue(srcCursor.getName().toString(), "filter".equals(srcCursor.getName().getLocalPart()));
do {
srcCursor.push();
srcCursor.toFirstChild();
SchemaConversionUtils.convertToDescriptionGroup(srcCursor, moveable);
srcCursor.pop();
} while (srcCursor.toNextSibling());
} finally {
srcCursor.dispose();
}
// System.out.println(srcObject.toString());
XmlObject expected = XmlObject.Factory.parse(expectedOutputXml);
List problems = new ArrayList();
boolean ok = compareXmlObjects(srcObject, expected, problems);
assertTrue("Differences: " + problems, ok);
}
public void testOrderJNDIEnvironmentRefsGroup() throws Exception {
URL srcXml = classLoader.getResource("j2ee_1_3dtd/JNDIEnvironmentRefsGroupTestSource.xml");
URL expectedOutputXml = classLoader.getResource("j2ee_1_3dtd/JNDIEnvironmentRefsGroupTestExpected.xml");
XmlObject srcObject = XmlObject.Factory.parse(srcXml);
XmlCursor srcCursor = srcObject.newCursor();
XmlCursor moveable = srcObject.newCursor();
try {
srcCursor.toFirstChild();
srcCursor.toFirstChild();
assertTrue(srcCursor.getName().toString(), "web-app".equals(srcCursor.getName().getLocalPart()));
do {
srcCursor.push();
srcCursor.toFirstChild();
srcCursor.toNextSibling();
srcCursor.toNextSibling();
moveable.toCursor(srcCursor);
SchemaConversionUtils.convertToJNDIEnvironmentRefsGroup(srcCursor, moveable);
srcCursor.pop();
} while (srcCursor.toNextSibling());
} finally {
srcCursor.dispose();
}
// System.out.println(srcObject.toString());
XmlObject expected = XmlObject.Factory.parse(expectedOutputXml);
List problems = new ArrayList();
boolean ok = compareXmlObjects(srcObject, expected, problems);
assertTrue("Differences: " + problems, ok);
}
public void testWeb23To24Transform() throws Exception {
URL srcXml = classLoader.getResource("j2ee_1_3dtd/web-23.xml");
URL expectedOutputXml = classLoader.getResource("j2ee_1_3dtd/web-24.xml");
XmlObject xmlObject = XmlObject.Factory.parse(srcXml);
xmlObject = SchemaConversionUtils.convertToServletSchema(xmlObject);
XmlObject expected = XmlObject.Factory.parse(expectedOutputXml);
// System.out.println(xmlObject.toString());
// System.out.println(expected.toString());
List problems = new ArrayList();
boolean ok = compareXmlObjects(xmlObject, expected, problems);
assertTrue("Differences: " + problems, ok);
xmlObject = SchemaConversionUtils.convertToServletSchema(xmlObject);
boolean ok2 = compareXmlObjects(xmlObject, expected, problems);
assertTrue("Differences: " + problems, ok2);
}
public void testWeb23To24OtherTransform() throws Exception {
URL srcXml = classLoader.getResource("j2ee_1_3dtd/web-1-23.xml");
URL expectedOutputXml = classLoader.getResource("j2ee_1_3dtd/web-1-24.xml");
XmlObject xmlObject = XmlObject.Factory.parse(srcXml);
xmlObject = SchemaConversionUtils.convertToServletSchema(xmlObject);
// System.out.println(xmlObject.toString());
XmlObject expected = XmlObject.Factory.parse(expectedOutputXml);
List problems = new ArrayList();
boolean ok = compareXmlObjects(xmlObject, expected, problems);
assertTrue("Differences: " + problems, ok);
xmlObject = SchemaConversionUtils.convertToServletSchema(xmlObject);
boolean ok2 = compareXmlObjects(xmlObject, expected, problems);
assertTrue("Differences: " + problems, ok2);
}
public void testWeb22To24Transform1() throws Exception {
URL srcXml = classLoader.getResource("j2ee_1_2dtd/web-1-22.xml");
URL expectedOutputXml = classLoader.getResource("j2ee_1_2dtd/web-1-24.xml");
XmlObject xmlObject = XmlObject.Factory.parse(srcXml);
xmlObject = SchemaConversionUtils.convertToServletSchema(xmlObject);
XmlObject expected = XmlObject.Factory.parse(expectedOutputXml);
// System.out.println(xmlObject.toString());
// System.out.println(expected.toString());
List problems = new ArrayList();
boolean ok = compareXmlObjects(xmlObject, expected, problems);
assertTrue("Differences: " + problems, ok);
xmlObject = SchemaConversionUtils.convertToServletSchema(xmlObject);
boolean ok2 = compareXmlObjects(xmlObject, expected, problems);
assertTrue("Differences: " + problems, ok2);
}
public void testWebRejectBad24() throws Exception {
URL srcXml = classLoader.getResource("j2ee_1_4schema/web-1-24.xml");
XmlObject xmlObject = XmlObject.Factory.parse(srcXml);
try {
xmlObject = SchemaConversionUtils.convertToServletSchema(xmlObject);
fail("doc src/test-data/j2ee_1_4schema/web-1-24.xml is invalid, should not have validated");
} catch (XmlException e) {
//expected
}
}
public void testParseWeb24() throws Exception {
URL srcXml = classLoader.getResource("j2ee_1_4schema/web-2-24.xml");
XmlObject xmlObject = XmlObject.Factory.parse(srcXml);
xmlObject = SchemaConversionUtils.convertToServletSchema(xmlObject);
}
public void testEJB21To21DoesNothing() throws Exception {
URL srcXml = classLoader.getResource("j2ee_1_4schema/ejb-jar.xml");
URL expectedOutputXml = classLoader.getResource("j2ee_1_4schema/ejb-jar.xml");
XmlObject xmlObject = XmlObject.Factory.parse(srcXml);
xmlObject = SchemaConversionUtils.convertToEJBSchema(xmlObject);
XmlObject expected = XmlObject.Factory.parse(expectedOutputXml);
List problems = new ArrayList();
boolean ok = compareXmlObjects(xmlObject, expected, problems);
assertTrue("Differences: " + problems, ok);
}
public void testGeronimoNamingNamespaceChange() throws Exception {
URL srcXml = classLoader.getResource("geronimo/ejb-naming-pre.xml");
URL expectedOutputXml = classLoader.getResource("geronimo/ejb-naming-post.xml");
XmlObject xmlObject = XmlObject.Factory.parse(srcXml);
XmlCursor cursor = xmlObject.newCursor();
try {
SchemaConversionUtils.convertToGeronimoSubSchemas(cursor);
System.out.println(xmlObject.toString());
XmlObject expected = XmlObject.Factory.parse(expectedOutputXml);
System.out.println(expected.toString());
List problems = new ArrayList();
boolean ok = compareXmlObjects(xmlObject, expected, problems);
assertTrue("Differences: " + problems, ok);
SchemaConversionUtils.convertToGeronimoSubSchemas(cursor);
boolean ok2 = compareXmlObjects(xmlObject, expected, problems);
assertTrue("Differences: " + problems, ok2);
} finally {
cursor.dispose();
}
}
//
public void testGetNestedObjectAsType() throws Exception {
URL srcXml = classLoader.getResource("geronimo/ejb-naming-pre.xml");
// URL expectedOutputXml = classLoader.getResource("geronimo/ejb-naming-post.xml");
XmlObject xmlObject = XmlObject.Factory.parse(srcXml);
//this is not a usable type, we'll see what happens though
xmlObject = SchemaConversionUtils.getNestedObjectAsType(xmlObject, new QName("http://www.openejb.org/xml/ns/openejb-jar-2.1", "openejb-jar"), EjbJarType.type);
// System.out.println(xmlObject.toString());
}
public void testSecurityElementConverter() throws Exception {
URL srcXml = classLoader.getResource("geronimo/security-pre.xml");
URL expectedOutputXml = classLoader.getResource("geronimo/security-post.xml");
XmlObject xmlObject = XmlObject.Factory.parse(srcXml);
ElementConverter elementConverter = new SecurityElementConverter();
XmlCursor cursor = xmlObject.newCursor();
XmlCursor end = cursor.newCursor();
try {
elementConverter.convertElement(cursor, end);
// System.out.println(xmlObject.toString());
XmlObject expected = XmlObject.Factory.parse(expectedOutputXml);
List problems = new ArrayList();
boolean ok = compareXmlObjects(xmlObject, expected, problems);
assertTrue("Differences: " + problems, ok);
SchemaConversionUtils.convertToGeronimoSubSchemas(cursor);
boolean ok2 = compareXmlObjects(xmlObject, expected, problems);
assertTrue("Differences: " + problems, ok2);
} finally {
cursor.dispose();
end.dispose();
}
}
public void testGBeanElementConverter() throws Exception {
URL srcXml = classLoader.getResource("geronimo/gbean-pre.xml");
URL expectedOutputXml = classLoader.getResource("geronimo/gbean-post.xml");
XmlObject xmlObject = XmlObject.Factory.parse(srcXml);
ElementConverter elementConverter = new GBeanElementConverter();
XmlCursor cursor = xmlObject.newCursor();
XmlCursor end = cursor.newCursor();
try {
elementConverter.convertElement(cursor, end);
// System.out.println(xmlObject.toString());
XmlObject expected = XmlObject.Factory.parse(expectedOutputXml);
List problems = new ArrayList();
boolean ok = compareXmlObjects(xmlObject, expected, problems);
assertTrue("Differences: " + problems, ok);
SchemaConversionUtils.convertToGeronimoSubSchemas(cursor);
boolean ok2 = compareXmlObjects(xmlObject, expected, problems);
assertTrue("Differences: " + problems, ok2);
} finally {
cursor.dispose();
end.dispose();
}
}
public void testQNameConverter1() throws Exception {
URL srcXml = classLoader.getResource("geronimo/qname1-pre.xml");
URL expectedOutputXml = classLoader.getResource("geronimo/qname1-post.xml");
XmlObject xmlObject = XmlObject.Factory.parse(srcXml);
ElementConverter elementConverter = new QNameConverter("import", "http://geronimo.apache.org/xml/ns/deployment-1.0", "parent");
XmlCursor cursor = xmlObject.newCursor();
XmlCursor end = cursor.newCursor();
try {
elementConverter.convertElement(cursor, end);
// System.out.println(xmlObject.toString());
XmlObject expected = XmlObject.Factory.parse(expectedOutputXml);
List problems = new ArrayList();
boolean ok = compareXmlObjects(xmlObject, expected, problems);
assertTrue("Differences: " + problems, ok);
SchemaConversionUtils.convertToGeronimoSubSchemas(cursor);
boolean ok2 = compareXmlObjects(xmlObject, expected, problems);
assertTrue("Differences: " + problems, ok2);
} finally {
cursor.dispose();
end.dispose();
}
}
public void testQNameConverter2() throws Exception {
URL srcXml = classLoader.getResource("geronimo/qname2-pre.xml");
URL expectedOutputXml = classLoader.getResource("geronimo/qname2-post.xml");
XmlObject xmlObject = XmlObject.Factory.parse(srcXml);
ElementConverter elementConverter = new QNameConverter("import", "http://geronimo.apache.org/xml/ns/deployment-1.0", "parent");
XmlCursor cursor = xmlObject.newCursor();
XmlCursor end = cursor.newCursor();
try {
elementConverter.convertElement(cursor, end);
// System.out.println(xmlObject.toString());
XmlObject expected = XmlObject.Factory.parse(expectedOutputXml);
List problems = new ArrayList();
boolean ok = compareXmlObjects(xmlObject, expected, problems);
assertTrue("Differences: " + problems, ok);
SchemaConversionUtils.convertToGeronimoSubSchemas(cursor);
boolean ok2 = compareXmlObjects(xmlObject, expected, problems);
assertTrue("Differences: " + problems, ok2);
} finally {
cursor.dispose();
end.dispose();
}
}
public void testWebMessageDestination1() throws Exception {
URL srcXml = classLoader.getResource("geronimo/web-md-pre.xml");
URL expectedOutputXml = classLoader.getResource("geronimo/web-md-post.xml");
XmlObject xmlObject = XmlObject.Factory.parse(srcXml);
XmlCursor cursor = xmlObject.newCursor();
try {
SchemaConversionUtils.convertToGeronimoSubSchemas(cursor);
System.out.println(xmlObject.toString());
XmlObject expected = XmlObject.Factory.parse(expectedOutputXml);
System.out.println(expected.toString());
List problems = new ArrayList();
boolean ok = compareXmlObjects(xmlObject, expected, problems);
assertTrue("Differences: " + problems, ok);
SchemaConversionUtils.convertToGeronimoSubSchemas(cursor);
boolean ok2 = compareXmlObjects(xmlObject, expected, problems);
assertTrue("Differences: " + problems, ok2);
} finally {
cursor.dispose();
}
}
private boolean compareXmlObjects(XmlObject xmlObject, XmlObject expectedObject, List problems) {
XmlCursor test = xmlObject.newCursor();
XmlCursor expected = expectedObject.newCursor();
boolean similar = true;
int elementCount = 0;
while (toNextStartToken(test)) {
elementCount++;
if (!toNextStartToken(expected)) {
problems.add("test longer than expected at element: " + elementCount);
return false;
}
QName actualQName = test.getName();
QName expectedQName = expected.getName();
if (!actualQName.equals(expectedQName)) {
problems.add("Different elements at elementCount: " + elementCount + ", test: " + actualQName + ", expected: " + expectedQName);
similar = false;
}
test.toNextToken();
expected.toNextToken();
}
if (toNextStartToken(expected)) {
problems.add("test shorter that expected at element: " + elementCount);
similar = false;
}
return similar;
}
private boolean toNextStartToken(XmlCursor cursor) {
while (!cursor.isStart()) {
if (!cursor.hasNextToken()) {
return false;
}
cursor.toNextToken();
}
return true;
}
}