java - 为什么 JAX-WS 导出的对象需要默认构造函数?

标签 java xml jaxb jax-ws jax-ws-customization

JAX-WS 要求传输的所有类都具有默认构造函数(无参数构造函数)。我不明白这个要求,因为客户基于 WSDL 创建他们自己的类。 IMO 这一要求仅对那些用作 Web 服务输入参数的类有意义。

有谁知道如何规避该要求?

最佳答案

当您使用 JAX-WS 时,您正在使用 JAXB 实现将 java 对象序列化为 XML

因此,“问题”在于 JAXB 的工作方式。

要使用 JAXB,您需要创建一个 JAXBContext,将所有可以编码/解码的类传递给它。创建上下文时,JAXB 将检查所有给定的类是否具有无参数构造函数。如果这些类中至少有一个没有这种构造函数,则不会创建上下文。

为什么 JAXB 这样做?它仅在从 XML 转换为对象(解码)时才需要这个无参数构造函数,但问题是当您创建上下文时,JAXB 不知道您想要做什么(编码或解码)!

结论:JAXB 将只接受它可以编码和取消编码的类。更多信息 here

知道这些,JAX-WS 会发生什么?

当您声明一个@WebMethod 时,参数返回值 类将被添加到JAXB 上下文中。正因为如此,所有与 Web 服务输入和输出相关的类都需要一个无参数构造函数。

结论: 是 JAXB 错误;-)

但是如果我需要使用一个没有无参数构造函数的类怎么办?

您可以使用 XMLAdapter!检查this post了解更多信息......

关于java - 为什么 JAX-WS 导出的对象需要默认构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11430022/

相关文章:

java - 添加dss字典

java - 还有什么比这更容易找到质数的方法呢?

java - JAX-B - 如何将模式元素映射到现有 Java 类

java - 如果执行程序服务的可调用项之一遇到错误,如何在控制台中记录错误

java - JibX : how to map a class and avoid it being outputed as XML node

javascript - 动态添加 datalist 选项

java - 使用java处理空的xml标签

java - 如何避免 JMS 消息类的代码重复?

java - 缺少 CycleRecoverable JAXB Java

java - java GC如何清理相互关联的对象