Web服务返回null而不是Java </mycustomobj>中的List <mycustomobj>

时间:2014-03-20 12:47:10

标签: java web-services netbeans

我使用Netbeans 7.4进行Java开发。我尝试使用Web服务客户端/服务器应用程序 我正在解决一个奇怪的问题,让我详细描述一下。
在服务器端,假设我有DeviceInfoLocationInfo类,如下所示:

@XmlRootElement(name="DeviceInfo")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "DeviceInfo")
public class DeviceInfo {

    @XmlElement(name = "Name")
    private String name;

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

    public String getName()
    {
        return this.name;
    }
}

LocationInfo类的成员为DeviceInfo类型:

@XmlRootElement(name="LocationInfo")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "LocationInfo")
public class LocationInfo {

    @XmlElement(name = "Name")
    private String name;
    @XmlElement(name = "DeviceInfo", type=DeviceInfo.class)
    private DeviceInfo deviceInfo;

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

public String getName()
{
    return this.name;
}

public DeviceInfo getDeviceInfo() {
    return deviceInfo;
}

public void setDeviceInfo(DeviceInfo deviceInfo) {
    this.deviceInfo = deviceInfo;
}
}

我的网络服务类就像:

@WebService
public class DbAccess {

    public List<LocationInfo> getListLocation()
    {
        List<LocationInfo> listLocation = new ArrayList<>();

        LocationInfo location1 = new LocationInfo();
        location1.setName("Location 1");
        DeviceInfo device1_1 = new DeviceInfo();
        device1_1.setName("Device1_1");
        location1.setDeviceInfo(device1_1);
        listLocation.add(location1);

        LocationInfo location2 = new LocationInfo();
        location2.setName("Location 2");
        DeviceInfo device2_1 = new DeviceInfo();
        device2_1.setName("Device2_1");
        location2.setDeviceInfo(device2_1);
        listLocation.add(location2);

        return listLocation;
    }
}

Web服务只返回LocationInfo列表。
在Web客户端,我只是从web service client(新/ Web服务客户端)添加了Netbeans。我刚刚将Web服务WSDL地址提供给IDE,并导入了Web服务类型。所以我可以在客户端使用Web服务。问题是我的网络客户端从null的{​​{1}}()函数获取getDeviceInfo deviceInfo。
我在Web客户端中使用的代码:

LocationInfo

这会产生以下输出:

DbAccessService srv = new DbAccessService();
    DbAccess db = srv.getDbAccessPort();
    List<LocationInfo> list = db.getListLocation();
    for(int i=0; i<list.size(); i++)
    {
        String str = "-" + list.get(i).getName();
        if(list.get(i).getDeviceInfo() == null)
            str += "\r\n---NULL";
        else
            str += "\r\n---" + list.get(i).getDeviceInfo().getName();
        System.out.println(str);
    }

为什么我得到实际DeviceInfo的null insead?

1 个答案:

答案 0 :(得分:0)

编辑*让我发布作为更好格式化的答案

在您的案例中从未使用<root>,我只是举了一个例子。在您的实例中,由于LocationInfo包含DevinceInfo,您希望LocationInfo成为 root 元素。将DeviceInfo定义为根元素也使编组人员感到困惑。你的Xml看起来像

<LocationInfo>
   <name>
      Location 1
   </name>
   <DeviceInfo>
      <name>
         Device_1
      </name>
   </DeviceInfo>
</LocationInfo>

查看LocationInfo是由@XmlRootElement

定义的根元素