2016-09-02 4 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. Но поле страны отображается как null ... Любая идея, что здесь происходит не так?

Благодаря

ответ

0

Parser не знаю, что означает страна/CountryCode. Вы определили только Addr и Locality как XmlElement внутри класса AddressDto. Поэтому вы получите нуль.

Вы должны изменить свой 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; 
} 

Сейчас Страна и CountryCode выиграл 't be null больше

+0

Спасибо за ответ Martin ... Я не смог бы вносить какие-либо изменения в схему xml, поскольку эта служба используется ot ее приложения тоже. Есть ли способ, по которому я могу взять страну и код страны из xml и сопоставить ее с соответствующими полями в объекте CountryDto? – Tapan

+0

Извините, я не могу придумать решение без изменения схемы xml :(надеюсь, что кто-то больше опыта поможет вам ... –

Смежные вопросы