恰好泛型类的JAX-WS Web服务是什么?(What happens to generic cla

2019-09-24 03:42发布

我想知道,如果我把一个泛型方法在JAX-WS,如:

public List<MyCustomClass> getSomething()

请问JAX-WS支持呢? 在客户端会出现什么方法的返回样子?

Answer 1:

您将获得在客户端列表(或者如果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客户端尝试消耗你的Web服务方法,你可以得到的问题。

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

     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项目这三个问题。 我希望其他人能加强这方面的答案,或者提供链接信息。



Answer 2:

是的,这不应该是阵列的惯例,建议一个问题,但 正如Luiggi提到你会收到一个List<MyCustomClass> 要添加更多的可以通过JAX-WS找到支持类型的完整列表在这里



文章来源: What happens to generic class in jax-ws webservice?
标签: java jax-ws cxf