【问题标题】:Can I auto-discover jaxws:endpoints for beans.xml based on annotated @WebService classes / interfaces?我可以根据带注释的 @WebService 类/接口自动发现 beans.xml 的 jaxws:endpoints 吗?
【发布时间】:2012-08-16 10:06:54
【问题描述】:

我创建了一个 cxf/spring 项目:

mvn archetype:create -DarchetypeGroupId=org.apache.cxf.archetype -DarchetypeArtifactId=cxf-jaxws-javafirst

生成的项目有一个用 @WebService 注释的 HelloWorld.java 接口和一个用 endpointInterface=mypackage.HelloWorld 注释的 HelloWorldImpl.java。

有一个 beans.xml 文件包含:

<jaxws:endpoint
   id="helloWorld"
   implementor="mypackage.HelloWorldImpl"
   address="/HelloWorld" />

如果我想添加更多服务,看起来我应该继续在 beans.xml 中添加新端点。由于这些类已经被注释为@WebService,为什么它不能在某些包/搜索路径中自动发现任何新服务?有什么方法可以配置这个项目来做到这一点?

基本上,我只是想避免重复自己。信息已经在注释中,所以我不想每次添加服务时都编辑其他文件。

如果我删除 beans.xml 中的 jaxws:endpoint 标签,然后 mvn install tomcat:run, localhost:8080/myArtifactId 只会显示一个页面,说没有定义服务。

【问题讨论】:

  • 您找到解决方案了吗?

标签: java spring maven annotations cxf


【解决方案1】:

当您使用 CXF 时,您应该知道您添加的所有端点都由使用 Spring 上下文查找它们的 CXFServlet 管理。 beans.xml 是 Spring 上下文的配置文件。因此,如果您从该文件中删除 &lt;jaxws:endpoint/&gt; 节点,则您的 Spring 上下文和因此 CXFServlet 将无法找到您的服务端点。

【讨论】:

  • 好的...我的意思是,我想我明白这一点,但我要问的是,有没有其他方法可以做到这一点?我不在乎是不是春天,也许我选择了一个我不应该拥有的神器。我只想创建一个 maven 项目,我可以在其中使用 WebService 注释一个类,并让一个应用服务器将其公开为带有生成的 wsdl 的肥皂服务。我有哪些选择?我意识到 Spring 依赖于这个 xml 文件,但必须有一些框架可以扫描类路径中的 WebService 注释并公开它们。
  • Resteasy 似乎在启动时找到了 JAX-RS 注释类,而没有提示这些类在哪里。没有提供这种自动发现功能的 JAX-WS 框架吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-19
  • 2015-05-19
  • 1970-01-01
相关资源
最近更新 更多