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/