2017-09-12 6 views
0

이것은 기본적인 문제인 것처럼 보이지만 다른 곳에서는 답을 찾을 수 없습니다. 반복되는 게시물이라면 용서해주십시오.JAXB - 토큰 필드와 함께 @xmlvalue 사용

@XmlAccessorType (XmlAccessType.FIELD)로 표시된 클래스에 @XmlValue 주석을 포함 할 수 있습니까?

내가 XML 자체가 꽤 크고, 다른 필드가하면서, 문제는이 필드에 고유 JAXB와 XML 파일을 구문 분석하려고 해요 :

<root> 
    ... 
    <holiday holidayId="9">Christmas</holiday> 
    ... 
</root> 

매핑은 다음과 같습니다

public class Holiday extends Model { 
    @XmlAttribute(name="holidayId") 
    private String holidayId; 
    @XmlValue 
    private String holiday; 
} 

필드는 XML에서 토큰 유형으로 선언됩니다.

@XmlValue 주석은 IllegalAnnotationException을 제공합니다 (@XmlValue 및 공휴일 필드를 주석 처리하면 매핑이 올바르게 작동 함). 왜 이것이 실패할까요? 해결 방법은 무엇입니까? 제발 조언.

+0

모델에 무엇이 있나요? 수업 전체와 XML을 공유 할 수 있습니까? – muasif80

+0

전체 XML과 클래스를 공유하면 자세히 살펴볼 수 있습니다. – muasif80

+0

모델은 상당히 기초적인 수업입니다. GSON을 사용하여 전체 객체를 JSON으로 변환하는 것과 같은 편리한 메소드를 제공합니다. 안타깝게도 기밀성 때문에 전체 XML을 공유 할 수는 없지만 @XmlValue에 대한 참조를 주석으로 작성하고 전체 XML을 성공적으로 파싱했습니다. 구문 분석에 실패하는 유일한 시간은 위에 표시된 것처럼 특정 값에 액세스하려고하는 특정 필드에 대한 클래스가있는 경우입니다. – user1452030

답변

0

예, 문제없이 작동합니다. 나는 다음 수업을 사용했다 :

@XmlRootElement(name = "root") 
@XmlAccessorType(XmlAccessType.FIELD) 
public class Root { 

    @XmlElement(name = "holiday") 
    List<Holiday> holidays; 
} 

.

@XmlAccessorType(XmlAccessType.FIELD) 
public class Holiday { 

    @XmlAttribute(name="holidayId") 
    private String holidayId; 

    @XmlValue 
    private String holiday; 
} 

나를 위해 그것은 잘 동작했다. 귀하의 XML 예제 입력을이 테스트 코드와 함께 사용했습니다 :

JAXBContext context = JAXBContext.newInstance(Root.class); 
Unmarshaller unmarshaller = context.createUnmarshaller(); 
File file = new File("root.xml"); 
Root root = (Root) unmarshaller.unmarshal(file); 

Marshaller marshaller = context.createMarshaller(); 
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
marshaller.marshal(root, System.out); 
+0

확인해 주셔서 감사합니다. 흥미롭게도, 다른 요소 (XSD 유형 def에서 String으로 선언 된)를 사용하여 동일한 구성을 사용해 보았을 때 코드는 정상적으로 작동합니다. 토큰 유형의 필드에 @XmlValue 주석을 사용할 때 몇 가지 제한이있는 것처럼 보입니다. – user1452030

+0

@ user1452030 예,'@XmlValue'에는 몇 가지 제한 사항이 있습니다. 예를 들면 다음과 같습니다. * 클래스에'@XmlElement' 속성이 있으면'@ XmlValue' 속성을 가질 수 없습니다. * 정확한 예외 메시지와 Java 클래스를 게시해야합니다. –