【问题标题】:What happens to generic class in jax-ws webservice?jax-ws webservice 中的泛型类会发生什么?
【发布时间】:2012-10-16 05:30:52
【问题描述】:

我想知道我是否在 jax-ws 中放了一个泛型方法,比如:

public List<MyCustomClass> getSomething()

jax-ws 支持这个吗? 在客户端,方法的返回会是什么样子?

【问题讨论】:

    标签: java jax-ws cxf


    【解决方案1】:

    您将在客户端获得一个 List(如果 WS 使用者是用另一种语言编写的,则获得一组 MyCustomClass 对象)。那不会是问题。请记住始终对接口进行编程。

    看来你还没有太多用Java创建WS的实践,所以我给你一些建议:

    • 不得发送 2 个或更多包含循环引用的对象,否则您将遇到循环引用问题。这是因为 JAX-WS 工具将为请求创建一个无休止的 XML 响应。可能很难发现。我们来看一个案例:

      public class ClassA {
          ClassB instanceOfB;
          //getters and setters...
      }
      
      public class ClassB {
          ClassA instanceOfA;
          //getters and setters...
      }
      
      public class MyJAXWS {
      
          @WebMethod
          public ClassA getClassA() {
               ClassA classA = new ClassA();
               ClassB classB = new ClassB();
               classB.setInstanceOfA(classA);
               classA.setInstanceOfB(classB);
               return classA; //boom! circular reference problems!
          }
      }
      
    • 必须始终在返回类中包含接口,而不是特定的 Java 库类。这意味着,您的类应该有ListSetMap(在容器的情况下),因为这些接口比实现类处于更高级别,如果非 Java 客户端尝试这样做,您可能会遇到问题使用您的网络服务方法。

      public class ClassC {
      
          List<ClassA> lstClassA; //good!
          ArrayList<ClassB> alstClassB; //not very flexible with other languages =\
      }
      
    • 将通过您的 Web 服务的类应该是 POJO(普通旧 Java 对象),而不是服务或业务逻辑层类。为什么?因为在与客户端通信时只有属性值会被编组/解组,所以没有方法代码会出现在您的 Web Service 的合约中。

      public class ClassD {
          private int intValue;
          //naive business logic method
          //won't be generated in the WSDL for the clients/consumers of the Web Services
          public void printIntValue() {
              //pretty simple implementation
              System.out.println(this.intValue);
          }
      }
      

    我在上一个使用 Java 的 SOA 项目中遇到了这三个问题。我希望其他人可以增强此答案或提供带有链接的信息。

    【讨论】:

    • 您的建议很有帮助。你愿意帮助人们意味着更多!非常感谢。
    【解决方案2】:

    是的,这应该不是问题,但建议使用数组。正如 Luiggi 所说,您会收到List&lt;MyCustomClass&gt;。要添加更多内容,可以找到 JAX-WS here 支持的类型的完整列表

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-26
      • 2012-02-09
      • 1970-01-01
      相关资源
      最近更新 更多