微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否可以仅在 JAXB/Moxy 解组期间忽略字段

如何解决是否可以仅在 JAXB/Moxy 解组期间忽略字段

我对JAXB/Moxy很陌生。我正在尝试 unmarshal 一个 XML 文件到我的 POJO。我只想在 JAXB/Moxy Unmarshalling 期间忽略一个字段,但我想在 marshaling 期间保留该字段。我尝试了很多东西,但似乎没有任何效果,所以想到发布一些建议。

我知道我可以使用 @XmlTransient 但这也会使该字段在 marshaling 中不可用。经过大量试验和研究,我了解了 @XmlNamedobjectGraphs 但这仅适用于 marshaling,当我为 MOXY unmarshaller 添加属性时,它似乎没有任何区别。

有什么我遗漏的吗?我找不到任何 @XmlNamedobjectGraphsunmarshller 一起使用的示例,大多数示例都与 marshaller 一起使用,因此想询问并获得一些建议。任何帮助将不胜感激。

以下是我的 Customer POJO:我只想在 others 期间使用 marshaling 字段并在 unmarshalling 期间隐藏它。有办法吗?

@XmlNamedobjectGraphs({
    @XmlNamedobjectGraph(
        name = "full",attributeNodes = {
            @XmlNamedAttributeNode("name"),@XmlNamedAttributeNode("age"),}
    )
})
@XmlRootElement(name = "Customer")
@XmlType(name = "Customer",propOrder = {"name","age","others"})
@XmlAccessorType(XmlAccesstype.FIELD)
@Getter
@Setter
@NoArgsConstructor
public class Customer {

  private String name;
  private String age;

  @XmlPath(".")
  @XmlJavaTypeAdapter(TestAdapter.class)
  @JsonSerialize(using = CustomExtensionsSerializer.class)
  private Map<String,Object> others = new HashMap<>();

  @JsonAnySetter
  public void setothers(String key,Object value) {
    others.put(key,value);
  }
}

以下是我的XML

<Customer xmlns:google="https://google.com">
  <name>Rise Against</name>
  <age>2000</age>
  <google:sub>bye</google:sub>
</Customer>

以下是我的 Main 课:

public class Unmarshalling {

  public static void main(String[] args) throws JAXBException,XMLStreamException,FactoryConfigurationError,JsonProcessingException {

    try {
      final InputStream inputStream = Unmarshalling.class.getClassLoader().getResourceAsstream("customer.xml");
      final InputStream xsdStream = Unmarshalling.class.getClassLoader().getResourceAsstream("customer.xsd");
      final XMLStreamReader xmlStreamReader = XMLInputFactory.newInstance().createXMLStreamReader(inputStream);
      final JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class);
      final Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
      unmarshaller.setEventHandler(new DefaultValidationEventHandler());
      unmarshaller.setProperty(UnmarshallerProperties.OBJECT_GRAPH,"full");
      final Customer customer = unmarshaller.unmarshal(xmlStreamReader,Customer.class).getValue();
      System.out.println(customer);
    } catch (JAXBException exp) {
      System.out.println(exp);
    }

  }
}

有人可以建议一些解决方法吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?