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 중국어 웹사이트의 기타 관련 기사를 참조하세요!