Web服务方法上不兼容的数组类型可能的错误

时间:2013-03-20 00:38:13

标签: java web-services java-ee netbeans

所以我有这个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是否进行某种自动播放?

1 个答案:

答案 0 :(得分:1)

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

  

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

public Shape[] echoShapes(Shape[] input)
  

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

OTN Discussion Forums : Webservices ...Array or List ...