>  기사  >  Java  >  Java 클래스를 생성할 때 JAXB가 @XmlRootElement 주석을 생략하는 이유는 무엇입니까?

Java 클래스를 생성할 때 JAXB가 @XmlRootElement 주석을 생략하는 이유는 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-01 19:42:29501검색

Why Does JAXB Omit the @XmlRootElement Annotation When Generating Java Classes?

JAXB에서 @XmlRootElement 주석 생략

문제

XML 스키마에서 Java 클래스를 생성할 때 JAXB(Java Architecture for XML Binding)를 사용하면 @XmlRootElement 주석이 있는 클래스가 없는 오류가 발생할 수 있습니다. 이로 인해 직렬화 중에 예외가 발생합니다.

해결책

JAXB 주석 규칙 이해

JAXB XJC는 특정 규칙을 사용하여 다음을 결정합니다. @XmlRootElement 주석을 포함할 시기. 이러한 규칙은 [이 문서](문서 링크)에서 설명한 것처럼 복잡합니다.

@XmlRootElement의 대안

@XmlRootElement는 편리함을 제공하지만 필수는 아닙니다. 대신 [JAXBElement 래퍼 객체](문서 링크)를 사용할 수 있습니다. 그러나 XML 요소 이름과 네임스페이스에 대한 지식이 필요하므로 구성하기가 덜 편리합니다.

ObjectFactory 사용

XJC는 생성된 클래스 모델과 함께 ObjectFactory 클래스를 생성합니다. 이 클래스에는 객체 주위에 JAXBElement 래퍼를 생성하고 XML 이름과 네임스페이스를 처리하는 팩토리 메서드가 포함되어 있습니다. ObjectFactory 메소드를 탐색하여 대상 객체에 대한 JAXBElement를 생성하는 메소드를 찾으세요.

<code class="java">import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.Marshaller;

import org.fpml._2008.fpml_4_5.ObjectFactory;
import org.fpml._2008.fpml_4_5.PositionReport;

// ...

// Create the JAXB context
JAXBContext context = JAXBContext.newInstance(PositionReport.class);

// Create the ObjectFactory
ObjectFactory factory = new ObjectFactory();

// Create a PositionReport instance
PositionReport positionReport = factory.createPositionReport();

// Create the JAXBElement wrapper
JAXBElement<PositionReport> element = factory.createPositionReport(positionReport);

// Create the Marshaller
Marshaller marshaller = context.createMarshaller();

// Marshal the JAXBElement
marshaller.marshal(element, System.out);</code>

위 내용은 Java 클래스를 생성할 때 JAXB가 @XmlRootElement 주석을 생략하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.