如何在使用 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 HashMap
s。 (当我在没有 returning Hashmaps 的情况下更改整个项目时,我可以创建客户端)但是我需要获取 HashMaps。
有什么方法可以从我创建的 Web 服务中获取 HashMap
s ???
我在 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
我正在做一项作业,我必须使用使用 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 HashMap
s。 (当我在没有 returning Hashmaps 的情况下更改整个项目时,我可以创建客户端)但是我需要获取 HashMaps。
有什么方法可以从我创建的 Web 服务中获取 HashMap
s ???
我在 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