Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'web/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/util/CommonXML.java')
-rw-r--r--web/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/util/CommonXML.java112
1 files changed, 112 insertions, 0 deletions
diff --git a/web/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/util/CommonXML.java b/web/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/util/CommonXML.java
new file mode 100644
index 0000000000..8d685f3900
--- /dev/null
+++ b/web/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/util/CommonXML.java
@@ -0,0 +1,112 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2017 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.jsp.core.internal.util;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Source;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerConfigurationException;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.TransformerFactoryConfigurationError;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+
+import org.eclipse.jst.jsp.core.internal.Logger;
+import org.w3c.dom.Document;
+import org.xml.sax.EntityResolver;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+
+public class CommonXML {
+
+ public synchronized static DocumentBuilder getDocumentBuilder() {
+ DocumentBuilder result = null;
+ try {
+ DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
+ documentBuilderFactory.setExpandEntityReferences(false);
+
+ result = documentBuilderFactory.newDocumentBuilder();
+ result.setEntityResolver(getEntityResolver());
+ }
+ catch (ParserConfigurationException e) {
+ Logger.logException(e);
+ }
+ return result;
+ }
+
+ public synchronized static DocumentBuilder getDocumentBuilder(boolean validating) {
+ DocumentBuilder result = null;
+ try {
+ DocumentBuilderFactory instance = DocumentBuilderFactory.newInstance();
+
+ instance.setValidating(validating);
+ instance.setExpandEntityReferences(false);
+ instance.setCoalescing(true);
+ result = instance.newDocumentBuilder();
+ if (!validating) {
+ result.setEntityResolver(getEntityResolver());
+ }
+ }
+ catch (ParserConfigurationException e) {
+ Logger.logException(e);
+ }
+ return result;
+ }
+
+ public static void serialize(Document document, OutputStream ostream) throws IOException {
+ Source domSource = new DOMSource(document);
+ try {
+ Transformer serializer = TransformerFactory.newInstance().newTransformer();
+ try {
+ serializer.setOutputProperty(OutputKeys.INDENT, "yes"); //$NON-NLS-1$
+ serializer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4"); //$NON-NLS-1$ //$NON-NLS-2$
+ serializer.setOutputProperty(OutputKeys.ENCODING, "UTF-16"); //$NON-NLS-1$
+ }
+ catch (IllegalArgumentException e) {
+ // unsupported properties
+ }
+ serializer.transform(domSource, new StreamResult(ostream));
+ }
+ catch (TransformerConfigurationException e) {
+ throw new IOException(e.getMessage());
+ }
+ catch (TransformerFactoryConfigurationError e) {
+ throw new IOException(e.getMessage());
+ }
+ catch (TransformerException e) {
+ throw new IOException(e.getMessage());
+ }
+ }
+
+ /**
+ * Returns an EntityResolver that won't try to load and resolve ANY
+ * entities
+ */
+ private static EntityResolver getEntityResolver() {
+ EntityResolver resolver = new EntityResolver() {
+ public InputSource resolveEntity(String publicID, String systemID) throws SAXException, IOException {
+ InputSource result = new InputSource(new ByteArrayInputStream(new byte[0]));
+ result.setPublicId(publicID);
+ result.setSystemId(systemID != null ? systemID : "/_" + getClass().getName()); //$NON-NLS-1$
+ return result;
+ }
+ };
+ return resolver;
+ }
+}

Back to the top