是否可以仅在 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.JdbcOdbc...