summaryrefslogtreecommitdiffstats
path: root/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/XMLValidator.java
diff options
context:
space:
mode:
Diffstat (limited to 'mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/XMLValidator.java')
-rw-r--r--mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/XMLValidator.java103
1 files changed, 103 insertions, 0 deletions
diff --git a/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/XMLValidator.java b/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/XMLValidator.java
new file mode 100644
index 0000000000..bd73b226a2
--- /dev/null
+++ b/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/XMLValidator.java
@@ -0,0 +1,103 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * OPENECOMP - MSO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.mso.apihandler.common;
+
+
+import java.io.FileInputStream;
+import java.io.IOException;
+
+import javax.xml.XMLConstants;
+import javax.xml.transform.Source;
+import javax.xml.transform.stream.StreamSource;
+import javax.xml.validation.Schema;
+import javax.xml.validation.SchemaFactory;
+import javax.xml.validation.Validator;
+
+import org.apache.commons.io.IOUtils;
+import org.xml.sax.SAXException;
+
+import org.openecomp.mso.logger.MessageEnum;
+import org.openecomp.mso.logger.MsoAlarmLogger;
+import org.openecomp.mso.logger.MsoLogger;
+
+public class XMLValidator {
+
+ private static String XSDS_PATH;
+
+ static {
+ String prefixMsoPropertiesPath = System.getProperty ("mso.config.path");
+ if (prefixMsoPropertiesPath == null) {
+ prefixMsoPropertiesPath = "";
+ }
+ XSDS_PATH = prefixMsoPropertiesPath + "xsds/";
+ }
+
+ private String stringXsd;
+ private String errorMsg = null;
+ private SchemaFactory factory;
+ private Schema schema;
+
+ private static MsoLogger msoLogger = MsoLogger.getMsoLogger (MsoLogger.Catalog.APIH);
+ private static MsoAlarmLogger alarmLogger = new MsoAlarmLogger ();
+
+ public XMLValidator (String xsdFile) {
+
+ try (FileInputStream xsdStream = new FileInputStream (XSDS_PATH + xsdFile)) {
+
+ stringXsd = IOUtils.toString (xsdStream);
+
+ factory = SchemaFactory.newInstance (XMLConstants.W3C_XML_SCHEMA_NS_URI);
+ factory.setResourceResolver ((new PathResourceResolver (XSDS_PATH)));
+ factory.setFeature (XMLConstants.FEATURE_SECURE_PROCESSING, true);
+
+ String quotedXsd = stringXsd.replaceAll (""", "\"");
+ Source src = new StreamSource (new java.io.StringReader (quotedXsd));
+ schema = factory.newSchema (src);
+
+ } catch (IOException | SAXException e) {
+ msoLogger.debug ("Cannot open file " + XSDS_PATH + xsdFile, e);
+ errorMsg = "ErrorDetails: xsd file " + xsdFile + "could not be opened - " + e.getMessage ();
+ }
+ }
+
+ // Returns null when XML valid, otherwise returns error details.
+ public String isXmlValid (String stringXml) {
+ try {
+ if (errorMsg != null && !errorMsg.isEmpty ()) {
+ return errorMsg;
+ }
+ Source src2 = new StreamSource (new java.io.StringReader (stringXml));
+ Validator validator = schema.newValidator ();
+ validator.validate (src2);
+
+ } catch (IOException | SAXException e) {
+ msoLogger.debug ("Exception: ", e);
+ return ("ErrorDetails: " + e.getMessage ());
+
+ } catch (Exception e) {
+ msoLogger.error (MessageEnum.APIH_CANNOT_READ_SCHEMA, "", "", MsoLogger.ErrorCode.SchemaError, "APIH cannot read schema file", e);
+ alarmLogger.sendAlarm ("MsoConfigurationError", MsoAlarmLogger.CRITICAL, "Unable to read the schema file");
+ return "ErrorDetails: " + "Unable to read the schema file";
+ }
+
+ return null;
+ }
+}