Jaxb 带有合格类型引用的不合格元素

Jaxb 带有合格类型引用的不合格元素,jaxb,jaxb2,Jaxb,Jaxb2,我实际上是在尝试从JAXB注释生成以下XML块 <pCredentials xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns3:LoginCredentials"> <loginId>user</loginId> <loginPassword>password</loginPassword>

我实际上是在尝试从JAXB注释生成以下XML块

<pCredentials xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:type="ns3:LoginCredentials">
        <loginId>user</loginId>
        <loginPassword>password</loginPassword>
        <userType>super</userType>
     </pCredentials>
但它会产生以下结果:

   <pCredentials>
        <loginId>user</loginId>
        <loginPassword>password</loginPassword>
        <userType>super</userType>
     </pCredentials>
@XmlElement(type = Object.class)
private LoginCredentials pCredentials;

用户
密码
超级的
关于我可以提供哪种类型的注释来生成类型引用,有什么建议吗


感谢您的帮助…当值的Java类型与元素的预期类型不匹配时,JAXB实现只会添加一个
xsi:type
属性。这就是为什么您尝试的方法不起作用(因为您说的元素类型与值的类型相同)

您可以执行以下操作:

   <pCredentials>
        <loginId>user</loginId>
        <loginPassword>password</loginPassword>
        <userType>super</userType>
     </pCredentials>
@XmlElement(type = Object.class)
private LoginCredentials pCredentials;
注意

  • 要取消编组的XML中需要
    xsi:type
    属性
  • 您需要将
    LoginCredentials
    包含在用于引导
    JAXBContext
    的类列表中
了解更多信息


当值的Java类型与元素的预期类型不匹配时,JAXB实现只会添加
xsi:type
属性。这就是为什么您尝试的方法不起作用(因为您说元素类型与值的类型相同)

您可以执行以下操作:

   <pCredentials>
        <loginId>user</loginId>
        <loginPassword>password</loginPassword>
        <userType>super</userType>
     </pCredentials>
@XmlElement(type = Object.class)
private LoginCredentials pCredentials;
注意

  • 要取消编组的XML中需要
    xsi:type
    属性
  • 您需要将
    LoginCredentials
    包含在用于引导
    JAXBContext
    的类列表中
了解更多信息


非常感谢……这是一个非常简单的解决方案,而且很有效。很棒的博客帖子……它帮助澄清了我的问题。非常感谢……这是一个非常简单的解决方案,非常有效。很棒的博客帖子……它帮助澄清了我的问题。