/**
* Copyright (c) 2000-present Liferay, Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*/
package com.liferay.portal.util;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.util.Http;
import com.liferay.portal.kernel.util.KeyValuePair;
import java.io.InputStream;
import org.apache.xerces.xni.XNIException;
import org.xml.sax.InputSource;
/**
* @author Brian Wing Shun Chan
*/
public class EntityResolver implements org.xml.sax.EntityResolver {
@Override
public InputSource resolveEntity(String publicId, String systemId) {
Class<?> clazz = getClass();
ClassLoader classLoader = clazz.getClassLoader();
if (_log.isDebugEnabled()) {
_log.debug("Resolving entity " + publicId + " " + systemId);
}
if (publicId != null) {
for (int i = 0; i < _PUBLIC_IDS.length; i++) {
KeyValuePair kvp = _PUBLIC_IDS[i];
if (publicId.equals(kvp.getKey())) {
InputStream is = classLoader.getResourceAsStream(
_DEFINITIONS_PATH + kvp.getValue());
if (is == null) {
is = classLoader.getResourceAsStream(kvp.getValue());
}
if (_log.isDebugEnabled()) {
_log.debug("Entity found for public id " + publicId);
}
return new InputSource(is);
}
}
}
else if (systemId != null) {
for (int i = 0; i < _SYSTEM_IDS.length; i++) {
KeyValuePair kvp = _SYSTEM_IDS[i];
if (systemId.equals(kvp.getKey())) {
InputStream is = classLoader.getResourceAsStream(
_DEFINITIONS_PATH + kvp.getValue());
if (is == null) {
is = classLoader.getResourceAsStream(kvp.getValue());
}
if (_log.isDebugEnabled()) {
_log.debug("Entity found for system id " + systemId);
}
InputSource inputSource = new InputSource(is);
inputSource.setSystemId(kvp.getKey());
return inputSource;
}
}
if (!systemId.endsWith(".dtd") && !systemId.endsWith(".xsd")) {
throw new XNIException("Invalid system id " + systemId);
}
if (!systemId.startsWith(Http.HTTP_WITH_SLASH) &&
!systemId.startsWith(Http.HTTPS_WITH_SLASH)) {
InputStream inputStream = classLoader.getResourceAsStream(
systemId);
if (inputStream != null) {
InputSource inputSource = new InputSource(inputStream);
inputSource.setSystemId(systemId);
return inputSource;
}
else {
throw new XNIException("Invalid system id " + systemId);
}
}
}
if (_log.isDebugEnabled()) {
_log.debug("No entity found for " + publicId + " " + systemId);
}
return null;
}
private static final String _DEFINITIONS_PATH =
"com/liferay/portal/definitions/";
private static final KeyValuePair[] _PUBLIC_IDS = {
new KeyValuePair("datatypes", "datatypes.dtd"),
new KeyValuePair(
"-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN",
"facelet-taglib_1_0.dtd"),
new KeyValuePair(
"-//Hibernate/Hibernate Mapping DTD 3.0//EN",
"hibernate-mapping-3.0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Display 2.0.0//EN", "liferay-display_2_0_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Display 3.5.0//EN", "liferay-display_3_5_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Display 4.0.0//EN", "liferay-display_4_0_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Display 5.0.0//EN", "liferay-display_5_0_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Display 5.1.0//EN", "liferay-display_5_1_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Display 5.2.0//EN", "liferay-display_5_2_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Display 6.0.0//EN", "liferay-display_6_0_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Display 6.1.0//EN", "liferay-display_6_1_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Display 6.2.0//EN", "liferay-display_6_2_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Display 7.0.0//EN", "liferay-display_7_0_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Friendly URL Routes 6.0.0//EN",
"liferay-friendly-url-routes_6_0_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Friendly URL Routes 6.1.0//EN",
"liferay-friendly-url-routes_6_1_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Friendly URL Routes 6.2.0//EN",
"liferay-friendly-url-routes_6_2_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Friendly URL Routes 7.0.0//EN",
"liferay-friendly-url-routes_7_0_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Hook 5.1.0//EN", "liferay-hook_5_1_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Hook 5.2.0//EN", "liferay-hook_5_2_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Hook 6.0.0//EN", "liferay-hook_6_0_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Hook 6.1.0//EN", "liferay-hook_6_1_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Hook 6.2.0//EN", "liferay-hook_6_2_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Hook 7.0.0//EN", "liferay-hook_7_0_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Layout Templates 3.6.0//EN",
"liferay-layout-templates_3_6_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Layout Templates 4.0.0//EN",
"liferay-layout-templates_4_0_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Layout Templates 4.3.0//EN",
"liferay-layout-templates_4_3_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Layout Templates 5.0.0//EN",
"liferay-layout-templates_5_0_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Layout Templates 5.1.0//EN",
"liferay-layout-templates_5_1_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Layout Templates 5.2.0//EN",
"liferay-layout-templates_5_2_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Layout Templates 6.0.0//EN",
"liferay-layout-templates_6_0_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Layout Templates 6.1.0//EN",
"liferay-layout-templates_6_1_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Layout Templates 6.2.0//EN",
"liferay-layout-templates_6_2_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Layout Templates 7.0.0//EN",
"liferay-layout-templates_7_0_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Look and Feel 3.5.0//EN",
"liferay-look-and-feel_3_5_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Look and Feel 4.0.0//EN",
"liferay-look-and-feel_4_0_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Look and Feel 4.3.0//EN",
"liferay-look-and-feel_4_3_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Look and Feel 5.0.0//EN",
"liferay-look-and-feel_5_0_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Look and Feel 5.1.0//EN",
"liferay-look-and-feel_5_1_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Look and Feel 5.2.0//EN",
"liferay-look-and-feel_5_2_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Look and Feel 6.0.0//EN",
"liferay-look-and-feel_6_0_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Look and Feel 6.1.0//EN",
"liferay-look-and-feel_6_1_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Look and Feel 6.2.0//EN",
"liferay-look-and-feel_6_2_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Look and Feel 7.0.0//EN",
"liferay-look-and-feel_7_0_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Plugin Package 4.3.0//EN",
"liferay-plugin-package_4_3_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Plugin Package 5.0.0//EN",
"liferay-plugin-package_5_0_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Plugin Package 5.1.0//EN",
"liferay-plugin-package_5_1_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Plugin Package 5.2.0//EN",
"liferay-plugin-package_5_2_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Plugin Package 6.0.0//EN",
"liferay-plugin-package_6_0_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Plugin Package 6.1.0//EN",
"liferay-plugin-package_6_1_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Plugin Package 6.2.0//EN",
"liferay-plugin-package_6_2_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Plugin Package 7.0.0//EN",
"liferay-plugin-package_7_0_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Plugin Repository 4.3.0//EN",
"liferay-plugin-repository_4_3_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Plugin Repository 5.0.0//EN",
"liferay-plugin-repository_5_0_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Plugin Repository 5.1.0//EN",
"liferay-plugin-repository_5_1_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Plugin Repository 5.2.0//EN",
"liferay-plugin-repository_5_2_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Plugin Repository 6.0.0//EN",
"liferay-plugin-repository_6_0_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Plugin Repository 6.1.0//EN",
"liferay-plugin-repository_6_1_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Plugin Repository 6.2.0//EN",
"liferay-plugin-repository_6_2_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Plugin Repository 7.0.0//EN",
"liferay-plugin-repository_7_0_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Portlet Application 3.5.0//EN",
"liferay-portlet-app_3_5_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Portlet Application 4.0.0//EN",
"liferay-portlet-app_4_0_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Portlet Application 4.1.0//EN",
"liferay-portlet-app_4_1_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Portlet Application 4.2.0//EN",
"liferay-portlet-app_4_2_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Portlet Application 4.3.0//EN",
"liferay-portlet-app_4_3_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Portlet Application 4.3.1//EN",
"liferay-portlet-app_4_3_1.dtd"),
new KeyValuePair(
"-//Liferay//DTD Portlet Application 4.3.2//EN",
"liferay-portlet-app_4_3_2.dtd"),
new KeyValuePair(
"-//Liferay//DTD Portlet Application 4.3.3//EN",
"liferay-portlet-app_4_3_3.dtd"),
new KeyValuePair(
"-//Liferay//DTD Portlet Application 4.3.6//EN",
"liferay-portlet-app_4_3_6.dtd"),
new KeyValuePair(
"-//Liferay//DTD Portlet Application 4.4.0//EN",
"liferay-portlet-app_4_4_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Portlet Application 5.0.0//EN",
"liferay-portlet-app_5_0_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Portlet Application 5.1.0//EN",
"liferay-portlet-app_5_1_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Portlet Application 5.2.0//EN",
"liferay-portlet-app_5_2_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Portlet Application 6.0.0//EN",
"liferay-portlet-app_6_0_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Portlet Application 6.1.0//EN",
"liferay-portlet-app_6_1_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Portlet Application 6.2.0//EN",
"liferay-portlet-app_6_2_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Portlet Application 7.0.0//EN",
"liferay-portlet-app_7_0_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Portlet Application 7.1.0//EN",
"liferay-portlet-app_7_1_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Resource Action Mapping 6.0.0//EN",
"liferay-resource-action-mapping_6_0_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Resource Action Mapping 6.1.0//EN",
"liferay-resource-action-mapping_6_1_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Resource Action Mapping 6.2.0//EN",
"liferay-resource-action-mapping_6_2_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Resource Action Mapping 7.0.0//EN",
"liferay-resource-action-mapping_7_0_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Service Builder 3.5.0//EN",
"liferay-service-builder_3_5_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Service Builder 3.6.1//EN",
"liferay-service-builder_3_6_1.dtd"),
new KeyValuePair(
"-//Liferay//DTD Service Builder 4.0.0//EN",
"liferay-service-builder_4_0_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Service Builder 4.2.0//EN",
"liferay-service-builder_4_2_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Service Builder 4.3.0//EN",
"liferay-service-builder_4_3_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Service Builder 4.3.3//EN",
"liferay-service-builder_4_3_3.dtd"),
new KeyValuePair(
"-//Liferay//DTD Service Builder 4.4.0//EN",
"liferay-service-builder_4_4_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Service Builder 5.0.0//EN",
"liferay-service-builder_5_0_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Service Builder 5.1.0//EN",
"liferay-service-builder_5_1_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Service Builder 5.2.0//EN",
"liferay-service-builder_5_2_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Service Builder 6.0.0//EN",
"liferay-service-builder_6_0_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Service Builder 6.1.0//EN",
"liferay-service-builder_6_1_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Service Builder 6.2.0//EN",
"liferay-service-builder_6_2_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Service Builder 7.0.0//EN",
"liferay-service-builder_7_0_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Social 6.1.0//EN", "liferay-social_6_1_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Social 6.2.0//EN", "liferay-social_6_2_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Social 7.0.0//EN", "liferay-social_7_0_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Theme Loader 4.3.0//EN",
"liferay-theme-loader_4_3_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Theme Loader 5.0.0//EN",
"liferay-theme-loader_5_0_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Theme Loader 5.1.0//EN",
"liferay-theme-loader_5_1_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Theme Loader 5.2.0//EN",
"liferay-theme-loader_5_2_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Theme Loader 6.0.0//EN",
"liferay-theme-loader_6_0_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Theme Loader 6.1.0//EN",
"liferay-theme-loader_6_1_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Theme Loader 6.2.0//EN",
"liferay-theme-loader_6_2_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD Theme Loader 7.0.0//EN",
"liferay-theme-loader_7_0_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD User Notification Definition 6.2.0//EN",
"liferay-user-notification-definitions_6_2_0.dtd"),
new KeyValuePair(
"-//Liferay//DTD User Notification Definition 7.0.0//EN",
"liferay-user-notification-definitions_7_0_0.dtd"),
new KeyValuePair(
"-//MuleSource //DTD mule-configuration XML V1.0//EN",
"mule-configuration.dtd"),
new KeyValuePair("-//SPRING//DTD BEAN//EN", "spring-beans.dtd"),
new KeyValuePair(
"-//Apache Software Foundation//DTD Struts Configuration 1.2//EN",
"struts-config_1_2.dtd"),
new KeyValuePair(
"-//Apache Software Foundation//DTD Tiles Configuration 1.1//EN",
"tiles-config_1_1.dtd"),
new KeyValuePair(
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN",
"web-app_2_3.dtd"),
new KeyValuePair(
"-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN",
"web-facesconfig_1_0.dtd"),
new KeyValuePair(
"-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN",
"web-facesconfig_1_1.dtd"),
new KeyValuePair(
"-//W3C//DTD XMLSCHEMA 200102//EN", "XMLSchema.dtd")
};
private static final KeyValuePair[] _SYSTEM_IDS = {
new KeyValuePair(
"http://java.sun.com/xml/ns/j2ee/j2ee_1_4.xsd", "j2ee_1_4.xsd"),
new KeyValuePair(
"http://www.ibm.com/webservices/xsd" +
"/j2ee_web_services_client_1_1.xsd",
"j2ee_web_services_client_1_1.xsd"),
new KeyValuePair(
"http://java.sun.com/xml/ns/javaee/javaee_5.xsd", "javaee_5.xsd"),
new KeyValuePair(
"http://java.sun.com/xml/ns/javaee/javaee_6.xsd", "javaee_6.xsd"),
new KeyValuePair(
"http://java.sun.com/xml/ns/javaee" +
"/javaee_web_services_client_1_2.xsd",
"javaee_web_services_client_1_2.xsd"),
new KeyValuePair(
"http://java.sun.com/xml/ns/javaee" +
"/javaee_web_services_client_1_3.xsd",
"javaee_web_services_client_1_3.xsd"),
new KeyValuePair(
"http://java.sun.com/xml/ns/j2ee/jsp_2_0.xsd", "jsp_2_0.xsd"),
new KeyValuePair(
"http://java.sun.com/xml/ns/javaee/jsp_2_1.xsd", "jsp_2_1.xsd"),
new KeyValuePair(
"http://java.sun.com/xml/ns/javaee/jsp_2_2.xsd", "jsp_2_2.xsd"),
new KeyValuePair(
"http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd",
"portlet-app_1_0.xsd"),
new KeyValuePair(
"http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd",
"portlet-app_2_0.xsd"),
new KeyValuePair(
"http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd",
"web-app_2_4.xsd"),
new KeyValuePair(
"http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd",
"web-app_2_5.xsd"),
new KeyValuePair(
"http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd",
"web-app_3_0.xsd"),
new KeyValuePair(
"http://java.sun.com/xml/ns/javaee/web-common_3_0.xsd",
"web-common_3_0.xsd"),
new KeyValuePair(
"http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd",
"web-facesconfig_1_2.xsd"),
new KeyValuePair(
"http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd",
"web-facesconfig_2_0.xsd"),
new KeyValuePair(
"http://java.sun.com/xml/ns/javaee/web-facesconfig_2_1.xsd",
"web-facesconfig_2_1.xsd"),
new KeyValuePair(
"http://www.liferay.com/dtd/liferay-ddm-structure_6_2_0.xsd",
"liferay-ddm-structure_6_2_0.xsd"),
new KeyValuePair(
"http://www.liferay.com/dtd/liferay-ddm-structure_7_0_0.xsd",
"liferay-ddm-structure_7_0_0.xsd"),
new KeyValuePair(
"http://www.liferay.com/dtd/liferay-workflow-definition_6_0_0.xsd",
"liferay-workflow-definition_6_0_0.xsd"),
new KeyValuePair(
"http://www.liferay.com/dtd/liferay-workflow-definition_6_1_0.xsd",
"liferay-workflow-definition_6_1_0.xsd"),
new KeyValuePair(
"http://www.liferay.com/dtd/liferay-workflow-definition_6_2_0.xsd",
"liferay-workflow-definition_6_2_0.xsd"),
new KeyValuePair(
"http://www.liferay.com/dtd/liferay-workflow-definition_7_0_0.xsd",
"liferay-workflow-definition_7_0_0.xsd"),
new KeyValuePair(
"http://www.w3.org/2001/xml.xsd", "xml.xsd")
};
private static final Log _log = LogFactoryUtil.getLog(EntityResolver.class);
}