不兼容的数组类型可能是webservice方法上的错误



所以我有这个在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服务不能返回列表。

现在,客户端的应用程序使用以下代码调用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做某种自动转换?

JAXB中数组的默认输出类型是列表。

据我所知,List<T>Array在JAXB中没有任何区别。在内部,甚至像这样声明WS操作:

public Shape[] echoShapes(Shape[] input)

JAXB将创建一个List<Shape>实例来保存Unmarshal结果,然后使用List.toArray()将其转换为数组类型。

OTN论坛:Webservices…

相关内容

  • 没有找到相关文章

最新更新