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

Ste*_*fan 5 java xml jax-ws jaxb jax-ws-customization

JAX-WS要求传输的所有类都具有默认的构造函数(no-arg构造函数).我不明白这个要求,因为客户端基于WSDL创建自己的类.IMO此要求仅适用于那些用作Webservice输入参数的类.

有谁知道如何规避这一要求?

gga*_*iao 6

使用JAX-WS时,您使用JAXB实现将Java对象序列化为XML.

所以,"问题"是JAXB的工作原理.

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

为什么JAXB会这样做?只有在从XML转换为Object(解组)时才需要这个no-arg构造函数,但问题是当你创建上下文时,JAXB不知道你想做什么(编组或解组)!

结论: JAXB只接受可以编组和解组的类.更多信息在这里

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

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

结论:是JAXB错误;-)

但是如果我需要使用没有no-arg构造函数的类呢?

您可以使用XMLAdapter!查看此帖子了解更多信息......