java - 使用 validator 针对 xsd 验证soap xml

标签 java xml validation xsd

我想根据给定的xsd验证soap请求xml,请求可能很大,所以我不能只提取soap主体的内容并进行验证,而是进行基于流的验证。我已经为soap主体(请求部分)制作了xsd,并且它不包含有关soap header 的任何信息,因此验证失败,我所做的是将soap模式导入到我的xsd中,以便验证程序可以识别soap header 。它有效,但即使肥皂体不包含任何东西,验证也会成功。我们如何在 xsd 中指定肥皂体应至少包含特定元素?我修改后的xsd粘贴在下面。谢谢。

<?xml version="1.0" encoding="utf-8"?>
<xsd:schema attributeFormDefault="qualified" targetNamespace="urn:sample"
            xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="sample">
    <xsd:import namespace="http://schemas.xmlsoap.org/soap/envelope/"
                schemaLocation="http://schemas.xmlsoap.org/soap/envelope/"/>
    <xsd:complexType name="type1">
        <xsd:sequence>
            <xsd:element name="item" type="tns:type2" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="type3">
        <xsd:sequence>
            <xsd:element name="item" type="tns:type4" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
    </xsd:complexType>
    <xsd:element name="element1">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="RETURN" type="tns:type3" minOccurs="0"/>
                <xsd:element name="HEADER" type="tns:type1"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
    <xsd:element name="element2">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="RETURN" type="tns:type3" minOccurs="0"/>
                <xsd:element name="ERRORS" type="xsd:int"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>

最佳答案

尝试类似的操作:

SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
FileInputStream fileInputStream = new FileInputStream(new File("Simple.xsd"));  
Schema schema = factory.newSchema(new StreamSource(fileInputStream));  
Validator val = schema.newValidator(); 
FileInputStream fileInputStream2 = new FileInputStream(new File("Input.xml"));  
val.validate(new StreamSource(fileInputStream2));

关于java - 使用 validator 针对 xsd 验证soap xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35292015/

相关文章:

java - 使用Apache POI从java中的excel表中读取数据

c# - 即使使用 namespace 管理,SelectSingleNode 也会返回 null

php - 通过邮寄用 php 发送 XML

xml - 选择 xml 属性

javascript - 字符串时间验证(在 javascript 中)

java - Apache Ignite 缓存与 Postgresql

java - 如何使用 Angular 2 在 Spring 引导中导出 excel 文件?

c# - ASP.Net C# Ajax 表单验证和提交按钮状态

java - 如何在 Java 中使用字符堆栈验证 JSON 语法?

java - 使用自定义标记 (taglib) 在 JSP 上提示 Eclipse 代码