所以我有这个webService服务在glassfish服务器上运行并连接到一个mysql数据库,其中包含几个webmethods,其中包括:
@WebMethod(operationName = "getDrops")
public Dropslog[] getDrops(@WebParam(name = "User") Users user, @WebParam(name = "MonsterID") int monsterID){
return dbmg.getDrops(user, monsterID);
}
正如您所看到的,此方法通过从另一个类调用此方法返回Dropslog []类型的变量:
public Dropslog[] getDrops(Users user, int monsterID){
Dropslog drop;
Criteria criteria = session.createCriteria(Dropslog.class);
criteria.add(Restrictions.eq("monsterId", monsterID));
drop = (Dropslog) criteria.uniqueResult();
List<Dropslog> drops = (List<Dropslog>) criteria.list();
Dropslog[] dropsArray = new Dropslog[drops.size()];
dropsArray = drops.toArray(dropsArray);
return dropsArray;
}
此方法之前返回的drops
类型为List<Dropslog>
但我在阅读here时已将其更改为SOAP webservices无法返回列表。
现在,客户端的应用程序使用以下代码调用webmethod getDrops:
public static Dropslog[] getDrops(webservice.Users user, int monsterID){
webservice.PvmWs service = new webservice.PvmWs();
webservice.ClientHandler port = service.getClientHandlerPort();
return port.getDrops(user, monsterID);
}
因此,从您所看到的情况来看,这应该可以正常工作,但事实并非如此,而是在最后一个方法的返回行上标记的NetBeans上出现了不兼容的类型错误提示:
incompatible types
required: Dropslog[]
found: List<Dropslog>
当我改变它时,令人惊讶的是,NetBeans建议它可以编译并运行。我想知道为什么会发生这种情况,如果它的某种bug或某种方式netbeans使用旧文件来编译代码或java是否进行某种自动播放?
答案 0 :(得分:1)
JAXB中数组的默认输出类型是列表。
据我所知,
List<T>
和Array
在JAXB中没有任何区别。在内部,即使你像这样声明你的WS操作:
public Shape[] echoShapes(Shape[] input)
JAXB将创建一个
List<Shape>
实例来保存Unmarshal结果,然后使用List.toArray()
将其转换为数组类型。