为什么在我添加对其他 bean 的引用时 Apache CXF 抛出 IllegalAnnotationsException?
Why does Apache CXF throw IllegalAnnotationsException when I add reference to other beans?
我有 2 个 Web 服务 类,我打算使用 Apache CXF 将其公开为 SOAP 服务。其中一项服务将另一项服务作为其操作的一部分。我已将 Apache CXF 设置到我的 Grails 应用程序中(无插件),并通过 resources.groovy
(Spring Bean DSL)设置我的 Web 服务。
假设我有以下 类:
@WebService
BookService {
//class definition
}
和:
@WebService
LibraryService {
BookService bookService
//class definition
}
我在我的 resources.groovy
中声明它们如下(命名空间声明省略):
bookService(BookService)
jaxws.endpoint(id: 'bookService', implementor: "#bookService",
address: '/book')
libraryService(LibraryService) {
bookService = ref('bookService')
}
jaxws.endpoint(id: 'libraryService', implementor: "#libraryService",
address: '/library')
然而,每次我 运行 我的应用程序(通过 grails run-app
)我得到 IllegalAnnotationsException
:
Caused by IllegalAnnotationsException: 2 counts of IllegalAnnotationExceptions
->> 106 | check in com.sun.xml.bind.v2.runtime.IllegalAnnotationsException$Builder
我不明白为什么会这样。我是 Apache CXF 的新手,所以我希望有人能就此启发我。
更新:
我发现 CXF 会为我在服务 类 中声明的任何私有字段抛出异常,除非 它们是用 @XmlRootElement
注释的类型。这很奇怪。
为了解决这个问题,我所做的是 define a service endpoint interfaces (SEIs),这几乎只是 Java/Groovy 接口,用于我的服务。我不确定问题是由于 Groovy 在后台添加的功能引起的,还是 CXF 的 JAX-WS 实现或规范本身确实存在问题,但即使在转换我的服务之后Java,我仍然得到错误。
因此,LibraryService
现在看起来特别像:
@WebService
interface LibraryService {
//class definition
}
及具体实现:
@WebService
class LibraryServiceImpl implements LibraryService {
BookService bookService
//class definition
}
和 bean 定义:
libraryService(LibraryServiceImpl) {
bookService = ref('bookService')
}
jaxws.endpoint(id: 'libraryService', implementor: "#libraryService",
address: '/library')
我有 2 个 Web 服务 类,我打算使用 Apache CXF 将其公开为 SOAP 服务。其中一项服务将另一项服务作为其操作的一部分。我已将 Apache CXF 设置到我的 Grails 应用程序中(无插件),并通过 resources.groovy
(Spring Bean DSL)设置我的 Web 服务。
假设我有以下 类:
@WebService
BookService {
//class definition
}
和:
@WebService
LibraryService {
BookService bookService
//class definition
}
我在我的 resources.groovy
中声明它们如下(命名空间声明省略):
bookService(BookService)
jaxws.endpoint(id: 'bookService', implementor: "#bookService",
address: '/book')
libraryService(LibraryService) {
bookService = ref('bookService')
}
jaxws.endpoint(id: 'libraryService', implementor: "#libraryService",
address: '/library')
然而,每次我 运行 我的应用程序(通过 grails run-app
)我得到 IllegalAnnotationsException
:
Caused by IllegalAnnotationsException: 2 counts of IllegalAnnotationExceptions
->> 106 | check in com.sun.xml.bind.v2.runtime.IllegalAnnotationsException$Builder
我不明白为什么会这样。我是 Apache CXF 的新手,所以我希望有人能就此启发我。
更新:
我发现 CXF 会为我在服务 类 中声明的任何私有字段抛出异常,除非 它们是用 @XmlRootElement
注释的类型。这很奇怪。
为了解决这个问题,我所做的是 define a service endpoint interfaces (SEIs),这几乎只是 Java/Groovy 接口,用于我的服务。我不确定问题是由于 Groovy 在后台添加的功能引起的,还是 CXF 的 JAX-WS 实现或规范本身确实存在问题,但即使在转换我的服务之后Java,我仍然得到错误。
因此,LibraryService
现在看起来特别像:
@WebService
interface LibraryService {
//class definition
}
及具体实现:
@WebService
class LibraryServiceImpl implements LibraryService {
BookService bookService
//class definition
}
和 bean 定义:
libraryService(LibraryServiceImpl) {
bookService = ref('bookService')
}
jaxws.endpoint(id: 'libraryService', implementor: "#libraryService",
address: '/library')