我很感兴趣,Java EE / JAX-WS规范(或一般的Weblogic)如何处理情况,其中在库jar中有@WebService
个带注释的Web服务实现类...
考虑到所有三种可能性的JAX-WS规范,Weblogic应该发现并托管这些服务,忽略它们还是未定义的行为?
更重要的是,如何配置行为?最终,我不希望托管这些Web服务但它们是,并且我不确定这是正常行为还是错误配置。
答案 0 :(得分:3)
Web服务的部署由第8章"部署"中的JSR-109 Implementing Enterprise Web Services 1.4 Specification定义。
它说:
执行工件包装的验证以确保:
- Web服务部署描述符中定义的每个WSDL中的每个端口都有一个相应的端口组件元素。
- JAX-RPC或JAX-WS服务组件仅打包在WAR文件中。
- 无状态或单一会话Bean Web服务仅打包在EJB-JAR或WAR文件中。
- Web Services for Java EE运行时支持WSDL端口使用的WSDL绑定。如果没有端口使用它们,则可以在WSDL中声明不受支持的绑定。
这意味着您的服务器应该只在部署为WAR的一部分时才能找到这些服务,或者(如果它们已经使用@Singleton或@Stateless注释或在部署描述符中配置)作为EJB模块。
如果它们出现在WEB-INF / lib目录中,它们就是WAR的一部分。
在EAR的APP-INF/lib
目录中存在此类jar是未指定的,因为该目录是可以追溯到00s某个时间的WebLogic扩展。您应该避免使用它,只需将实用程序jar放在EAR文件的lib
目录中。
无论如何,如果您的服务器正在从WAR文件以外的任何其他地方部署Web服务(并且它们绝对不是EJB),那么您需要向您的供应商投诉。
答案 1 :(得分:0)
问题在于如何将库打包在EAR中。在起点上,所有库都驻留在EAR根目录上,并且依赖模块(WAR,EJB)通过其Class-Path
的{{1}}属性引用它们。出于一些奇怪的原因,这些图书馆甚至列在了EAR的MANIFEST.MF
上,我也不知道为什么。
显然,从Weblogic的角度来看,这与包含在模块本身中的资源的库相同,因此每个模块引用的容器会自动发现注释和其他配置。图书馆。我并不完全确定是这种情况,但我相信并尝试确认。
将库移动到MANIFEST.MF
后,未从库中发现任何注释或配置。