2016-11-22 19 views
1

JAXBを使用して1つのxmlを読み込もうとしています。JAXBを使用して属性値を取得できません(親クラスの属性の場合)

親の属性が読み込まれていないが、子クラスの属性が読み込まれるという奇妙な問題に直面しています。 私はフォーラムを参照しましたが、これは奇妙なものです。

誰でも私がやっている間違いを教えてください。

XML。

<?xml version="1.0" encoding="UTF-8"?> 
<PhoneDirectory> 
<Exchange exchangeName="ashfield2133">Ashfield</Exchange> 
<PhoneNumber id="23" number="0489524401"> 
<FirstName>Test</FirstName> 
<LastName>Test</LastName> 
<Address>#34,rt road, State,Country,22344 </Address> 
</PhoneNumber> 

<PhoneNumber id="88" number="0409545401"> 
<FirstName>Testf2</FirstName> 
<LastName>Testl2</LastName> 
<Address>St 2 , State,Country,34555</Address> 
</PhoneNumber> 


<PhoneNumber id="88" number="0446775401"> 
<FirstName>Testf3</FirstName> 
<LastName>Testl3</LastName> 
<Address>St 3 , State,Country,546777</Address> 
</PhoneNumber> 

</PhoneDirectory> 

PhoneDirectoryクラス

package com.test.phoneDirectory.dataclass; 

import javax.xml.bind.annotation.XmlAccessType; 
import javax.xml.bind.annotation.XmlAccessorType; 
import javax.xml.bind.annotation.XmlAttribute; 
import javax.xml.bind.annotation.XmlElement; 
import javax.xml.bind.annotation.XmlRootElement; 
import java.util.List; 


@XmlRootElement(name="PhoneDirectory") 
public class PhoneDirectory { 

    private String exchange; 
    private String exchangeName; 

    @XmlElement(name="Exchange") 
    public String getExchange() { 
     return exchange; 
    } 

    public void setExchange(String exchange) { 
     this.exchange = exchange; 
    } 

    @XmlAttribute(name="exchangeName") 
    public String getExchangeName() { 
     return exchangeName; 
    } 

    public void setExchangeName(String exchangename) { 
     this.exchangeName = exchangename; 
    } 

    private List<PhoneNumber> phoneNumber; 

    @XmlElement(name="PhoneNumber") 
    public List<PhoneNumber> getPhoneNumber() { 
     return phoneNumber; 
    } 

    public void setPhoneNumber(List<PhoneNumber> phoneNumber) { 
     this.phoneNumber = phoneNumber; 
    } 

} 

のPhoneNumberクラス

package com.test.phoneDirectory.dataclass; 

import javax.xml.bind.annotation.XmlAttribute; 
import javax.xml.bind.annotation.XmlElement; 
import javax.xml.bind.annotation.XmlRootElement; 

@XmlRootElement(name="PhoneNumber") 
public class PhoneNumber { 

    private String id; 
    private String number; 

    private String firstName; 
    private String lastName; 
    private String address; 

    @XmlAttribute(name="id") 
    public String getId() { 
     return id; 
    } 
    public void setId(String id) { 
     this.id = id; 
    } 

    @XmlAttribute(name="number") 
    public String getNumber() { 
     return number; 
    } 

    public void setNumber(String number) { 
     this.number = number; 
    } 

    @XmlElement(name="FirstName") 
    public String getFirstName() { 
     return firstName; 
    } 

    public void setFirstName(String firstName) { 
     this.firstName = firstName; 
    } 

    @XmlElement(name="LastName") 
    public String getLastName() { 
     return lastName; 
    } 

    public void setLastName(String lastName) { 
     this.lastName = lastName; 
    } 

    @XmlElement(name="Address") 
    public String getAddress() { 
     return address; 
    } 

    public void setAddress(String address) { 
     this.address = address; 
    } 


} 

メインクラス

import javax.xml.bind.JAXBContext; 
import javax.xml.bind.JAXBException; 
import javax.xml.bind.Unmarshaller; 

import com.test.phoneDirectory.dataclass.PhoneDirectory; 
import com.test.phoneDirectory.dataclass.PhoneNumber; 


public class GetAllPhoneData { 

    public static void main(String[] args) throws JAXBException { 
     // TODO Auto-generated method stub 
     JAXBContext jc = JAXBContext.newInstance(PhoneDirectory.class); 

     Unmarshaller unmarshaller = jc.createUnmarshaller(); 
     PhoneDirectory phoneDirectory = (PhoneDirectory) unmarshaller.unmarshal(new File("src/config/PhoneDirectory.xml")); 


     System.out.println("Get all phone details"); 
     System.out.println("Exchange:"+phoneDirectory.getExchange()); 
     System.out.println("exchangeName:"+phoneDirectory.getExchangeName()); 


     for (PhoneNumber phonedetails : phoneDirectory.getPhoneNumber()) { 

      System.out.println(phonedetails.getId()); 
      System.out.println(phonedetails.getNumber()); 
      System.out.println(phonedetails.getFirstName()); 
      System.out.println(phonedetails.getLastName()); 
      System.out.println(phonedetails.getAddress()); 
    } 

    } 

} 

出力

Get all phone details  
Exchange: Ashfield  
****Get exchangeName :null****  
23  
0489524401  
Test  
Test  
#34,rt road, State,Country,22344 

あなたはexchangeNameは、フィールドのXMLAttribute注釈を言及するにもかかわらず、nullで見ることができるように。

おかげで、 ヴィシュヌ

答えて

1

あなたはPhoneDirectoryクラスのexchangeName属性を宣言したが、あなたのXMLはExchange要素でこの属性を持っています。

ので、代わりの

private String exchange; 
private String exchangeName; 

あなたは@XmlAttributeexchangeName@XmlValueexchangeExchangeのようなクラスが必要になります。

+0

パーフェクト。それを指摘してくれてありがとう。 :)それは今働いています。 – VVP

関連する問題