栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何使用JaXB获得验证事件?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何使用JaXB获得验证事件?

以下内容应有所帮助:

JAXB2ValidationEventCollector

ValidationEventCollector
来自JAXB
1(JSR-31),
并且似乎不太支持我们在JAXB
2(JSR-222)中
对验证所做的更改。您可以通过创建
ValidationEventHandler
类似于以下内容的子类来解决此问题。

package forum12295028;import javax.xml.bind.ValidationEvent;import javax.xml.bind.util.ValidationEventCollector;class JAXB2ValidationEventCollector extends ValidationEventCollector {    @Override    public boolean handleEvent(ValidationEvent event) {        super.handleEvent(event);        return true;    }}

以下示例可用于证明一切正常

顾客

package forum12295028;import java.util.*;import javax.xml.bind.annotation.*;@XmlRootElementpublic class Customer {    private String name;    private List<PhoneNumber> phoneNumbers =         new ArrayList<PhoneNumber>();    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    @XmlElement(name="phone-number")    public List<PhoneNumber> getPhoneNumbers() {        return phoneNumbers;    }    public void setPhoneNumbers(List<PhoneNumber> phoneNumbers) {        this.phoneNumbers = phoneNumbers;    }}

电话号码

package forum12295028;public class PhoneNumber {}

客户.xsd

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">    <xs:element name="customer">        <xs:complexType> <xs:sequence>     <xs:element name="name" type="stringMaxSize5"/>     <xs:element ref="phone-number" maxOccurs="2"/>  </xs:sequence>        </xs:complexType>    </xs:element>    <xs:element name="phone-number">        <xs:complexType> <xs:sequence/>        </xs:complexType>    </xs:element>    <xs:simpleType name="stringMaxSize5">        <xs:restriction base="xs:string"> <xs:maxLength value="5"/>        </xs:restriction>    </xs:simpleType></xs:schema>

input.xml

<?xml version="1.0" encoding="UTF-8"?><customer>   <name>Jane Doe</name>   <phone-number/>   <phone-number/>   <phone-number/></customer>

演示版

package forum12295028;import java.io.File;import javax.xml.XMLConstants;import javax.xml.bind.*;import javax.xml.bind.util.ValidationEventCollector;import javax.xml.validation.*;public class Demo {    public static void main(String[] args) throws Exception {        SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);         Schema schema = sf.newSchema(new File("src/forum12295028/customer.xsd"));        JAXBContext jc = JAXBContext.newInstance(Customer.class);        Unmarshaller unmarshaller = jc.createUnmarshaller();        unmarshaller.setSchema(schema);        ValidationEventCollector validationCollector = new JAXB2ValidationEventCollector();        unmarshaller.setEventHandler(validationCollector);        Customer customer = (Customer) unmarshaller.unmarshal(new File("src/forum12295028/input.xml"));        if(validationCollector.hasEvents())        { for(ValidationEvent event:validationCollector.getEvents()) {     String msg = event.getMessage();     System.out.println(msg); }        }    }}

输出量

cvc-maxLength-valid: Value 'Jane Doe' with length = '8' is not facet-valid with respect to maxLength '5' for type 'stringMaxSize5'.cvc-type.3.1.3: The value 'Jane Doe' of element 'name' is not valid.cvc-complex-type.2.4.d: Invalid content was found starting with element 'phone-number'. No child element is expected at this point.


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/454721.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号