【问题标题】:Cannot parse a xml response using JAXB - NullPointerException is thrown无法使用 JAXB 解析 xml 响应 - 抛出 NullPointerException
【发布时间】:2016-07-18 08:04:05
【问题描述】:

我正在尝试解析 Web 服务的响应,但代码抛出 '空指针异常'。我在 Restaurant 类中添加了 XmlRootElement 注释,但抛出了相同的异常。

响应类似于以下

<RestaurantList>
 <Restaurant id="100001">
     <Url>URL is here</Url>
     <Name>Agaton</Name>
     <Description>
       <Text> Text is here</Text>
     </Description>
     <Image>
       <Code>111772</Code>
       <Name>MAINCOURSE</Name>
       <Description><Text>Main course Agaton</Text></Description>
       <Url>http://img.static-
                     bookatable.com/17862a2d1fa13f5fb083a4d78d6f7e42.jpg</Url>
     </Image>
     <Image>
      <Code>111773</Code>
      <Name>MAINCOURSE</Name>
      <Url>http://img.static-
          bookatable.com/8fae3334490c276322ac1a597fc2d456.jpg</Url>
     </Image>
     <PrimaryCuisine>Italian</PrimaryCuisine>   
     <Address>
       <Line1>Västerlånggatan 72</Line1>
       <Line2/>
       <Line3/>
       <PostalCode>111 29</PostalCode>
       <City>Stockholm</City>
       <Country>SWE</Country>
   </Address>
   <Geo>
      <Latitude>59.32299</Latitude>
      <Longtitude>18.07205</Longtitude>
   </Geo>
   <Region></Region>
   <Detail>
      <Homepage>http://www.restaurangagaton.se</Homepage>   
      <EMail>kontakt@restaurangagaton.se</EMail>
      <PhoneNumber type="Main">+46 8207299</PhoneNumber>
      <PhoneNumber type="Fax">+46 8207107</PhoneNumber>
      <Styles>
       <Style>
         <Text>Neighbourhood Restaurant</Text>
       </Style>
      </Styles>
      <OpenHours>Sunday-Thursday 11.00-22.00 Friday-Saturday 11.00 
       23.00</OpenHours>
      <AveragePriceThreeCourseMeal 
         currency="SEK">550</AveragePriceThreeCourseMeal>
      <AveragePriceMainCourse currency="SEK">223</AveragePriceMainCourse>
   </Detail>
  </Restaurant>
  <Restaurant id="100005"><Url>

代码

        RestTemplate restTemplate = new RestTemplate();
        RestaurantList response = restTemplate.getForObject(url, RestaurantList.class);
        System.err.println("size>>" + response.getRestaurants().size()); //Exception

我有所有的 getter 和 setter

餐厅列表

@XmlRootElement(name = "RestaurantList")
@XmlAccessorType(XmlAccessType.FIELD)
public class RestaurantList {
    @XmlElement(name = "restaurant")
    private List<Restaurant> restaurants;

餐厅

@XmlAccessorType(XmlAccessType.FIELD)
public class Restaurant{
    @XmlAttribute
    private long id;
    @XmlElement
    private String url;
    @XmlElement
    private String name;
    @XmlElement
    private Description description;
    @XmlElement
    private List<Image> image;
    @XmlElement
    private String primaryCuisine;
    @XmlElement(name = "address")
    private Address address;
    @XmlElement
    private Geo geo;
    @XmlElement
    private Region region;
    @XmlElement
    private Detail detail;

说明

@XmlAccessorType(XmlAccessType.FIELD)
public class Description {
    @XmlElement(name="text")
    private String text;

图片

@XmlAccessorType(XmlAccessType.FIELD)
public class Image {
    @XmlElement
    private long code;
    @XmlElement
    private String name;
    @XmlElement
    private Description description;
    @XmlElement
    private String url;

地址

@XmlAccessorType(XmlAccessType.FIELD)
public class Address {
    @XmlElement
    private String line1;
    @XmlElement
    private String line2;
    @XmlElement
    private String line3;
    @XmlElement
    private String postalCode;
    @XmlElement
    private String city;
    @XmlElement
    private String country;

地理位置

@XmlAccessorType(XmlAccessType.FIELD)
public class Geo {
    @XmlElement
    private double latitude;
    @XmlElement
    private double longtitude;

地区

@XmlAccessorType(XmlAccessType.FIELD)
public class Region {
    @XmlElement
    private long code;

详情

@XmlAccessorType(XmlAccessType.FIELD)
public class Detail {
    @XmlElement
    private String homepage;
    @XmlElement
    private String email;
    @XmlElement
    private String phoneNumber1;
    @XmlElement
    private String phoneNumber2;
    @XmlElement
    private Styles style;
    @XmlElement
    private String openHours;
    @XmlElement
    private double averagePriceThreeCourseMeal;
    @XmlElement
    private double averagePriceMainCourseMeal;

【问题讨论】:

    标签: java xml spring-mvc jaxb resttemplate


    【解决方案1】:

    尝试在RestaurantList 类中将@XmlElement(name = "restaurant") 更改为@XmlElement(name = "Restaurant")。它应该工作

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-08
      • 2012-12-25
      • 1970-01-01
      • 2017-01-14
      • 2016-05-15
      相关资源
      最近更新 更多