我使用Netbeans 7.4
进行Java
开发。我尝试使用Web服务客户端/服务器应用程序
我正在解决一个奇怪的问题,让我详细描述一下。
在服务器端,假设我有DeviceInfo
和LocationInfo
类,如下所示:
@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?
答案 0 :(得分:0)
编辑*让我发布作为更好格式化的答案
在您的案例中从未使用<root>
,我只是举了一个例子。在您的实例中,由于LocationInfo
包含DevinceInfo
,您希望LocationInfo
成为 root 元素。将DeviceInfo
定义为根元素也使编组人员感到困惑。你的Xml看起来像
<LocationInfo>
<name>
Location 1
</name>
<DeviceInfo>
<name>
Device_1
</name>
</DeviceInfo>
</LocationInfo>
查看LocationInfo
是由@XmlRootElement