如何在使用 Apache axis 的 Web 服务中使用 HashMap?

How can I use HashMaps in Web service using Apche axis?

我正在做一项作业,我必须使用使用 apache axis 的 Web 服务(使用 eclips Mars)在 Java 中制作桌面应用程序。它必须使用我已经创建的现有动态 Web 项目。 Web 项目是 add/remove 公司和员工详细信息在 Web 界面的 (Oracle) 数据库中。它按要求工作。但是在创建 Web 服务时,它不允许我创建 Web 客户端。它给出了这个错误:

IWAB0399E Error in generating Java from WSDL:
java.io.IOException: ERROR: Missing <soap:fault> element inFault "IOException"
in operation "IOException", in binding getCompanies

显然,它不允许我从我创建的方法中 return HashMaps。 (当我在没有 returning Hashmaps 的情况下更改整个项目时,我可以创建客户端)但是我需要获取 HashMaps。 有什么方法可以从我创建的 Web 服务中获取 HashMaps ???

我在 SO 中引用了 This question。但我不知道接受的答案是什么。

编辑:

好的。现在我知道我不能在 Web 服务中使用 HashMap,因为它们不能编组和解组。然后我发现 This question 我试过了。但问题仍然存在。 (我想我没有正确使用上面提到的答案。)作为这个领域的初学者,我实际上不知道如何包装(或序列化)Hashmap 并将其取回。有人可以举个例子吗?

您可以尝试将 HashMap 包装在 class 中,并使用它和 @XmlJavaTypeAdapter 创建一个自定义适配器,以允许 JAXB 正确地进行对象序列化。

public class Response {
  @XmlJavaTypeAdapter(MapAdapter.class)    

  HashMap<Integer, Student> students;

  public HashMap<Integer, Student> getStudents() {
    return students;
  }

  public void setStudents(HashMap<Integer, Student> map) {
    this.students = map;
  }
}

然后只需使用此 class 作为网络方法的 return 值。

查看更多:

Doc API Example