JAX-WS SEI 中使用的类的无参数构造函数



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

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

@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.

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

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

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

相关内容

最新更新