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

以编程方式确定JAXB注释是否会导致xsi:type注释?

宗政财
2023-03-14

考虑到JAXB注释的对象,是否有办法确定类/字段/方法在封送过程中是否会导致xsi: type?

是XmlElement注释,
annotation.type!=javax.xml.bind.annotation.XmlElement.
我唯一需要担心的情况?

我正在编写一个Lua解组器,在这里我们删除了很多常见的xml类型信息,我正在尝试找出如何将传入的Lua与JAXB匹配。

谢谢

--更新--

下面是一个简单的示例,说明了问题:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement()
@XmlSeeAlso({ Cat.class, Dog.class })
public class Animal {
  @XmlElement()
  public List<Animal> critters;
  @XmlAttribute
  public String type;
}

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement()
public class Dog extends Animal {
  public Dog() {
    this.type = "German Shepherd";
  }
}

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement()
public class Cat extends Animal {
  public Cat() {
    this.type = "Black";
  }
}

当我收到一个动物对象时,我可以查询动物的注释来检测它应该是狗或猫而不是动物吗?

共有1个答案

濮阳俊明
2023-03-14

在一些情况下,JAXB(JSR-222)实现将写出xsi: type属性。

  1. 如果字段/属性的类型为Object(或用@xmlement(type=Object.class)注释)且未映射为@xmlanyement(lax=true),并且包含JAXBContext具有映射的对象实例
  2. 表示继承的默认机制将产生一个xsi:type属性来表示子类(请参阅:http://blog.bdoughan.com/2010/11/jaxb-and-inheritance-using-xsitype.html)
 类似资料:
  • 问题内容: 我有一个要求,根据字段上标记的自定义注释来编组/解组java pojo的某些元素。假设我的Java pojp中有3个字段 如果我在jaxb中进行转换时传递version =“ v1”参数,我只想编组具有v1的字段。如果我通过v2,则所有带v2注释的字段都应编组。 甚至可以使用jaxb吗?我确信选择性的编组将通过某种图书馆或某种方式得到支持,经过大量的搜索后仍无法弄清楚。任何帮助或建议或

  • 我有一个模型,其中有一个@列(nullable=false)注释HiberNate和所有字段有nullable=false,我想以编程方式添加一些新的注释,如@NotNull和@ApiModelProperty(必需=true)-用于招摇过市。 所以,我希望能够从我的应用程序的模型中解析所有字段,获得现有的注释,并在此基础上添加新的注释。这能做到吗? 更新:问题是每次添加一个新字段,如果它不能为空

  • 问题内容: 说我有两个JavaBeans 和。 如果创建一个Person对象的列表,我想编组成这样的东西: 可以使用这里描述的技术: 使用JAXB解组/编组List 通过使用和注释JaxbList,可以将其编组为上述XML。 但是,能够重用相同的类来封送对象列表也很好。实际上,我将有许多其他类型的bean。我可以这样: 但是,理想情况下,最好用类名的复数形式替换“列表”,用类名替换“ item”。

  • 你能用这个网站做个例子吗?我想忽略有评论的帖子,只点击没有评论的帖子。 我试过了,但有一个错误。 我想点击一个还没有任何评论的帖子。我想跳过有评论的帖子。我还是个初学者。救救我。

  • 我有两个类:Person和PersonAdapter。Person是从wsdl生成的,不能更改。 PersonAdapter是Person的对象适配器,具有一些附加属性。类的对象提供给我的服务的客户端。我将所有JPA和JAXB注释添加到PersonAdapter类,因为我无法更改Person类。 有没有可能解决这个问题?

  • 我正在尝试使用spring Boot运行一个web应用程序。 将密码映射为硬编码值。 我的问题是:当应用程序运行并且在主类上使用注释时,只要它命中URL就会发生以下异常: javax.servlet.ServletException:在org.springframework.web.servlet.dispatcherservlet.render(dispatcherservlet.java:13