【问题标题】:Is ArrayList supported in Apache Axis Web service?Apache Axis Web 服务是否支持 ArrayList?
【发布时间】:2011-10-06 01:00:51
【问题描述】:

我编写了一个简单的 HelloWorld Web 服务。它以 ArrayList 作为参数。代码很简单,`import java.util.ArrayList;

public class Service {

public void service(ArrayList<Object> list) {
    System.out.println("Hello World..");
}
}`

我正在使用 Eclipse Helios SR1 并尝试生成 Web 服务。 选择 Webservice Implementation 为“Service”并选择 Server runtime 作为 Tomcat 6.0 和 webservice runtime 作为 Apache Axis。单击下一步会发出警告 服务类"Service" 不符合JAX-RPC 1.1 规范的一项或多项要求,并且可能无法正确部署或运行​​。 服务类"Service" 上的方法“service”使用了一种数据类型"java.util.ArrayList",它不受JAX-RPC 规范的支持。该类型的实例可能无法正确序列化或反序列化。可能会导致数据丢失或 Web 服务完全失败。

单击确定继续,它会一一显示更多警告: 输入类型 java.lang.Class 是不可实例化的类型,将从示例 JSP 中省略。继续生成示例 JSP?

输入类型 javax.xml.namespace.QName 是不可实例化的类型,将从示例 JSP 中省略。继续生成示例 JSP?

IWAB0189W 样本 JSP 客户机省略了一些方法,因为它们包含不受支持的类型。

它可能发生的任何原因? 我在 Sun 网站上看到:Sun RPC Doc

据此应该支持ArrayList。

有什么帮助吗?

【问题讨论】:

  • 您是否尝试过指定List 而不是ArrayList
  • 使用 List 我也面临同样的问题。

标签: java web-services apache arraylist tomcat6


【解决方案1】:

编写 WSDL 然后使用 Axis WSDL2Java 工具生成 Java 类是非常好的做法。您始终可以根据自己的业务需求更专注于编写 WSDL,而无需为生成类而进行编组和解组的所有麻烦。

【讨论】:

  • 那么 Suken,如果我们可以编写自己的 WSDL,那么我们可以支持 ArrayList 吗?实际上我的 webService 需要一个 ArrayList 的 VO 也可以支持吗?
  • 抱歉,延迟回复(周五晚上 + 懒惰的周六)。是的,如果您使用 JAX-RPC 作为您的 Web 服务的服务提供者并且您的服务器和客户端是用 Java 编写的,那么您可以序列化包含 arraylist 的 Java 对象,因为它们肯定会在两端得到满足。然后您的 VO 需要使用 BeanSerializer 进行序列化和反序列化。注意:请记住这将只支持基于 java 的应用程序。
  • 谢谢。但是我不知道如何编写 WSDL?你能建议如何编写 wsdl 吗?服务?哪个采用 VO 和 VO 有 String 和 Map 作为参数? (我只需要支持java类型)
【解决方案2】:

从规范中引用。

数组

JAX-RPC 还支持具有受支持 JAX-RPC 类型成员的数组。 支持的数组的示例是 int[] 和 String[]。多维 还支持 BigDecimal[][] 等数组。

对方法签名进行简单修改以接受数组而不是 ArrayList 应该可以解决问题。

【讨论】:

  • 不支持ArrayList吗?
  • 如何支持ArrayList?考虑使用您的 SOAP 服务的非 Java 应用程序。 JAX-RPC 可能能够将 List 映射到数组类型,无论如何您都应该使用该接口。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-11
  • 2011-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多