gpt4 book ai didi

java - jax-ws webservice 中的泛型类会发生什么变化?

转载 作者:搜寻专家 更新时间:2023-10-31 19:40:23 25 4
gpt4 key购买 nike

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

public List<MyCustomClass> getSomething()

jax-ws 支持吗?在客户端,方法的返回结果是什么样的?

最佳答案

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

看来你在 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!
    }
    }
  • 必须始终在您的返回类中有接口(interface),而不是特定的 Java 库类。这意味着,您的类应该有 ListSetMap(在容器的情况下),因为这些接口(interface)的级别高于实现类,如果非 Java 客户端尝试使用您的 Web 服务方法,您可能会遇到问题。

    public class ClassC {

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

    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 项目中遇到了这三个问题。我希望其他人可以增强此答案或提供带有链接的信息。

关于java - jax-ws webservice 中的泛型类会发生什么变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12908112/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com