【问题标题】:No-args constructor for class used in JAX-WS SEIJAX-WS SEI 中使用的类的无参数构造函数
【发布时间】:2011-12-07 16:43:14
【问题描述】:

我正在开发一个小网络服务,但遇到了一个我不明白的细节。

这是我的服务端点接口的一部分:

@WebService
public interface ScriptStarterInterface {
  String getResult(@WebParam(name="newFile") FileContainer newFile);
}

它也有一个实现。 ;)
现在当我启动服务器时,出现以下异常:

Caused by: com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions
some.package.FileContainer does not have a no-arg default constructor.

我将无参数构造函数添加到 FileContainer,现在一切正常。我不明白的是:我为什么要提供这个构造函数?

我偶然发现的所有甲骨文页面都只是说我必须提供一个,但从来没有为什么。 :(

【问题讨论】:

    标签: web-services jax-ws cxf


    【解决方案1】:

    需要无参数构造函数,因为 JAXB 使用 java.lang.ClassnewInstance() 方法创建对象实例,该方法不允许指定参数。 (我们可以知道是 JAXB 有问题,因为该异常的包名称。)虽然可以通过获取适当的 java.lang.reflect.Constructor 实例然后在那里提供正确的参数来创建对象实例,但这要复杂得多,而且so 通常保留给非常复杂的框架(例如 Spring)。简单的代码使用简单的 API,它需要一个无参数的构造函数;这对于您无论如何都希望以编程方式创建对象的大多数情况来说已经足够了(对于 JAXB,复杂的情况是通过注册工厂对象来处理的,工厂对象本身必须具有无参数的构造函数,但它可以使对象变得更加复杂)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-18
      • 1970-01-01
      • 2011-10-08
      • 2017-04-01
      • 2018-06-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多