如何使用Apche轴在Web服务中使用HashMaps?

时间:2015-11-13 07:17:56

标签: java web-services jaxb hashmap axis2

我正在做一项任务,我必须使用apache轴(使用eclips Mars)使用Web服务来创建Java桌面应用程序。它必须使用我已经创建的现有动态Web项目。 Web项目是在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

显然,它不允许我从我创建的方法中返回HashMap。 (当我在没有返回Hashmaps的情况下改变整个项目时,我可以创建客户端)但是我需要获得HashMaps。 有没有办法从我创建的网络服务中获取HashMap ???

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

修改

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

1 个答案:

答案 0 :(得分:1)

您可以尝试将HashMap包装在一个类中,并使用@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;
  }
}

然后只使用此类作为Web方法的返回值。

查看更多内容:

Doc API Example