如何防止XSD中出现空XML元素,并使用JAXB进行验证?

如何防止XSD中出现空XML元素,并使用JAXB进行验证?,xml,xsd,jaxb,unmarshalling,Xml,Xsd,Jaxb,Unmarshalling,为什么在解组期间JAXB生成的Java中没有强制执行minLength约束? 我有以下元素 <subHeader seqno="1"><![CDATA[sub header1]]></subHeader> 我希望我的XSD能够阻止空元素,比如 <subHeader seqno="2" /> 当前XSD: <xsd:element name="subHeader" type="subHeaderType" minOccurs="0"

为什么在解组期间JAXB生成的Java中没有强制执行
minLength
约束?

我有以下元素

<subHeader seqno="1"><![CDATA[sub header1]]></subHeader>

我希望我的XSD能够阻止空元素,比如

<subHeader seqno="2" />

当前XSD:

<xsd:element name="subHeader" type="subHeaderType" minOccurs="0" maxOccurs="unbounded">
</xsd:element> 
<xsd:complexType name="subHeaderType">
   <xsd:simpleContent>
      <xsd:extension base="NotEmpty">
         <xsd:attribute name="seqno" type="xsd:string" use="required"/>
      </xsd:extension>
   </xsd:simpleContent>
</xsd:complexType> 

<xsd:simpleType name="NotEmpty">
   <xsd:restriction base="xsd:string">
      <xsd:minLength value="1"></xsd:minLength>
      <xsd:whiteSpace value="collapse"></xsd:whiteSpace>
   </xsd:restriction>
</xsd:simpleType> 

   
      
         
      
   
   
      
      
   
您的XSD将允许

<subHeader seqno="1"><![CDATA[sub header1]]></subHeader>
代码信誉:,一个优秀的JAXB资源。

您的XSD将允许

<subHeader seqno="1"><![CDATA[sub header1]]></subHeader>

代码信任:,一个优秀的JAXB资源。

谢谢您的回复,但是在解组xml之后,我仍然可以在JAXB xjc bean中看到seqno=2属性,并且我没有看到任何为“minLength”约束/限制生成的代码,解组对象后的预期输出。getSuHeader()应该只有seqno=1数据,而不是seqno=2,请帮助我。感谢您的回复,为了您的理解,我正在从xsd生成jaxb xjc bean以解组,但是在解组xml后,我仍然可以在jaxb xjc bean中看到seqno=2属性,并且我没有看到任何生成的“minLength”约束/限制的代码,这是解组对象后的预期输出。getSuHeader()应该只有seqno=1的数据,而不是seqno=2的数据,请帮助我。那么你真的应该在你的问题中提到你的问题本质上是关于JAXB的。答案已更新。问题已更新。谢谢。谢谢你的回复,但是在解组xml之后,我仍然可以在jaxb xjc bean中看到seqno=2属性,并且我没有看到任何为“minLength”约束/限制生成的代码,解组对象后的预期输出。getSuHeader()应该只有seqno=1数据,而不是seqno=2,请帮助我。谢谢你的回复,根据您的理解,我正在从xsd生成jaxb xjc bean以解组,但是在解组xml之后,我仍然可以在jaxb xjc bean中看到seqno=2属性,并且我没有看到任何为“minLength”约束/限制生成的代码,我在解组对象之后的预期输出。getSuHeader()应该只有seqno=1数据,而不是seqno=2,请帮帮我。那么你真的应该在最初的问题中提到你的问题本质上是关于JAXB的。答案已更新。问题已更新。谢谢
package blog.jaxb.validation;

import javax.xml.bind.ValidationEvent;
import javax.xml.bind.ValidationEventHandler;

public class MyValidationEventHandler implements ValidationEventHandler {

    public boolean handleEvent(ValidationEvent event) {
        System.out.println("\nEVENT");
        System.out.println("SEVERITY:  " + event.getSeverity());
        System.out.println("MESSAGE:  " + event.getMessage());
        System.out.println("LINKED EXCEPTION:  " + event.getLinkedException());
        System.out.println("LOCATOR");
        System.out.println("    LINE NUMBER:  " + event.getLocator().getLineNumber());
        System.out.println("    COLUMN NUMBER:  " + event.getLocator().getColumnNumber());
        System.out.println("    OFFSET:  " + event.getLocator().getOffset());
        System.out.println("    OBJECT:  " + event.getLocator().getObject());
        System.out.println("    NODE:  " + event.getLocator().getNode());
        System.out.println("    URL:  " + event.getLocator().getURL());
        return true;
    }

}