2017-03-07 1 views
0

私はAPIからJavaオブジェクトにいくつかのXML値をバインドする必要がある学校プロジェクトに取り組んでいます。私はすべての要素を取得することができますが、特定の要素の属性を取得することはできません。私は解決策を見回しましたが、解決策は見つかりませんでした。XML値をオブジェクト値にアンマーシャリングする

JAXBでJavaオブジェクトにアンマーシャリングするXMLコードがあります。私が取得したい属性はDeparturetrackで 'changes'です。

<Departures> 
    <DepartingTrain> 
     <Id>220</Id> 
     <DepartureTime>2017-03-07T11:03:00+0100</DepartureTime> 
     <DepartureTrack changes="false">5</DepartureTrack> 
    </DepartingTrain> 
    <DepartingTrain> 
     <Id>637</Id> 
     <DepartureTime>2017-03-07T11:18:00+0100</DepartureTime> 
     <DepartureTrack changes="false">12</DepartureTrack> 
    </DepartingTrain> 
</Departures> 

私は現在このオブジェクトを持っていますが、すべての要素で機能します。私はどのように属性 '変更'を取得し、このオブジェクトに配置するのか分からない。

@Entity 
@Getter 
@Setter 
@NoArgsConstructor 
@XmlRootElement(name="Departures") 
@XmlAccessorType(XmlAccessType.FIELD) 
public class Departure { 
    @Id 
    @GeneratedValue 
    private long id; 
    @XmlElement(name="Id") 
    private int routeNumber; 
    @XmlElement(name="DepartureTime") 
    private String departureTime; 
    @XmlElement(name="DepartureTrack") 
    private String departureTrack; 
} 

私はこのオブジェクトを持つすべての出発点を持つリストを作成します。

@Entity 
@Getter 
@Setter 
@NoArgsConstructor 
@XmlRootElement(name="Departures") 
@XmlAccessorType(XmlAccessType.FIELD) 
public class DepartureList { 

    @Id 
    @GeneratedValue 
    private long id; 
    @XmlElement(name="DepartingTrain") 
    @OneToMany 
    private List<Departure> departures = new ArrayList<>(); 
} 

これは私のアンマーシャラーの外観です。

// Returns all departures for a specific station 
public DepartureList getDepartingTrains(String station){ 
    try { 
     URL url = new URL("API URL" + station); 
     URLConnection urlConnection = url.openConnection(); 
     urlConnection.setRequestProperty("Authorization", "Basic " + authStringEnc); 
     InputStream is = urlConnection.getInputStream(); 
     InputStreamReader isr = new InputStreamReader(is); 

     Unmarshaller unmarshaller = departureListJaxbContext.createUnmarshaller(); 
     DepartureList departureList = (DepartureList) unmarshaller.unmarshal(isr); 
     return departureList; 
    } catch (JAXBException e) { 
     e.printStackTrace(); 
    } catch (MalformedURLException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    // Throw Exception 
    return null; 
} 

誰もがXMLシートからこの属性を取得し、Javaオブジェクトにそれを置く方法を知っていますか?

答えて

2

以下のようDepartureTrack JAXB生成クラスの下に「変更」属性を追加します:あなたは

import org.simpleframework.xml.Attribute; 
import org.simpleframework.xml.Element; 
import org.simpleframework.xml.ElementList; 
import org.simpleframework.xml.Root; 

import java.math.BigDecimal; 
import java.util.List; 

@Root(name = "Departures") 
public class Departures { 

    @ElementList(name = "DepartingTrain", inline = true, required = false) 
    List<DepartingTrain> departingTrain; 



    public List<DepartingTrain> getDepartingTrain() { return this.departingTrain; } 
    public void setDepartingTrain(List<DepartingTrain> _value) { this.departingTrain = _value; } 



    public static class DepartingTrain { 

     @Element(name="Id", required = false) 
     String id; 


     @Element(name="DepartureTime", required = false) 
     String departureTime; 


     @Element(name="DepartureTrack", required = false) 
     DepartureTrack departureTrack; 



     public String getId() { return this.id; } 
     public void setId(String _value) { this.id = _value; } 


     public String getDepartureTime() { return this.departureTime; } 
     public void setDepartureTime(String _value) { this.departureTime = _value; } 


     public DepartureTrack getDepartureTrack() { return this.departureTrack; } 
     public void setDepartureTrack(DepartureTrack _value) { this.departureTrack = _value; } 


    } 

    public static class DepartureTrack { 

     @Attribute(name="changes", required = false) 
     Boolean changes; 



     public Boolean getChanges() { return this.changes; } 
     public void setChanges(Boolean _value) { this.changes = _value; } 


    } 
} 

以下のようなJavaクラスを持たなければならないし、Javaクラスを作成するために提供し、いくつかのサイトがある

import javax.xml.bind.annotation.*; 

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

    @XmlAttribute 
    protected String changes; 

@XmlValue; 
protected String content; 

} 
+0

正しいです。属性にブール値のリテラルだけが含まれている場合は、StringをBoolean(またはboolean)に変更することもできます(これらは必須です)。 –

関連する問題