org.eclipse.persistence.platform.xml.xdk.XDKTransformer Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of eclipselink Show documentation
Show all versions of eclipselink Show documentation
EclipseLink build based upon Git transaction 774c696
/*******************************************************************************
* Copyright (c) 1998, 2013 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 v1.0 and Eclipse Distribution License v. 1.0
* which accompanies this distribution.
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
* Oracle - initial API and implementation from Oracle TopLink
******************************************************************************/
package org.eclipse.persistence.platform.xml.xdk;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.io.Writer;
import java.net.URL;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.TransformerException;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.sax.SAXResult;
import javax.xml.transform.stream.StreamResult;
import org.eclipse.persistence.platform.xml.XMLPlatformException;
import org.eclipse.persistence.platform.xml.XMLTransformer;
import oracle.xml.jaxp.JXTransformer;
import oracle.xml.parser.v2.XMLDocument;
import oracle.xml.parser.v2.XMLDocumentFragment;
import oracle.xml.parser.v2.XMLNode;
import oracle.xml.parser.v2.XSLException;
import oracle.xml.parser.v2.XSLProcessor;
import oracle.xml.parser.v2.XSLStylesheet;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.xml.sax.ContentHandler;
import org.xml.sax.SAXException;
/**
* Purpose: An implementation of XMLTransformer using Oracle XDK
* APIs.
*/
public class XDKTransformer implements XMLTransformer {
private String encoding;
private String version;
private boolean formattedOutput;
private boolean fragment;
public XDKTransformer() {
super();
setEncoding("utf-8");
setVersion("1.0");
setFormattedOutput(true);
}
public String getEncoding() {
return encoding;
}
public void setEncoding(String encoding) {
this.encoding = encoding;
}
public boolean isFormattedOutput() {
return formattedOutput;
}
public void setFormattedOutput(boolean shouldFormat) {
formattedOutput = shouldFormat;
}
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
public void transform(Node sourceNode, OutputStream resultOutputStream) throws XMLPlatformException {
try {
OutputStreamWriter resultWriter = new OutputStreamWriter(resultOutputStream, getEncoding());
transform(sourceNode, resultWriter);
} catch (UnsupportedEncodingException e) {
throw XMLPlatformException.xmlPlatformTransformException(e);
}
}
public void transform(Node sourceNode, ContentHandler resultContentHandler) throws XMLPlatformException {
try {
XMLNode xmlNode = (XMLNode)sourceNode;
xmlNode.reportSAXEvents(resultContentHandler);
} catch (SAXException e) {
throw XMLPlatformException.xmlPlatformTransformException(e);
}
}
public void transform(Node sourceNode, Result result) throws XMLPlatformException {
DOMSource source = new DOMSource(sourceNode);
transform(source, result);
}
public void transform(Node sourceNode, Writer resultWriter) throws XMLPlatformException {
try {
XMLDocument xmlDocument;
if (sourceNode.getNodeType() == Node.DOCUMENT_NODE) {
xmlDocument = (XMLDocument)sourceNode;
} else {
xmlDocument = (XMLDocument)sourceNode.getOwnerDocument();
}
if (isFragment()) {
xmlDocument.setEncoding(null);
xmlDocument.setVersion(null);
} else {
xmlDocument.setEncoding(getEncoding());
xmlDocument.setVersion(getVersion());
}
XMLNode xmlNode = (XMLNode)sourceNode;
PrintWriter printWriter = new PrintWriter(resultWriter);
XDKPrintDriver xdkPrintDriver = new XDKPrintDriver(printWriter);
xdkPrintDriver.setFormattedOutput(isFormattedOutput());
xdkPrintDriver.setEncoding(getEncoding());
xdkPrintDriver.print(xmlNode);
resultWriter.flush();
} catch (IOException e) {
throw XMLPlatformException.xmlPlatformTransformException(e);
}
}
public void transform(Source source, Result result) throws XMLPlatformException {
try {
JXTransformer transformer = new JXTransformer();
if ((result instanceof StreamResult) && (isFragment())) {
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
}
if ((result instanceof SAXResult) && (!isFragment())) {
((SAXResult)result).getHandler().startDocument();
}
transformer.transform(source, result);
if ((result instanceof SAXResult) && (!isFragment())) {
((SAXResult)result).getHandler().endDocument();
}
} catch (TransformerException e) {
throw XMLPlatformException.xmlPlatformTransformException(e);
} catch (SAXException e) {
throw XMLPlatformException.xmlPlatformTransformException(e);
}
}
public void transform(Document sourceDocument, Node resultParentNode, URL stylesheet) throws XMLPlatformException {
try {
XSLProcessor xslProcessor = new XSLProcessor();
XSLStylesheet xslStylesheet = xslProcessor.newXSLStylesheet(stylesheet);
XMLDocument xmlDocument = (XMLDocument)sourceDocument;
XMLDocumentFragment resultDocumentFragment = xslProcessor.processXSL(xslStylesheet, xmlDocument);
resultParentNode.appendChild(resultDocumentFragment);
} catch (XSLException e) {
throw XMLPlatformException.xmlPlatformTransformException(e);
}
}
public void setFragment(boolean fragment) {
this.fragment = fragment;
}
public boolean isFragment() {
return fragment;
}
}