JAX-WS 要求传输的所有类都具有默认构造函数(无参数构造函数)。我不理解这个要求,因为客户基于 WSDL 创建自己的类。IMO 此要求仅对用作 Web 服务输入参数的类有意义。
有谁知道如何规避这个要求?
JAX-WS 要求传输的所有类都具有默认构造函数(无参数构造函数)。我不理解这个要求,因为客户基于 WSDL 创建自己的类。IMO 此要求仅对用作 Web 服务输入参数的类有意义。
有谁知道如何规避这个要求?
当您使用JAX-WS时,您正在使用JAXB实现将您的 java 对象序列化为XML。
因此,“问题”是 JAXB 的工作方式。
要使用JAXB,您需要创建一个JAXBContext,将所有可以编组/解组的类传递给它。创建上下文时,JAXB将检查所有给定类是否具有无参数构造函数。如果这些类中至少有一个没有这种构造函数,则不会创建上下文。
为什么JAXB这样做?它仅在从 XML 转换为 Object(解组)时才需要此无参数构造函数,但问题是当您创建上下文时,JAXB 不知道您想要做什么(编组或解组)!
结论: JAXB 将只接受它可以编组和解组的类。更多信息在这里
知道了这一点,在 JAX-WS 中会发生什么?
当您声明参数和返回值@WebMethod
类时,将添加到 JAXB 上下文中。正因为如此,所有与 Web 服务输入和输出相关的类都需要一个无参数构造函数。
结论:是 JAXB 故障 ;-)
但是如果我需要使用一个没有无参数构造函数的类呢?
您可以使用XMLAdapter!检查此帖子以获取更多信息...
有谁知道如何规避这个要求?
是的 - 重写 JAX-WS。
它可能使用默认 ctor 和反射来填充对象,因为它不能轻易知道像您这样的人可能编写的每个可能的 ctor。
这是使用别人的框架的一个缺点:你必须遵守他们的规则。
客户端基于 WSDL 创建自己的类
我认为这就是图书馆帮助客户做的事情。您没有编写代码来解析和解释 WSDL,是吗?