JAXB中@XmlRootElement的注释在任何情况下都必须添加Java类吗?

JAXB中@XmlRootElement的注释在任何情况下都必须添加Java类吗?,jaxb,marshalling,unmarshalling,Jaxb,Marshalling,Unmarshalling,JAXB中@XmlRootElement的注释在任何情况下都必须添加Java类吗 我不想在Java类中添加任何注释 如果有任何解决方案,请告诉我。您不需要使用@XmlRootElement注释。相反,您可以将根对象包装到JAXBElement实例中: QName qName = new QName(null, "customer"); JAXBElement<Customer> jaxbElement = new JAXBElement<Customer>(qName,

JAXB中@XmlRootElement的注释在任何情况下都必须添加Java类吗

我不想在Java类中添加任何注释


如果有任何解决方案,请告诉我。

您不需要使用@XmlRootElement注释。相反,您可以将根对象包装到JAXBElement实例中:

QName qName = new QName(null, "customer");
JAXBElement<Customer> jaxbElement = new JAXBElement<Customer>(qName, Customer.class, customer);
marshaller.marshal(jaxbElement, System.out);
QName QName=新的QName(空,“客户”);
JAXBElement=newjaxbelement(qName,Customer.class,Customer);
marshaller.marshall(jaxbElement,System.out);
有关更详细的示例,请参见:

JAXB实现,如(我是技术负责人)也提供了替代元数据表示,如XML。例如,请查看:


您不需要使用@XmlRootElement注释。相反,您可以将根对象包装到JAXBElement实例中:

QName qName = new QName(null, "customer");
JAXBElement<Customer> jaxbElement = new JAXBElement<Customer>(qName, Customer.class, customer);
marshaller.marshal(jaxbElement, System.out);
QName QName=新的QName(空,“客户”);
JAXBElement=newjaxbelement(qName,Customer.class,Customer);
marshaller.marshall(jaxbElement,System.out);
有关更详细的示例,请参见:

JAXB实现,如(我是技术负责人)也提供了替代元数据表示,如XML。例如,请查看:


谢谢布莱斯!但是这个例子是一个封送案例,那么解封案例呢?我认为解组不会将JAXBElement作为参数应用,因此@XmlRootElement注释是必不可少的吗?您可以通过将类指定为某些解组方法上的参数来指定要解组的类型。这将返回包装在JAXBELENT中的结果。感谢您的快速回复,Blaise。我忽略了一些解包方法。。。我再试了一次,成功了!非常感谢。我还有一个相关的问题。现在,每当访问服务器时,我都会创建JAXBContext和(Marshaller或Unmarshaller)实例,因为JAXBContext不应用相同的参数,而是应用不同的类。性能方面有什么问题吗?JAXBContext是一个线程安全的对象,最好只创建一次并重用它,而不是不断地重新创建它,因为初始化它会有一些成本。Marshaller和Unmarshaller不是线程安全的,实例化成本很低,因此您希望每个操作创建一个新实例。谢谢Blaise!但是这个例子是一个封送案例,那么解封案例呢?我认为解组不会将JAXBElement作为参数应用,因此@XmlRootElement注释是必不可少的吗?您可以通过将类指定为某些解组方法上的参数来指定要解组的类型。这将返回包装在JAXBELENT中的结果。感谢您的快速回复,Blaise。我忽略了一些解包方法。。。我再试了一次,成功了!非常感谢。我还有一个相关的问题。现在,每当访问服务器时,我都会创建JAXBContext和(Marshaller或Unmarshaller)实例,因为JAXBContext不应用相同的参数,而是应用不同的类。性能方面有什么问题吗?JAXBContext是一个线程安全的对象,最好只创建一次并重用它,而不是不断地重新创建它,因为初始化它会有一些成本。Marshaller和Unmarshaller不是线程安全的,实例化成本很低,因此您需要为每个操作创建一个新实例。