Jakarta ee 如何根据JAX-WS规范发现web服务实现类?

Jakarta ee 如何根据JAX-WS规范发现web服务实现类?,jakarta-ee,weblogic,jax-ws,Jakarta Ee,Weblogic,Jax Ws,我感兴趣的是,JavaEE/JAX-WS规范(或一般的Weblogic)如何处理这样一种情况,即在库jar中有@WebService注释的web服务实现类,或者在 APP-INF/lib目录(EAR级) WEB-INF/lib目录(战争级) EAR根目录,EJB的MANIFEST.MF类路径项指向它们 根据考虑了所有三种可能性的JAX-WS规范,Weblogic是否应该发现并托管这些服务,忽略它们,还是行为未定义 更重要的是,如何配置行为?最后,我不希望这些web服务托管,但它们是托管的,我

我感兴趣的是,JavaEE/JAX-WS规范(或一般的Weblogic)如何处理这样一种情况,即在库jar中有
@WebService
注释的web服务实现类,或者在

  • APP-INF/lib目录(EAR级)
  • WEB-INF/lib目录(战争级)
  • EAR根目录,EJB的MANIFEST.MF类路径项指向它们
根据考虑了所有三种可能性的JAX-WS规范,Weblogic是否应该发现并托管这些服务,忽略它们,还是行为未定义


更重要的是,如何配置行为?最后,我不希望这些web服务托管,但它们是托管的,我不确定这是正常行为还是配置错误。

web服务的部署由第8章“部署”中的定义

它说:

对工件包装进行验证,以确保:

  • Web服务部署描述符中定义的每个WSDL中的每个端口都有相应的端口组件元素
  • JAX-RPC或JAX-WS服务组件仅打包在WAR文件中
  • 无状态或单例会话bean Web服务仅打包在EJB-JAR或WAR文件中
  • WSDL端口使用的WSDL绑定由Java EE运行时的Web服务支持。如果没有端口使用不受支持的绑定,则可以在WSDL中声明这些绑定
这意味着,只有当这些服务已作为WAR的一部分部署,或者(如果它们已使用@Singleton或@Stateless注释,或者在部署描述符中配置)作为EJB模块的一部分时,服务器才应该查找这些服务

如果它们出现在WEB-INF/lib目录中,它们就是战争的一部分

EAR的
APP-INF/lib
目录中是否存在这样的JAR是未指定的,因为该目录是一个WebLogic扩展,可以追溯到00年代的某个时候。您应该避免使用它,只需将实用程序JAR放在EAR文件的
lib
目录中


在任何情况下,如果您的服务器从WAR文件以外的任何地方部署web服务(它们肯定不是EJB),则您需要向供应商投诉。

web服务的部署由第8章“部署”中的定义

它说:

对工件包装进行验证,以确保:

  • Web服务部署描述符中定义的每个WSDL中的每个端口都有相应的端口组件元素
  • JAX-RPC或JAX-WS服务组件仅打包在WAR文件中
  • 无状态或单例会话bean Web服务仅打包在EJB-JAR或WAR文件中
  • WSDL端口使用的WSDL绑定由Java EE运行时的Web服务支持。如果没有端口使用不受支持的绑定,则可以在WSDL中声明这些绑定
这意味着,只有当这些服务已作为WAR的一部分部署,或者(如果它们已使用@Singleton或@Stateless注释,或者在部署描述符中配置)作为EJB模块的一部分时,服务器才应该查找这些服务

如果它们出现在WEB-INF/lib目录中,它们就是战争的一部分

EAR的
APP-INF/lib
目录中是否存在这样的JAR是未指定的,因为该目录是一个WebLogic扩展,可以追溯到00年代的某个时候。您应该避免使用它,只需将实用程序JAR放在EAR文件的
lib
目录中


无论如何,如果您的服务器从WAR文件以外的任何地方部署web服务(它们肯定不是EJB),那么您需要向供应商投诉。

问题在于EAR中的库是如何打包的。在起点中,所有库都位于EAR根目录上,依赖模块(war、ejb)通过其
MANIFEST.MF
类路径
属性引用它们。出于某种奇怪的原因,这些库甚至被列在EAR的
MANIFEST.MF
上,我真的不知道为什么

显然,从Weblogic的角度来看,这与包含资源的库将驻留在模块本身中是相同的,因此每个引用库的模块的容器都会自动发现注释和其他配置。我不太确定这是不是真的,但我相信是的,并尝试确认一下


将库移动到
APP-INF/lib
后,从库中找不到任何注释或配置。

问题在于库在EAR中是如何打包的。在起点中,所有库都位于EAR根目录上,依赖模块(war、ejb)通过其
MANIFEST.MF
类路径
属性引用它们。出于某种奇怪的原因,这些库甚至被列在EAR的
MANIFEST.MF
上,我真的不知道为什么

显然,从Weblogic的角度来看,这与包含资源的库将驻留在模块本身中是相同的,因此每个引用库的模块的容器都会自动发现注释和其他配置。我不太确定这是不是真的,但我相信是的,并尝试确认一下


将库移动到
APP-INF/lib
后,从库中找不到任何注释或配置。

如果WAR或EJB的MANIFEST.MF文件引用类路径条目中的JAR(无论JAR位于何处),JAR中的类是否被视为WAR或EJB的一部分?我怀疑是这样的,因为在我的例子中,每个web模块都试图从JAR托管相同的服务。当jar包含清单类路径条目时,每个被引用jar中的类对类可见