java.net.MalformedURLException:使用xsd架构验证xml字符串时没有协议
我试图用xsd模式验证xml,但在验证时 java.net.MalformedURLException:无协议: 到目前为止,我所做的是java.net.MalformedURLException:使用xsd架构验证xml字符串时没有协议,java,xml,xsd,Java,Xml,Xsd,我试图用xsd模式验证xml,但在验证时 java.net.MalformedURLException:无协议: 到目前为止,我所做的是 public boolean ValidateXML(String xmlContent) throws Exception { try { SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_S
public boolean ValidateXML(String xmlContent) throws Exception {
try
{
SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = factory.newSchema(getClass().getClassLoader().getResource("ABC/XYX/PQR.xsd"));
Validator validator = schema.newValidator();
validator.validate(new StreamSource(xmlContent));
}...
出了什么问题,validator.validate这一步它引发了一个异常,我需要在这里提供编码字符串吗
如果我使用文件,我指的是来自文件的xmlContent
validator.validate(new StreamSource(new File(filePath)));
那么它工作得很好。
我不希望xml内容来自文件,而是来自字符串对象将字符串转换为StreamResource:
validator.validate(new StreamSource(new ByteArrayInputStream(xmlContent.getBytes(StandardCharsets.UTF_8))));
将字符串转换为StreamResource:
validator.validate(new StreamSource(new ByteArrayInputStream(xmlContent.getBytes(StandardCharsets.UTF_8))));
Balázs Nemes的回答很好。对于旧版本的Java,您可能没有可用的
StandardCharsets.UTF_8
。我们有一个Java 1.6应用程序,并使用兼容的Apache Commons库,因此使用字符串xml
:
import org.apache.commons.codec.CharEncoding;
validator.validate(new StreamSource(new ByteArrayInputStream(xml.getBytes(org.apache.commons.codec.CharEncoding.UTF_8))));
Balázs Nemes的回答很好。对于旧版本的Java,您可能没有可用的
StandardCharsets.UTF_8
。我们有一个Java 1.6应用程序,并使用兼容的Apache Commons库,因此使用字符串xml
:
import org.apache.commons.codec.CharEncoding;
validator.validate(new StreamSource(new ByteArrayInputStream(xml.getBytes(org.apache.commons.codec.CharEncoding.UTF_8))));
是的,它成功了,谢谢。它需要编码,不是字符串处理的。问题不是编码,而是StreamResource构造函数中的错误类型。如果您使用字符串参数调用StreamResource构造函数,它会尝试将此字符串解析为URL。请参阅文档:我的建议使用InputStream参数调用StreamResource构造函数,为此,我使用InputStream包装了xmlContent字符串。是的,它起作用了,谢谢。它需要编码,不是字符串处理的。问题不是编码,而是StreamResource构造函数中的错误类型。如果您使用字符串参数调用StreamResource构造函数,它会尝试将此字符串解析为URL。请参阅文档:我的建议使用InputStream参数调用StreamResource构造函数,为此,我使用InputStream包装了xmlContent字符串。