2016-09-02 21 views
0

別のオブジェクト内のオブジェクトを非整列化することができません:私はxmlファイル持っている

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
 
    <soapenv:Body> 
 
     <ns1:Data xmlns:ns1="http://vv.com/namespace"> 
 
     <Addr>Address 1</Addr1> 
 
     <Locality>San Francisco</Locality> 
 
     <Country>Japan</Country> 
 
     <CountryCode>JP</CountryCode> 
 
     </ns1:Data> 
 
    </soapenv:Body> 
 
</soapenv:Envelope>

AddressDto.java

@XmlRootElement(name = "Data", namespace = "http://vv.com/namespace") 
 
public class AddressDto implements Serializable 
 
{ 
 
    private String street; 
 
    private String city; 
 
    private CountryDto country; 
 

 
    public AddressDto() 
 
    { 
 
     super(); 
 
    } 
 
    
 
    @XmlElement(name = "Addr") 
 
    public String getStreet1() 
 
    { 
 
     return street; 
 
    } 
 

 
    public void setStreet1(final String street1) 
 
    { 
 
     this.street = street1; 
 
    } 
 

 
    @XmlElement(name = "Locality") 
 
    public String getCity() 
 
    { 
 
     return city; 
 
    } 
 

 
    public void setCity(final String city) 
 
    { 
 
     this.city = city; 
 
    } 
 

 
    public CountryDto getCountry() 
 
    { 
 
     return country; 
 
    } 
 
    
 
    public void setCountry(final CountryDto country) 
 
    { 
 
     this.country = country; 
 
    } 
 
}

CountryDtoファイル:

public class CountryDto implements Serializable 
 
{ 
 
    private String name; 
 
    private String code; 
 

 
    public CountryDto() 
 
    { 
 
     super(); 
 
    } 
 

 
    @XmlElement(name = "CountryCode") 
 
    public String getCode() 
 
    { 
 
     return code; 
 
    } 
 

 
    public void setCode(final String code) 
 
    { 
 
     this.code = code; 
 
    } 
 
    
 
    @XmlElement(name = "Country") 
 
    public String getName() 
 
    { 
 
     return name; 
 
    } 
 

 
    public void setName(final String name) 
 
    { 
 
     this.name = name; 
 
    } 
 
}

私はコード

JAXBContext context = JAXBContext.newInstance(AddressDto.class); 
 
Unmarshaller un = context.createUnmarshaller(); 
 
AddressDto emp = (AddressDto) un.unmarshal(response.getSOAPBody().extractContentAsDocument()); 
 
return emp;

を実行すると、私はAddressDtoオブジェクトに通りや街を取得することができています。しかし、現地の国はヌルとして表示されています...どんな考えがここで間違っていますか?

おかげ

答えて

0

パーサは、国/国番号が何を意味するのか分かりません。 AddressDtoクラスの中では、AddrとLocalityだけをXmlElementとして定義しました。したがって、あなたはnullを取得します。あなたはこのような何かにあなたのXMLを変更する必要が

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soapenv:Body> 
     <ns1:Data xmlns:ns1="http://vv.com/namespace"> 
     <Addr>Address 1</Addr1> 
     <Locality>San Francisco</Locality> 
     <CountryDto> 
      <Country>Japan</Country> 
      <CountryCode>JP</CountryCode> 
     </CountryDto> 
     </ns1:Data> 
    </soapenv:Body> 
</soapenv:Envelope> 

そしてまたあなたのaddressDtoのではgetCountryを(修正)が同様のXmlElementです:

@XmlElement(name = "CountryDto") 
public CountryDto getCountry() 
{ 
    return country; 
} 

今国と国番号ウォンこれ以上nullにはなりません

+0

返信ありがとうございましたMartin ...このサービスはotで使用されているため、xmlスキーマを変更することはできません彼女のアプリケーションも。国と国コードをxmlから取り出し、それをCountryDtoオブジェクトの対応するフィールドにマップする方法はありますか? – Tapan

+0

申し訳ありませんが、私はxmlスキーマを変更せずに解決策を考え出すことができません:(誰かがより多くの経験があなたを助けてくれることを願っています... –

関連する問題