Java tutorial
/** * Copyright (c) 2012, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. * * 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.wso2.carbon.ndatasource.ui; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.wso2.carbon.ndatasource.common.DataSourceConstants; import org.wso2.carbon.ndatasource.common.DataSourceException; import org.wso2.carbon.ndatasource.ui.config.DSXMLConfiguration; import org.wso2.carbon.ndatasource.ui.config.RDBMSDSXMLConfiguration; import org.wso2.carbon.ndatasource.ui.config.RDBMSDSXMLConfiguration.DataSourceProperty; import org.wso2.carbon.ndatasource.ui.stub.NDataSourceAdminDataSourceException; import org.wso2.carbon.ndatasource.ui.stub.core.services.xsd.WSDataSourceInfo; import org.wso2.carbon.ndatasource.ui.stub.core.services.xsd.WSDataSourceMetaInfo; import org.wso2.carbon.ndatasource.ui.stub.core.services.xsd.WSDataSourceMetaInfo_WSDataSourceDefinition; import org.wso2.carbon.ndatasource.ui.stub.core.xsd.JNDIConfig; import org.wso2.carbon.ndatasource.ui.stub.core.xsd.JNDIConfig_EnvEntry; import org.wso2.carbon.utils.xml.XMLPrettyPrinter; import javax.servlet.http.HttpServletRequest; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.StringWriter; import java.rmi.RemoteException; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; public class NDataSourceHelper { private static final Log log = LogFactory.getLog(NDataSourceHelper.class); private static ResourceBundle bundle; public static WSDataSourceMetaInfo createWSDataSourceMetaInfo(HttpServletRequest request, NDataSourceAdminServiceClient client) throws RemoteException, DataSourceException, NDataSourceAdminDataSourceException { WSDataSourceMetaInfo_WSDataSourceDefinition dataSourceDefinition = null; String datasourceType = sanitizeInput(request.getParameter("dsType")); String datasourceCustomType = sanitizeInput(request.getParameter("customDsType")); boolean configView = Boolean.parseBoolean(request.getParameter("configView")); bundle = ResourceBundle.getBundle("org.wso2.carbon.ndatasource.ui.i18n.Resources", request.getLocale()); String name = sanitizeInput(request.getParameter("dsName")); if (name == null || "".equals(name)) { name = request.getParameter("name_hidden"); if (name == null || "".equals(name)) { handleException(bundle.getString("ds.name.cannotfound.msg")); } } if (configView && (datasourceCustomType == null || "".equals(datasourceCustomType))) { handleException(bundle.getString("custom.ds.type.name.cannotfound.msg")); } String description = sanitizeInput(request.getParameter("description")); WSDataSourceMetaInfo dataSourceMetaInfo = new WSDataSourceMetaInfo(); dataSourceMetaInfo.setName(name); dataSourceMetaInfo.setSystem(Boolean.parseBoolean(request.getParameter("isSystem"))); if (description != null && !("".equals(description))) { dataSourceMetaInfo.setDescription(description); } if (configView) { dataSourceDefinition = createCustomDS(request.getParameter("configContent"), datasourceCustomType); } else if (datasourceType.equals(NDataSourceClientConstants.RDBMS_DTAASOURCE_TYPE)) { if (request.getParameter("jndiname") != null && !request.getParameter("jndiname").equals("")) { dataSourceMetaInfo.setJndiConfig(createJNDIConfig(request)); } else { if (request.getParameter("useDataSourceFactory") != null || (request.getParameter("jndiProperties") != null && !request.getParameter("jndiProperties").equals(""))) { handleException(bundle.getString("jndi.name.cannotfound.msg")); } } DSXMLConfiguration dsXMLConfig = createDSXMLConfiguration(datasourceType, request, client); dataSourceDefinition = createWSDataSourceDefinition(dsXMLConfig, datasourceType); } else { throw new IllegalArgumentException("Provided Data Source type not supported"); } dataSourceMetaInfo.setDefinition(dataSourceDefinition); return dataSourceMetaInfo; } private static WSDataSourceMetaInfo_WSDataSourceDefinition createCustomDS(String configuration, String datasourceType) { WSDataSourceMetaInfo_WSDataSourceDefinition wSDataSourceDefinition = new WSDataSourceMetaInfo_WSDataSourceDefinition(); wSDataSourceDefinition.setDsXMLConfiguration(configuration); wSDataSourceDefinition.setType(datasourceType); return wSDataSourceDefinition; } private static DSXMLConfiguration createDSXMLConfiguration(String type, HttpServletRequest request, NDataSourceAdminServiceClient client) throws RemoteException, DataSourceException, NDataSourceAdminDataSourceException { if (type.equals(NDataSourceClientConstants.RDBMS_DTAASOURCE_TYPE)) { RDBMSDSXMLConfiguration rdbmsDSXMLConfig = null; try { rdbmsDSXMLConfig = new RDBMSDSXMLConfiguration(); } catch (NDataSourceAdminDataSourceException e) { handleException(e.getMessage()); } String dsProvider = sanitizeInput(request.getParameter("dsProviderType")); if (NDataSourceClientConstants.RDBMS_EXTERNAL_DATASOURCE_PROVIDER.equals(dsProvider)) { String dsclassname = sanitizeInput(request.getParameter("dsclassname")); if (dsclassname == null || "".equals(dsclassname)) { handleException(bundle.getString("ds.dsclassname.cannotfound.msg")); } // retrieve external data source properties String dsproviderProperties = sanitizeInput(request.getParameter("dsproviderProperties")); if (dsproviderProperties == null || "".equals(dsproviderProperties)) { handleException(bundle.getString("ds.external.datasource.property.cannotfound.msg")); } String[] propsList = dsproviderProperties.split("::"); String[] property = null; List<DataSourceProperty> dataSourceProps = new ArrayList<DataSourceProperty>(); for (int i = 0; i < propsList.length; i++) { RDBMSDSXMLConfiguration.DataSourceProperty dataSourceProperty = new RDBMSDSXMLConfiguration.DataSourceProperty(); property = propsList[i].split(","); dataSourceProperty.setName(property[0]); dataSourceProperty.setValue(property[1]); dataSourceProps.add(dataSourceProperty); } rdbmsDSXMLConfig.setDataSourceClassName(dsclassname); rdbmsDSXMLConfig.setDataSourceProps(dataSourceProps); } else if ("default".equals(dsProvider)) { String driver = sanitizeInput(request.getParameter("driver")); if (driver == null || "".equals(driver)) { handleException(bundle.getString("ds.driver.cannotfound.msg")); } String url = sanitizeInput(request.getParameter("url")); if (url == null || "".equals(url)) { handleException(bundle.getString("ds.url.cannotfound.msg")); } String username = sanitizeInput(request.getParameter("username")); String password = null; boolean isEditMode = Boolean.parseBoolean(request.getParameter("editMode")); if (isEditMode) { String changePassword = request.getParameter("changePassword"); changePassword = (changePassword == null || changePassword.equals("false")) ? "false" : "true"; if (Boolean.parseBoolean(changePassword)) { password = request.getParameter("newPassword"); } else { WSDataSourceInfo dataSourceInfo = client.getDataSource(request.getParameter("dsName")); WSDataSourceMetaInfo_WSDataSourceDefinition dataSourceDefinition = dataSourceInfo .getDsMetaInfo().getDefinition(); String configuration = dataSourceDefinition.getDsXMLConfiguration(); RDBMSDSXMLConfiguration rdbmsCon = (RDBMSDSXMLConfiguration) NDataSourceHelper .unMarshal(type, configuration); password = rdbmsCon.getPassword().getValue(); } } else { password = request.getParameter("password"); } rdbmsDSXMLConfig.setUrl(url); rdbmsDSXMLConfig.setDriverClassName(driver); rdbmsDSXMLConfig.setUsername(username); RDBMSDSXMLConfiguration.Password passwordOb = new RDBMSDSXMLConfiguration.Password(); passwordOb.setValue(password); rdbmsDSXMLConfig.setPassword(passwordOb); } else { throw new IllegalArgumentException("Unknown data source provider type"); } // retrieve data source parameteres. setDatasourceProperties(rdbmsDSXMLConfig, request); return rdbmsDSXMLConfig; } else { throw new IllegalArgumentException("Provided Data Source type not supported"); } } private static JNDIConfig createJNDIConfig(HttpServletRequest request) { String name = request.getParameter("jndiname"); JNDIConfig jndiConfig = new JNDIConfig(); jndiConfig.setName(name); //set isUseDataSourceFactory String useDataSourceFactory = request.getParameter("useDataSourceFactory"); useDataSourceFactory = (useDataSourceFactory == null) ? "false" : "true"; jndiConfig.setUseDataSourceFactory(Boolean.parseBoolean(useDataSourceFactory)); // retrieve environment properties String jndiProperties = request.getParameter("jndiProperties"); if (jndiProperties != null && !("".equals(jndiProperties))) { String[] propsList = jndiProperties.split("::"); String[] property = null; JNDIConfig_EnvEntry[] jndiEnvyList = new JNDIConfig_EnvEntry[propsList.length]; for (int i = 0; i < propsList.length; i++) { JNDIConfig_EnvEntry jndiEnvy = new JNDIConfig_EnvEntry(); property = propsList[i].split(","); jndiEnvy.setName(property[0]); jndiEnvy.setValue(property[1]); jndiEnvyList[i] = jndiEnvy; } if (propsList.length > 0) { jndiConfig.setEnvironment(jndiEnvyList); } } return jndiConfig; } private static WSDataSourceMetaInfo_WSDataSourceDefinition createWSDataSourceDefinition( DSXMLConfiguration dsXMLConfig, String datasourceType) { ByteArrayOutputStream out = new ByteArrayOutputStream(); try { dsXMLConfig.getDSMarshaller().marshal(dsXMLConfig, out); } catch (JAXBException e) { handleException("Error in marshelling Data Source Configuration info"); } WSDataSourceMetaInfo_WSDataSourceDefinition wSDataSourceDefinition = new WSDataSourceMetaInfo_WSDataSourceDefinition(); wSDataSourceDefinition.setDsXMLConfiguration(out.toString()); wSDataSourceDefinition.setType(datasourceType); return wSDataSourceDefinition; } public static Map<String, String> getAllDataSources(WSDataSourceInfo[] allDataSourcesInfo) { Map<String, String> allDataSources = new HashMap<String, String>(); if (allDataSourcesInfo != null) { for (WSDataSourceInfo dataSourceInfo : allDataSourcesInfo) { WSDataSourceMetaInfo dataSourceMetaInfo = dataSourceInfo.getDsMetaInfo(); if (DataSourceConstants.DataSourceStatusModes.ERROR.toString() .equals(dataSourceInfo.getDsStatus().getMode())) { allDataSources.put(dataSourceMetaInfo.getName(), "ERROR: " + dataSourceInfo.getDsStatus().getDetails()); } else { allDataSources.put(dataSourceMetaInfo.getName(), dataSourceInfo.getDsStatus().getMode()); } } } return allDataSources; } public static DSXMLConfiguration unMarshal(String datasourceType, String configuration) throws NDataSourceAdminDataSourceException { if (datasourceType.equals(NDataSourceClientConstants.RDBMS_DTAASOURCE_TYPE)) { JAXBContext ctx = null; RDBMSDSXMLConfiguration rdbmsConfiguration = null; try { ctx = JAXBContext.newInstance(RDBMSDSXMLConfiguration.class); rdbmsConfiguration = (RDBMSDSXMLConfiguration) ctx.createUnmarshaller() .unmarshal((Element) (stringToElement(configuration))); } catch (JAXBException e) { throw new NDataSourceAdminDataSourceException( "Error creating rdbms data source configuration info unmarshaller: " + e.getMessage(), e); } return rdbmsConfiguration; } else { throw new IllegalArgumentException("Provided Dta Source type not supported"); } } public static Element stringToElement(String xml) { if (xml == null || xml.trim().length() == 0) { return null; } try { DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); docFactory.setNamespaceAware(false); DocumentBuilder db = docFactory.newDocumentBuilder(); return db.parse(new ByteArrayInputStream(xml.getBytes())).getDocumentElement(); } catch (Exception e) { throw new RuntimeException(e.getMessage(), e); } } private static void setDatasourceProperties(RDBMSDSXMLConfiguration rdbmsDSXMLConfig, HttpServletRequest request) { Boolean defaultAutoCommit = Boolean.parseBoolean(request.getParameter("defaultAutoCommit")); if (defaultAutoCommit != false) { rdbmsDSXMLConfig.setDefaultAutoCommit(defaultAutoCommit); } Boolean defaultReadOnly = Boolean.parseBoolean(request.getParameter("defaultReadOnly")); if (defaultReadOnly != false) { rdbmsDSXMLConfig.setDefaultReadOnly(defaultReadOnly); } String defaultTransactionIsolation = request.getParameter("defaultTransactionIsolation"); if (defaultTransactionIsolation != null && !"NONE".equals(defaultTransactionIsolation)) { rdbmsDSXMLConfig.setDefaultTransactionIsolation(defaultTransactionIsolation.trim()); } String defaultCatalog = request.getParameter("defaultCatalog"); if (defaultCatalog != null && !"".equals(defaultCatalog)) { rdbmsDSXMLConfig.setDefaultCatalog(defaultCatalog.trim()); } String maxActive = request.getParameter("maxActive"); if (maxActive != null && !maxActive.contains("int") && !maxActive.equals("")) { try { rdbmsDSXMLConfig.setMaxActive(Integer.parseInt(maxActive.trim())); } catch (NumberFormatException e) { handleException(bundle.getString("invalid.maxActive")); } } String maxIdle = request.getParameter("maxIdle"); if (maxIdle != null && !maxIdle.contains("int") && !maxIdle.equals("")) { try { rdbmsDSXMLConfig.setMaxIdle(Integer.parseInt(maxIdle.trim())); } catch (NumberFormatException e) { handleException(bundle.getString("invalid.maxidle")); } } String minIdle = request.getParameter("minIdle"); if (minIdle != null && !minIdle.contains("int") && !minIdle.equals("")) { try { rdbmsDSXMLConfig.setMinIdle(Integer.parseInt(minIdle.trim())); } catch (NumberFormatException e) { handleException(bundle.getString("invalid.MinIdle")); } } String initialSize = request.getParameter("initialSize"); if (initialSize != null && !initialSize.contains("int") && !initialSize.equals("")) { try { rdbmsDSXMLConfig.setInitialSize(Integer.parseInt(initialSize.trim())); } catch (NumberFormatException e) { handleException(bundle.getString("invalid.Initialsize")); } } String maxWait = request.getParameter("maxWait"); if (maxWait != null && !maxWait.contains("int") && !maxWait.equals("")) { try { rdbmsDSXMLConfig.setMaxWait(Integer.parseInt(maxWait.trim())); } catch (NumberFormatException e) { handleException(bundle.getString("invalid.maxWait")); } } Boolean testOnBorrow = Boolean.parseBoolean(request.getParameter("testOnBorrow")); if (testOnBorrow != false) { rdbmsDSXMLConfig.setTestOnBorrow(testOnBorrow); } Boolean testOnReturn = Boolean.parseBoolean(request.getParameter("testOnReturn")); if (testOnReturn != false) { rdbmsDSXMLConfig.setTestOnReturn(testOnReturn); } Boolean testWhileIdle = Boolean.parseBoolean(request.getParameter("testWhileIdle")); if (testWhileIdle != false) { rdbmsDSXMLConfig.setTestWhileIdle(testWhileIdle); } String validationQuery = request.getParameter("validationquery"); if (validationQuery != null && !"".equals(validationQuery)) { rdbmsDSXMLConfig.setValidationQuery(validationQuery.trim()); } String validatorClassName = request.getParameter("validatorClassName"); if (validatorClassName != null && !"".equals(validatorClassName)) { rdbmsDSXMLConfig.setValidatorClassName(validatorClassName.trim()); } String timeBetweenEvictionRunsMillis = request.getParameter("timeBetweenEvictionRunsMillis"); if (timeBetweenEvictionRunsMillis != null && !timeBetweenEvictionRunsMillis.contains("int") && !timeBetweenEvictionRunsMillis.equals("")) { try { rdbmsDSXMLConfig .setTimeBetweenEvictionRunsMillis(Integer.parseInt(timeBetweenEvictionRunsMillis.trim())); } catch (NumberFormatException e) { handleException(bundle.getString("invalid.timeBetweenEvictionRunsMillis")); } } String numTestsPerEvictionRun = request.getParameter("numTestsPerEvictionRun"); if (numTestsPerEvictionRun != null && !numTestsPerEvictionRun.contains("int") && !numTestsPerEvictionRun.equals("")) { try { rdbmsDSXMLConfig.setNumTestsPerEvictionRun(Integer.parseInt(numTestsPerEvictionRun.trim())); } catch (NumberFormatException e) { handleException(bundle.getString("invalid.numTestsPerEvictionRun")); } } String minEvictableIdleTimeMillis = request.getParameter("minEvictableIdleTimeMillis"); if (minEvictableIdleTimeMillis != null && !minEvictableIdleTimeMillis.contains("int") && !minEvictableIdleTimeMillis.equals("")) { try { rdbmsDSXMLConfig.setMinEvictableIdleTimeMillis(Integer.parseInt(minEvictableIdleTimeMillis.trim())); } catch (NumberFormatException e) { handleException(bundle.getString("invalid.minEvictableIdleTimeMillis")); } } Boolean accessToUnderlyingConnectionAllowed = Boolean .parseBoolean(request.getParameter("accessToUnderlyingConnectionAllowed")); if (accessToUnderlyingConnectionAllowed != false) { rdbmsDSXMLConfig.setAccessToUnderlyingConnectionAllowed(accessToUnderlyingConnectionAllowed); } Boolean removeAbandoned = Boolean.parseBoolean(request.getParameter("removeAbandoned")); if (removeAbandoned != false) { rdbmsDSXMLConfig.setRemoveAbandoned(removeAbandoned); } String removeAbandonedTimeout = request.getParameter("removeAbandonedTimeout"); if (removeAbandonedTimeout != null && !removeAbandonedTimeout.contains("int") && !removeAbandonedTimeout.equals("")) { try { rdbmsDSXMLConfig.setRemoveAbandonedTimeout(Integer.parseInt(removeAbandonedTimeout.trim())); } catch (NumberFormatException e) { handleException(bundle.getString("invalid.removeAbandonedTimeout")); } } Boolean logAbandoned = Boolean.parseBoolean(request.getParameter("logAbandoned")); if (logAbandoned != false) { rdbmsDSXMLConfig.setLogAbandoned(logAbandoned); } String connectionProperties = request.getParameter("connectionProperties"); if (connectionProperties != null && !"".equals(connectionProperties)) { rdbmsDSXMLConfig.setConnectionProperties(connectionProperties.trim()); } String initSQL = request.getParameter("initSQL"); if (initSQL != null && !"".equals(initSQL)) { rdbmsDSXMLConfig.setInitSQL(initSQL.trim()); } String jdbcInterceptors = request.getParameter("jdbcInterceptors"); if (jdbcInterceptors != null && !"".equals(jdbcInterceptors)) { rdbmsDSXMLConfig.setJdbcInterceptors(jdbcInterceptors.trim()); } String validationInterval = request.getParameter("validationInterval"); if (validationInterval != null && !validationInterval.contains("long") && !validationInterval.equals("")) { try { rdbmsDSXMLConfig.setValidationInterval(Long.parseLong(validationInterval.trim())); } catch (NumberFormatException e) { handleException(bundle.getString("invalid.validationInterval")); } } Boolean jmxEnabled = Boolean.parseBoolean(request.getParameter("jmxEnabled")); if (jmxEnabled != false) { rdbmsDSXMLConfig.setJmxEnabled(jmxEnabled); } Boolean fairQueue = Boolean.parseBoolean(request.getParameter("fairQueue")); if (fairQueue != false) { rdbmsDSXMLConfig.setFairQueue(fairQueue); } String abandonWhenPercentageFull = request.getParameter("abandonWhenPercentageFull"); if (abandonWhenPercentageFull != null && !abandonWhenPercentageFull.contains("int") && !abandonWhenPercentageFull.equals("")) { try { rdbmsDSXMLConfig.setAbandonWhenPercentageFull(Integer.parseInt(abandonWhenPercentageFull.trim())); } catch (NumberFormatException e) { handleException(bundle.getString("invalid.abandonWhenPercentageFull")); } } Boolean useEquals = Boolean.parseBoolean(request.getParameter("useEquals")); if (useEquals != false) { rdbmsDSXMLConfig.setUseEquals(useEquals); } String maxAge = request.getParameter("maxAge"); if (maxAge != null && !maxAge.contains("long") && !maxAge.equals("")) { try { rdbmsDSXMLConfig.setMaxAge(Long.parseLong(maxAge.trim())); } catch (NumberFormatException e) { handleException(bundle.getString("invalid.maxAge")); } } String suspectTimeout = request.getParameter("suspectTimeout"); if (suspectTimeout != null && !suspectTimeout.contains("int") && !suspectTimeout.equals("")) { try { rdbmsDSXMLConfig.setSuspectTimeout(Integer.parseInt(suspectTimeout.trim())); } catch (NumberFormatException e) { handleException(bundle.getString("invalid.suspectTimeout")); } } Boolean alternateUsernameAllowed = Boolean.parseBoolean(request.getParameter("alternateUsernameAllowed")); if (alternateUsernameAllowed != false) { rdbmsDSXMLConfig.setAlternateUsernameAllowed(alternateUsernameAllowed); } String validationQueryTimeout = request.getParameter("validationQueryTimeout"); if (validationQueryTimeout != null && !validationQueryTimeout.contains("int") && !validationQueryTimeout.equals("")) { try { rdbmsDSXMLConfig.setValidationQueryTimeout(Integer.parseInt(validationQueryTimeout.trim())); } catch (NumberFormatException e) { handleException(bundle.getString("invalid.validationQueryTimeout")); } } } public static String elementToString(Element element) { try { if (element == null) { return null; } Transformer transformer = TransformerFactory.newInstance().newTransformer(); StringWriter buff = new StringWriter(); transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); transformer.transform(new DOMSource(element), new StreamResult(buff)); return buff.toString(); } catch (Exception e) { log.error("Error while convering element to string: " + e.getMessage(), e); return null; } } private static List<Element> getChildElements(Element element) { List<Element> childEls = new ArrayList<Element>(); for (Node tmpNode : getNodesAsList(element)) { if (tmpNode.getNodeType() == Node.ELEMENT_NODE) { childEls.add((Element) tmpNode); } } return childEls; } private static List<Node> getNodesAsList(Element element) { List<Node> nodes = new ArrayList<Node>(); NodeList nodeList = element.getChildNodes(); int count = nodeList.getLength(); for (int i = 0; i < count; i++) { nodes.add(nodeList.item(i)); } return nodes; } private static List<Node> getWhitespaceNodes(Element element) { List<Node> nodes = new ArrayList<Node>(); for (Node node : getNodesAsList(element)) { if (node.getNodeType() == Node.TEXT_NODE) { node.setNodeValue(node.getNodeValue().trim()); if (node.getNodeValue().length() == 0) { nodes.add(node); } } } return nodes; } private static void removeWhitespaceInMixedContentElements(Element element) { List<Element> childEls = getChildElements(element); if (childEls.size() > 0) { for (Node node : getWhitespaceNodes(element)) { element.removeChild(node); } for (Element childEl : childEls) { removeWhitespaceInMixedContentElements(childEl); } } } /** * Prettify a given XML string */ public static String prettifyXML(String xmlContent) { Element element = stringToElement(xmlContent); if (element == null) { return ""; } removeWhitespaceInMixedContentElements(element); xmlContent = elementToString(element); ByteArrayInputStream byteIn = new ByteArrayInputStream(xmlContent.getBytes()); XMLPrettyPrinter prettyPrinter = new XMLPrettyPrinter(byteIn); return prettyPrinter.xmlFormat().trim(); } private static void handleException(String msg) { log.error(msg); throw new IllegalArgumentException(msg); } /** * Returns the RDBMS engine name by analyzing the JDBC URL. */ public static String getRDBMSEngine(String jdbcUrl) { Pattern p = Pattern.compile("jdbc:[a-zA-Z0-9]+"); Matcher m = p.matcher(jdbcUrl); while (m.find()) { if (NDataSourceClientConstants.JDBCDriverPrefixes.MYSQL.equals(m.group())) { return NDataSourceClientConstants.RDBMSEngines.MYSQL; } else if (NDataSourceClientConstants.JDBCDriverPrefixes.DERBY.equals(m.group())) { return NDataSourceClientConstants.RDBMSEngines.DERBY; } else if (NDataSourceClientConstants.JDBCDriverPrefixes.MSSQL.equals(m.group())) { return NDataSourceClientConstants.RDBMSEngines.MSSQL; } else if (NDataSourceClientConstants.JDBCDriverPrefixes.ORACLE.equals(m.group())) { return NDataSourceClientConstants.RDBMSEngines.ORACLE; } else if (NDataSourceClientConstants.JDBCDriverPrefixes.DB2.equals(m.group())) { return NDataSourceClientConstants.RDBMSEngines.DB2; } else if (NDataSourceClientConstants.JDBCDriverPrefixes.HSQLDB.equals(m.group())) { return NDataSourceClientConstants.RDBMSEngines.HSQLDB; } else if (NDataSourceClientConstants.JDBCDriverPrefixes.POSTGRESQL.equals(m.group())) { return NDataSourceClientConstants.RDBMSEngines.POSTGRESQL; } else if (NDataSourceClientConstants.JDBCDriverPrefixes.SYBASE.equals(m.group())) { return NDataSourceClientConstants.RDBMSEngines.SYBASE; } else if (NDataSourceClientConstants.JDBCDriverPrefixes.H2.equals(m.group())) { return NDataSourceClientConstants.RDBMSEngines.H2; } else if (NDataSourceClientConstants.JDBCDriverPrefixes.INFORMIX.equals(m.group())) { return NDataSourceClientConstants.RDBMSEngines.INFORMIX_SQLI; } } return NDataSourceClientConstants.RDBMSEngines.GENERIC; } /** * Sanitize the input to prevent XSS. * * @param input {String} input to be sanitize * @return {String} sanitized input value or null */ private static String sanitizeInput(String input) { if (input == null || input.isEmpty()) { return null; } return input.replaceAll("(?i)<script.*?>.*?</script.*?>", "").replaceAll("(?i)<script.*?>", "") .replaceAll("(?i)<script.*?/>", "").replaceAll("(?i)<iframe.*?>.*?</iframe.*?>", "") .replaceAll("(?i)<iframe.*?>", "").replaceAll("(?i)<iframe.*?/>", "") .replaceAll("(?i)<object.*?>.*?</object.*?>", "").replaceAll("(?i)<object.*?>", "") .replaceAll("(?i)<object.*?/>", "").replaceAll("(?i)<.*?javascript:.*?>.*?</.*?>", "") .replaceAll("(?i)<.*?javascript:.*?>", "").replaceAll("(?i)<.*?javascript:.*?/>", "") .replaceAll("(?i)<.*?onload=.*?>.*?</.*?>", "").replaceAll("(?i)<.*?onload=.*?>", "") .replaceAll("(?i)<.*?onload=.*?/>", "").replaceAll("(?i)<.*?expression.*?>.*?</.*?>", "") .replaceAll("(?i)<.*?expression.*?>", "").replaceAll("(?i)<.*?expression.*?/>", "") .replaceAll("(?i)<.*?\\\\s+on.*?>.*?</.*?>", "").replaceAll("(?i)<.*?\\\\s+on.*?>", "") .replaceAll("(?i)<.*?\\\\s+on.*?/>", ""); } }