当前位置: 首页 > 知识库问答 >
问题:

JAXB xml验证

郑伟彦
2023-03-14
 <xsd:complexType name="RemoteHost">
   <xsd:annotation>
     <xsd:appinfo>  
       <jaxb:class ref="com.dummy.entities.RemoteHost"></jaxb:class>
     </xsd:appinfo>
   </xsd:annotation>
 </xsd:complexType>
<xsd:complexType name="hostFirstSubType">
    <xsd:complexContent>
        <xsd:extension base="RemoteHost">
        </xsd:extension>        
    </xsd:complexContent>        
</xsd:complexType>

<xsd:complexType name="otherHostType">
    <xsd:complexContent>
        <xsd:extension base="RemoteHost">
            <xsd:attribute name="id" type="xsd:int" />
        </xsd:extension>            
    </xsd:complexContent>        
</xsd:complexType> 

类定义为:

@SuppressWarnings("restriction")
@XmlAccessorType(XmlAccessType.NONE)
@XmlType(name = "GenericRemoteHost",propOrder = {
        "address",
        "username",
        "password",
        "sshPort"
    })
public class RemoteHost {

    @XmlElement(required = true, namespace = "http://com/dummy/entities/RemoteHost")
    protected String  address;
    @XmlElement
    protected String  username;
    @XmlElement
    protected String  password;
    @XmlElement
    protected Integer sshPort;
    ...

要加载的xml示例部分:

        <hostFirstSubType>
            <rh:address>127.0.0.1</rh:address>
            <rh:username>user</rh:username>
            <rh:password>pass</rh:password>                             
            <rh:sshPort>22</rh:sshPort>             
        </hostFirstSubType>

        <otherHostType id="1">
            <rh:address>127.0.0.1</rh:address>
            <rh:username>user</rh:username>
            <rh:password>pass</rh:password>                             
            <rh:sshPort>22</rh:sshPort>             
        </otherHostType>    

我创建了一个验证收集器,以显示针对架构解封xml文件过程中所有验证错误,但结果令人困惑:验证收集器将继承我的RemoteHost的每个类的验证错误显示为:

元素“host firstsubtype”不能有字符或元素信息项[children],因为该类型的内容类型为空。

元素“Other HostType”必须没有字符或元素信息项[childrens],因为该类型的内容类型为空

然而,当我跳过验证部分时,xml文件被正确地加载到java对象中,所有数据都被加载并且可以通过getter和setter访问。

有没有人知道要找什么...

共有1个答案

董花蜂
2023-03-14

你所看到的行为与你所拥有的相匹配:

  1. 您的XML包含未在XML架构中定义的元素,因此会出现验证错误。
  2. 您的XML包含映射到您的对象模型的元素,并且这是正常工作的。

您可以做的事情:

    null
 类似资料:
  • 我指的是HATEOAS/超媒体应用编程接口意义上的“结构链接”。更一般的问题是如何使用既依赖于被封送的实体,又依赖于环境(在本例中,至少是绝对URL)的数据来扩充生成的XML。 我正在使用与Moxy 2.5一起使用的泽西2.9作为JAXB提供程序。 根据该模型: 我想得到这样的XML(以及等效的JSON): 模型没有“href”字段,也不能添加一个。理想情况下,我可以使用UriBuilder直接从

  • 接口说明 验证验证码 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 如开启https功能,请求地址的协议应改为https,如:https://www.example.com/wish3dearth/api/access/v1.0.0/getLicenseInfo API地址 GET /authcenter/api/verify/v1.0.0/check

  • 我需要应用一个双值验证,这需要与圆周率匹配。我正在考虑使用@pattern(regex=“3.14159265359”)。这是使用Hibernate验证约束应用这样一个约束的最佳方式吗?谢谢

  • 我现在把这两者搞混了。我知道Hibernate Validator6是Bean验证2.0规范的参考实现。它支持分组、错误消息国际化、自定义方法验证等。问题是Spring5支持这些特性还是我只剩下Hibernate Validator6了? 网上所有的参考例子都建议使用Hibernate验证器,没有什么关于Spring验证的发现,请建议或指向其他链接。

  • 我有以下场景:我正在尝试处理一个表单,模型属性是一个具有String和Long属性的bean。众所周知,bean验证提供了很多注释来帮助我们确定数据的有效性。我面临的是,对于Long属性的情况,我只能使用@NotNull和另一个注释(我不记得它的名字)来强制用户输入正数。如果用户输入例如“sdf”,应用程序会抛出一个BIG异常。所以我想知道的是,如果用户在爆炸前输入了一个数字(因为我不能使用@Pa

  • 我刚接触vee validate。我想知道您如何验证按钮是否已按下。我已经用ValidationObserver包装了我的表单,其中有一个v形槽无效。我希望用户被要求选择一个按钮,这将允许用户继续到下一页。 代码验证观察员,我包装我的表单: 下面的代码是我需要知道如何设置用户从列表中选择按钮所需的验证。 和结束我的形式我有按钮,允许用户继续。该按钮将被禁用,直到表单完成并且没有验证错误。但我也想确

  • 我已经使用extend from创建了自定义规则。所以我有这个 当为false且为true时,从上述代码中,它会被上一条规则覆盖,因此结果始终被视为true而不是false 那么我如何才能做到这一点呢? 规则:

  • 我正在测试带注释的javax验证。它们在应用程序中工作良好,方法参数上有注释。但是当我试图通过手动构建验证工厂来测试它们时 我得到以下错误。 javax。验证。ValidationException:HV000183:无法初始化“javax”。艾尔。“表达工厂”。检查类路径上是否有EL依赖项,或者改用ParameterMessageInterpolator 收到这个错误后,我在gradle文件中添