问题描述
我对JAXB/Moxy
很陌生。我正在尝试 unmarshal
一个 XML 文件到我的 POJO。我只想在 JAXB/Moxy Unmarshalling
期间忽略一个字段,但我想在 marshaling
期间保留该字段。我尝试了很多东西,但似乎没有任何效果,所以想到发布一些建议。
我知道我可以使用 @XmlTransient
但这也会使该字段在 marshaling
中不可用。经过大量试验和研究,我了解了 @XmlNamedobjectGraphs
但这仅适用于 marshaling
,当我为 MOXY unmarshaller
添加属性时,它似乎没有任何区别。
有什么我遗漏的吗?我找不到任何 @XmlNamedobjectGraphs
与 unmarshller
一起使用的示例,大多数示例都与 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 (将#修改为@)