2012-03-21 3 views
2

У меня есть XML, похожий на:JAXB Элемент отображения

<alpha> 
      <beta> 
        <theta>abcd</theta> 
      </beta> 
    </alpha> 

Я хочу, чтобы отобразить theta элемент свойства thetaValue в классе MyBean

@XmlRootElement(name = "alpha") 
public class MyBean { 
    private String thetaValue; 

    public String getThetaValue() { 
     return this.thetaValue; 
    } 

    public void setThetaValue(String thetaValue) { 
     this.thetaValue= thetaValue; 
    } 
} 

есть ли способ, что я могу сделать это ? Я использую JAXB, который поставляется с JDK 1.6

ответ

4

Примечание: Я EclipseLink JAXB (MOXy) свинца и член группы экспертов JAXB (JSR-222).


Использование Любой JAXB (JSR-222) Осуществление

Использование любой реализации JAXB (JSR-222) можно использовать для отображения XmlAdapter этот случай использования.

ThetaValueAdapter

package forum9799081; 

import javax.xml.bind.annotation.adapters.XmlAdapter; 

public class ThetaValueAdapter extends XmlAdapter<ThetaValueAdapter.Beta, String> { 

    @Override 
    public Beta marshal(String string) throws Exception { 
     Beta beta = new Beta(); 
     beta.theta = string; 
     return beta; 
    } 

    @Override 
    public String unmarshal(Beta beta) throws Exception { 
     return beta.theta; 
    } 

    public static class Beta { 
     public String theta; 
    } 

} 

MyBean

package forum9799081; 

import javax.xml.bind.annotation.*; 
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; 

@XmlRootElement(name = "alpha") 
public class MyBean { 
    private String thetaValue; 

    @XmlElement(name="beta") 
    @XmlJavaTypeAdapter(ThetaValueAdapter.class) 
    public String getThetaValue() { 
     return this.thetaValue; 
    } 

    public void setThetaValue(String thetaValue) { 
     this.thetaValue = thetaValue; 
    } 

} 

Демо

package forum9799081; 

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

public class Demo { 

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

     File xml = new File("src/forum9799081/input.xml"); 
     Unmarshaller unmarshaller = jc.createUnmarshaller(); 
     MyBean myBean = (MyBean) unmarshaller.unmarshal(xml); 

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

} 

Input.xml/выход

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<alpha> 
    <beta> 
     <theta>abcd</theta> 
    </beta> 
</alpha> 

Использование EclipseLink JAXB (Moxy)

Использование Moxy можно использовать расширение @XmlPath для достижения того же отображения :

package forum9799081; 

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

@XmlRootElement(name = "alpha") 
public class MyBean { 
    private String thetaValue; 

    @XmlPath("beta/theta/text()") 
    public String getThetaValue() { 
     return this.thetaValue; 
    } 

    public void setThetaValue(String thetaValue) { 
     this.thetaValue = thetaValue; 
    } 

} 

Для получения более подробной информации

+1

Большое спасибо – user1282545