gpt4 book ai didi

java - JAXB XML 必需字段验证

转载 作者:行者123 更新时间:2023-12-01 09:03:27 25 4
gpt4 key购买 nike

我正在尝试验证传入的 XML 字符串[数据类型、强制、长度验证]。

首先,我使用 JAXB 将传入的 xml 转换为相应的 Java POJO 对象,在解码时我需要使用 JAXB 验证。我传入的 xml 字符串如下所示。

<Message>
<Body>
<Id></Id> // This is Mandatory field but incoming value is empty also it is integer field
<Name>Siva</Name> // Input is valid
<Age>ss</Age> // This is integer fields but incoming value is string
<Mobile>999999999999999</Mobile> // length should be 10.. but is is exceeded
</Body>
</Message>

我的 XSD 是:

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="Mobile">
<xs:simpleType>
<xs:restriction base="xs:long">
<xs:minLength value="10"/>
<xs:maxLength value="10"/>
</xs:restriction>
</xs:simpleType>
</xs:element>

<xs:element name="Message">
<xs:complexType>
<xs:sequence>
<xs:element name="Body">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:int" name="Id" minOccurs="1"/>
<xs:element type="xs:string" name="Name"/>
<xs:element type="xs:string" name="Age"/>
<xs:element type="xs:long" name="Mobile"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

我的 JAXB Java 代码:

JAXBContext context = JAXBContext.newInstance(Employee.class);

SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = sf.newSchema(new File("resources/Employee.xsd"));

Unmarshaller unmarshaller = context.createUnmarshaller();

unmarshaller.setSchema(schema);
unmarshaller.setEventHandler(new EmployeeValidationEventHandler());

Employee employee = (Employee) unmarshaller.unmarshal(new File("resources/Employee.xml"));

我尝试了一切,但它对我不起作用。请帮助我。

最佳答案

对于移动元素,XSD 中没有正确的类型引用。像这样尝试一下。

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Message">
<xs:complexType>
<xs:sequence>
<xs:element name="Body">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:int" name="Id" minOccurs="1"/>
<xs:element type="xs:string" name="Name"/>
<xs:element type="xs:string" name="Age"/>
<xs:element name="Mobile">
<xs:simpleType>
<xs:restriction base="xs:long">
<xs:minLength value="10"/>
<xs:maxLength value="10"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>

关于java - JAXB XML 必需字段验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41483892/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com