所以我有这个在glassfish服务器上运行的web服务,并连接到包含几个web方法的mysql数据库,其中:
@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>
类型的,但我改变了它,因为我在这里读到SOAP web服务不能返回列表。
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做某种自动转换?
JAXB中数组的默认输出类型是列表。
据我所知,
List<T>
和Array
在JAXB中没有任何区别。在内部,甚至像这样声明WS操作:
public Shape[] echoShapes(Shape[] input)
JAXB将创建一个
List<Shape>
实例来保存Unmarshal结果,然后使用List.toArray()
将其转换为数组类型。
OTN论坛:Webservices…