【问题标题】:Can you return an array from a JAX-WS @WebMethod?你能从 JAX-WS @WebMethod 返回一个数组吗?
【发布时间】:2010-12-02 17:26:52
【问题描述】:

我很确定你可以,但除了回答标题中的问题之外,你能否解释一下这样做的利弊、注意事项(如果有的话)?我知道你不能从 WebMethod 中返回 List、Set、Collection、Map 或任何接口(这很愚蠢,IMO,但我不知道我应该保留判断的设计原因是什么)。

感谢您的建议。

-- LES

【问题讨论】:

    标签: java xml web-services jaxb jax-ws


    【解决方案1】:

    你可以返回数组,我发现它们很有用。

    集合成为问题的主要原因是某些语言(例如 C)不理解集合的概念,因此,为了保持可移植性,您需要确保传递可以在大多数情况下表示的结构语言。

    此外,我从不喜欢传递集合,因为来自 web 服务的内容应该是相当静态的。如果要添加,则将数组转换为集合,然后将数组传回给 webservice 进行更改。

    【讨论】:

      【解决方案2】:

      James 是对的,你可以返回数组。您还可以返回集合类型。 wsdl 将类型定义为列表。但是,大多数客户端会将类型转换为数组(至少这是我发现 C# 对 JAX-WS 服务所做的)。

      我使用第 3 方 (Apache Axis2) 来生成 Web 服务,我遇到了一个奇怪的问题,即 wsdl 没有被正确读取,并且消费者无法正确反序列化数组。有必要创建一个装饰器对象,它只包含数组对象并从 web 方法返回。

      我认为这只是 Axis2 不能很好地与 .NET Web 服务交互器配合使用,但需要注意一些事情。

      【讨论】:

      • 这个列表是通用列表吗?还是原始列表? (当然是在 Java 中)否则,您如何与客户沟通他或她可以将 List 中的每个元素转换为 String、Long、MyBean 等?
      • @LES2:您应该使用泛型,否则内容将全部转换为客户端上的对象。您需要在客户端将它们重新转换为正确的类型,这应该由 Web 服务使用者生成。
      猜你喜欢
      • 2012-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-01
      • 2012-07-09
      • 2012-04-27
      相关资源
      最近更新 更多