网页设计跟网站建设的区别,云服务器做网站要备案吗,wordpress 模块,seo优化包括哪些似乎存在一个误解#xff0c;认为在模型上需要使用批注才能使用JAXB#xff08;JSR-222#xff09;实现。 事实是#xff0c;JAXB是例外配置#xff0c;因此仅当您要覆盖默认行为时才需要注释。 在此示例中#xff0c;我将演示如何在不提供任何元数据的情况下使用JAXB。 … 似乎存在一个误解认为在模型上需要使用批注才能使用JAXBJSR-222实现。 事实是JAXB是例外配置因此仅当您要覆盖默认行为时才需要注释。 在此示例中我将演示如何在不提供任何元数据的情况下使用JAXB。 领域模型 在此示例中我将使用以下域模型。 注意如何没有任何类型的注释。 顾客 在此示例中 客户是根对象。 通常我们将使用XmlRootElement对其进行注释 。 稍后在演示代码中您将看到我们如何使用JAXBElement实例。 package blog.defaults;import java.util.List;public class Customer {private String firstName;private String lastName;private ListPhoneNumber phoneNumbers;public String getFirstName() {return firstName;}public void setFirstName(String firstName) {this.firstName firstName;}public String getLastName() {return lastName;}public void setLastName(String lastName) {this.lastName lastName;}public ListPhoneNumber getPhoneNumbers() {return phoneNumbers;}public void setPhoneNumbers(ListPhoneNumber phoneNumbers) {this.phoneNumbers phoneNumbers;}} 电话号码 我有目的地给了此类中的字段废话名称以便稍后在查看XML时您将能够看到默认情况下元素名称是从属性而不是字段派生的。 package blog.defaults;public class PhoneNumber {private String foo;private String bar;public String getType() {return foo;}public void setType(String type) {this.foo type;}public String getNumber() {return bar;}public void setNumber(String number) {this.bar number;}} 示范代码 由于我们没有使用XmlRootElement 或XmlElementDecl 将根元素与Customer类相关联因此我们需要告诉JAXB我们要将XML文档解组到哪个类。 这可以通过使用采用Class参数第14行的解组方法之一来完成。 这将返回J AXBElement 然后通过在其上调用getValue来访问Customer对象第15行。 为了将对象封送回XML我们需要确保将其包装在JAXBElement中以提供根元素信息第17行。 package blog.defaults;import javax.xml.bind.*;
import javax.xml.namespace.QName;
import javax.xml.transform.stream.StreamSource;public class Demo {public static void main(String[] args) throws Exception {JAXBContext jc JAXBContext.newInstance(Customer.class);StreamSource xml new StreamSource(src/blog/defaults/input.xml);Unmarshaller unmarshaller jc.createUnmarshaller();JAXBElementCustomer je1 unmarshaller.unmarshal(xml, Customer.class);Customer customer je1.getValue();JAXBElementCustomer je2 new JAXBElementCustomer(new QName(customer), Customer.class, customer);Marshaller marshaller jc.createMarshaller();marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);marshaller.marshal(je2, System.out);}} input.xml /输出 以下是运行演示代码的输入和输出。 我们首先看到的是它是数据的非常合理的XML表示形式没有任何JAXB工件。 默认情况下JAXB将所有内容封送为XML元素根据PhoneNumber类我们看到元素名称是从属性名称派生的。 ?xml version1.0 encodingUTF-8?
customerfirstNameJane/firstNamelastNameDoe/lastNamephoneNumbersnumber555-1111/numbertypework/type/phoneNumbersphoneNumbersnumber555-2222/numbertypehome/type/phoneNumbers
/customer 进一步阅读 如果您喜欢这篇文章那么您可能也会对以下内容感兴趣 该博客上的大多数文章都描述了如何利用JAXB元数据的功能来支持不同的用例我邀请您检查一下它们 http://blog.bdoughan.com/?tagjaxb 如果您有兴趣在不使用批注的情况下指定元数据则可能对EclipseLink JAXBMOXy的外部映射文档感兴趣 扩展JAXB –将元数据表示为XML 扩展JAXB –将元数据表示为JSON 参考 JAXB – Java XML和JSON绑定博客中的JCG合作伙伴 Blaise Doughan 不需要注释 。 翻译自: https://www.javacodegeeks.com/2012/07/jaxb-no-annotations-required.html