【发布时间】:2021-08-09 07:31:13
【问题描述】:
我正在尝试使用Moxy Marshalling 方法创建XML。除了一件小事外,一切似乎都运行良好。基本上,我想知道如何在编组过程中将包装器元素添加到类本身。
正如我们所知,我们可以添加 @XmlPath("test/name/text()") 以将包装器添加到任何 String 元素。我们也可以使用@XmlElementWrapper(name="languages")、@XmlElement(name="language") 进行收集。但这些适用于class 中的字段。如何将包装器元素添加到正在编组的类本身?
我有以下课程:
@XmlRootElement(name = "customer")
@XmlType(name="customer",propOrder={"name","languages"})
@XmlAccessorType(XmlAccessType.FIELD)
public class Customer{
@XmlPath("extension/name/text()")
private String name;
@XmlElementWrapper(name = "languages")
@XmlElement(name = "language")
private List<String> languages;
//Getter, Setter and other constuctors
}
这将产生类似这样的输出XML:
<customer>
<extension>
<name>Hello</name>
</extension>
<languages>
<language>English</language>
<language>UK English</language>
</languages>
</customer>
但是,我想将wrapper 元素添加到整个类的事件中,以便输出看起来像这样:(注意整个customer 是classWrapper 中的包装器)
<classWrapper>
<customer>
<extension>
<name>Hello</name>
</extension>
<languages>
<language>English</language>
<language>UK English</language>
</languages>
</customer>
</classWrapper>
我尝试将@XmlPath 和@XmlElementWrapper 添加到Customer 类,但它会引发错误,因为它只能添加到类中的字段而不是整个类。
以下是我的 Main 类,将用于编组:
public class HelloWorld{
public static void main(String []args){
Customer customer = new Customer();
List<String> languages = new ArrayList<String>();
languages.add("English");
languages.add("UK English");
customer.setName("Hello");
customer.setLanguages(languages);
JAXBContext context = JAXBContext.newInstance(Customer.class);
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
marshaller.marshal(customer,System.out);
}
}
我知道我可以编写另一个wrapper 类,将自定义字段添加到其中,然后将wrapper 类用于marshalling。实际上,我现在正在做同样的事情。但是,尝试查找是否有一些 Moxy 方法来执行此操作,类似于我们的 @XmlPath 和 @XmlElementWrapper
有人可以建议某种形式的Moxy Jaxb 相关方法来实现整个班级的包装元素吗?
【问题讨论】:
-
我能够找到解决此问题的临时解决方法。我在这里发布相同的内容。如果我能找到不同的东西,我会在这里更新。
标签: java xml jaxb marshalling moxy