2013-06-14 1 views
1

나는 지금은 "A.groovy", "B.groovy"를 포함, 그 밖으로 List<String>을 좀하고 싶습니다JAXB + MOXy : 요소의 속성에서 목록 <String>을 추출 하시겠습니까?

<jaxbBean file="A.groovy"/> 
    <jaxbBean file="B.groovy"/> 

를 포함하는 XML 파일이 있습니다.

나는 노력 (그리고 일 예상)했습니다

@XmlPath("jaxbBean/@file") 
List<String> jaxbBeansClasses; 

하지만 아무것도 (포함 된 널을) 일치하지 않습니다.

이렇게 간단하게 MOXy를 사용할 수 있습니까? 아니면 추가 수업을 소개해야합니까?

는 (필자는 XML 구문을 변경하지 않습니다.)

답변

0

당신의 매핑이 올바른 보면, 아래에 전체 예이다. 필드에 주석을 달고 있으므로 클래스에 @XmlAccessorType(XmlAccessType.FIELD)이 있는지 확인하십시오 (http://blog.bdoughan.com/2011/06/using-jaxbs-xmlaccessortype-to.html 참조).

도메인 모델 (루트)

import java.util.List; 
import javax.xml.bind.annotation.*; 
import org.eclipse.persistence.oxm.annotations.XmlPath; 

@XmlRootElement 
@XmlAccessorType(XmlAccessType.FIELD) 
public class Root { 

    @XmlPath("jaxbBean/@file") 
    List<String> jaxbBeansClasses; 

} 

jaxb.properties

같은에서 JAXB 당신이 파일을 포함해야합니다 (JSR-222) 공급자라는 jaxb.properties을 MOXY을 지정하려면 패키지를 도메인 모델로 사용하십시오 (http://blog.bdoughan.com/2011/05/specifying-eclipselink-moxy-as-your.html 참조) :

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory 
,515,

데모

import java.io.File; 
import javax.xml.bind.*; 

public class Demo { 

    public static void main(String[] args) throws Exception { 
     JAXBContext jc = JAXBContext.newInstance(Root.class); 

     Unmarshaller unmarshaller = jc.createUnmarshaller(); 
     File xml = new File("src/forum17104179/input.xml"); 
     Root root = (Root) unmarshaller.unmarshal(xml); 

     Marshaller marshaller = jc.createMarshaller(); 
     marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
     marshaller.marshal(root, System.out); 
    } 

} 

input.xml/출력

<?xml version="1.0" encoding="UTF-8"?> 
<root> 
    <jaxbBean file="A.groovy"/> 
    <jaxbBean file="B.groovy"/> 
</root>