Overview
Java service to validate the XML against an XSD file present in a location without creating the webMethods Integration Server document type on Integration Server.
Input: xmlData, xsdPath
Output: isValid
errorMessage
import com.wm.data.*;
import com.wm.util.Values;
import com.wm.app.b2b.server.Service;
import com.wm.app.b2b.server.ServiceException;
import com.wm.util.ServerException;
import java.io.File;
import java.io.IOException;
import java.io.StringReader;
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.xml.sax.SAXException;
public final class validateXML_SVC
{
/**
* The primary method for the Java service
*
* @param pipeline
* The IData pipeline
* @throws ServiceException
*/
public static final void validateXML(IData pipeline) throws ServiceException {
// pipeline
IDataCursor pipelineCursor = pipeline.getCursor();
String xmlData = IDataUtil.getString( pipelineCursor, "xmlData" );
String xsdPath = IDataUtil.getString( pipelineCursor, "xsdPath" );
String errorMessage="";
Boolean isValid=true;
try {
SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = factory.newSchema(new File(xsdPath));
Validator validator = schema.newValidator();
StringReader reader = new StringReader(xmlData);
validator.validate(new StreamSource(reader));
} catch (IOException | SAXException e) {
System.out.println("Exception: "+e.getMessage());
errorMessage = e.toString();
isValid=false;
}
IDataUtil.put( pipelineCursor, "isValid", isValid);
IDataUtil.put( pipelineCursor, "errorMessage", errorMessage);
pipelineCursor.destroy();
}
// --- <<IS-BEGIN-SHARED-SOURCE-AREA>> ---
// --- <<IS-END-SHARED-SOURCE-AREA>> ---
final static validateXML_SVC _instance = new validateXML_SVC();
static validateXML_SVC _newInstance() { return new validateXML_SVC(); }
static validateXML_SVC _cast(Object o) { return (validateXML_SVC)o; }
}
Results:
Scenario 1:
xmlData=
<?xml version="1.0"?>
<note xmlns="https://www.w3schools.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://www.w3schools.com note.xsd">
<to>a</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
xsdPath=C:\SoftwareAG103\IntegrationServer\instances\default\note.xsd
isValid=false
errorMessage=org.xml.sax.SAXParseException; lineNumber: 7; columnNumber: 11; cvc-datatype-valid.1.2.1: ‘a’ is not a valid value for ‘integer’.
Scenario 2:
xmlData=
<?xml version="1.0"?>
<note xmlns="https://www.w3schools.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://www.w3schools.com note.xsd">
<to>1</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
xsdPath=C:\\SoftwareAG103\\IntegrationServer\\instances\\default\\note.xsd
isValid=true
Feel free to post comments or email if you have any questions.
Cheers,
Mahesh K Sreenivas
Senior Integration Consultant and Architect
Further read:
Did you find this article useful? Maybe you’d like to get familiar with webMethods Flow services? Learn more in the 1st of the tutorial series: webMethods Flow Tutorial - No.1 Create an IS Package and Folders