Java 如何使用XML输入变量以根据XSD进行验证

Java 如何使用XML输入变量以根据XSD进行验证,java,javascript,xml,xsd,jaxp,Java,Javascript,Xml,Xsd,Jaxp,我用这段代码用XSD对XML文件进行验证。这段代码有效 var schemaFile = new Packages.java.io.File("C:\\schema.xsd"); var url = new Packages.java.net.URL("file:C:\\input.xml"); var xmlFile = new Packages.javax.xml.transform.stream.StreamSource(url); var schemaFactory = Packages

我用这段代码用XSD对XML文件进行验证。这段代码有效

var schemaFile = new Packages.java.io.File("C:\\schema.xsd");
var url = new Packages.java.net.URL("file:C:\\input.xml");
var xmlFile = new Packages.javax.xml.transform.stream.StreamSource(url);
var schemaFactory = Packages.javax.xml.validation.SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
var schema = schemaFactory.newSchema(schemaFile);

var validator = schema.newValidator();

try {
    validator.validate(xmlFile);
    logger.info('valid');
} catch (err) {
    logger.error(err.toString());
}
但是现在,这里不再使用XML文件作为输入

var xmlFile = new Packages.javax.xml.transform.stream.StreamSource(url);
我想使用一个在前面传递的变量,该变量中包含XML。如果我在那里写变量

var xmlFile = new Packages.javax.xml.transform.stream.StreamSource(msg);
我得到一个错误协议

JavaException: java.net.MalformedURLException: no protocol:

这是因为StreamSource需要一个指定的协议,对于一个文件来说很容易(File:path)。如何将变量而不是文件放在那里?

javax.xml.transform.stream.StreamSource可以从URL、InputStream或Reader构建。如果
msg
是您的xml。使用该字符串创建一个StringReader,并用它实例化
StreamSource

您可以使用,它有一个接受参数的构造函数

有一个
InputSource
构造函数接受一个参数,因此您可以使用该构造函数并使用实现

代码:

var reader = new Packages.java.io.StringReader(msg);
var source = new Packages.org.xml.sax.InputSource(reader);
var xmlFile = new Packages.javax.xml.transform.sax.SAXSource(source);