blob: a239b9b6bb896c2dab03d0735d1c3bd0ef89f1eb [file] [log] [blame]
/*
* Copyright (c) 1998, 2020 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:
// Oracle - initial API and implementation from Oracle TopLink
package org.eclipse.persistence.testing.oxm.platform;
import java.io.InputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.net.URL;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.eclipse.persistence.platform.xml.XMLPlatform;
import org.eclipse.persistence.platform.xml.XMLPlatformException;
import org.eclipse.persistence.platform.xml.XMLPlatformFactory;
import org.eclipse.persistence.platform.xml.XMLTransformer;
import org.eclipse.persistence.testing.oxm.OXTestCase;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Text;
public class PlatformTransformerTestCases extends OXTestCase {
private static String XML_RESOURCE = "org/eclipse/persistence/testing/oxm/platform/employee.xsl";
private static String XML_ERROR_RESOURCE = "org/eclipse/persistence/testing/oxm/platform/employee_error.xsl";
public PlatformTransformerTestCases(String name) {
super(name);
}
private Document getDocument(String root, String fn, String ln) throws Exception{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
Document doc = factory.newDocumentBuilder().newDocument();
Element empElement = doc.createElement(root);
Element fnElement = doc.createElement(fn);
Text fnText = doc.createTextNode("Jane");
fnElement.appendChild(fnText);
Element lnElement = doc.createElement(ln);
Text lnText = doc.createTextNode("Doe");
lnElement.appendChild(lnText);
empElement.appendChild(fnElement);
empElement.appendChild(lnElement);
doc.appendChild(empElement);
return doc;
}
private URL getStyleSheet(String resource) throws Exception{
return ClassLoader.getSystemResource(resource);
}
public void testTransformWithStyleSheet() throws Exception{
Document orignalDoc = getDocument("employee", "first-name", "last-name");
log("ORIGINAL DOCUMENT");
log(orignalDoc);
XMLPlatform xmlPlatform = XMLPlatformFactory.getInstance().getXMLPlatform();
XMLTransformer transformer = xmlPlatform.newXMLTransformer();
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setIgnoringElementContentWhitespace(true);
Document outdoc = factory.newDocumentBuilder().newDocument();
transformer.transform(orignalDoc, outdoc, getStyleSheet(XML_RESOURCE));
log("\nRESULTING DOCUMENT");
log(outdoc);
Document outControlDoc = getDocument("e", "fn", "ln");
assertXMLIdentical(outdoc, outControlDoc);
}
/*
public void testTransformWithInvalidStyleSheet() throws Exception{
try{
Document orignalDoc = getDocument("employee", "first-name", "last-name");
log("ORIGINAL DOCUMENT");
log(orignalDoc);
XMLPlatform xmlPlatform = XMLPlatformFactory.getInstance().getXMLPlatform();
XMLTransformer transformer = xmlPlatform.newXMLTransformer();
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
Document outdoc = factory.newDocumentBuilder().newDocument();
transformer.transform(orignalDoc, outdoc, getStyleSheet(XML_ERROR_RESOURCE));
}catch(XMLPlatformException platformException){
return;
}catch(Exception exception){
fail("An unexpected exception occurred. Should have been caught an XMLParseException");
return;
}
fail("An exception should have been caught but wasn't");
}
*/
public void testTransformToOutputStream() throws Exception{
Document orignalDoc = getDocument("employee", "first-name", "last-name");
log("ORIGINAL DOCUMENT: " );
log(orignalDoc);
XMLPlatform xmlPlatform = XMLPlatformFactory.getInstance().getXMLPlatform();
XMLTransformer transformer = xmlPlatform.newXMLTransformer();
transformer.setFormattedOutput(false);
ByteArrayOutputStream outstream = new ByteArrayOutputStream();
transformer.transform(orignalDoc, outstream);
log("\noutstream: " + outstream.toString());
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
InputStream instream = new ByteArrayInputStream(outstream.toByteArray());
Document streamDoc = factory.newDocumentBuilder().parse(instream);
log("RESULT DOCUMENT: ");
log(streamDoc);
assertXMLIdentical(orignalDoc, streamDoc);
}
private boolean compareByteArrays(byte[] first, byte[] second)
{
if(first.length != second.length){
return false;
}
for(int i=0; i<first.length; i++){
if (first[i] != second[i]){
return false;
}
}
return true;
}
}