在 WebLogic 12.2.1.1 中部署 WebServices 时出现问题

Issue deploying WebServices in WebLogic 12.2.1.1

我们有复杂的 javaee 应用程序。这个应用程序有许多 EJB 3 bean,其中一些 EJB 作为 Web 服务 (JAX-WS 2.1) 公开。整个应用程序打包到一个 EAR 中,所有 EJB bean 都在 ejb-jar.xml 描述符中定义。

我们已经从 WebLogic 12.1.1.0 (JDK6) 切换到 WebLogic 12.2.1.1 (JDK8 u77)。我们有 WebServices 将不再部署在 WebLogic 12.2.1.1 中的问题(但是 EAR 部署没有错误)- 在 WebLogic 12.1.1.0 中,我们没有 WebServices 部署的这个问题(相同的 EAR)。

我们已经使用一个简单的测试 EAR(一个 EJB 和一个 helloworld EJB 公开为 WebService)成功地测试了 WebService 在 WebLogic 12.2.1.1 上的部署。如果我们在我们的复杂应用程序(部署在 WebLogic 12.2.1.1 上)中创建相同的 helloworld WebService,则此 WebService 未部署,但 EJB 已成功部署。

我们可以 log/debug 在 WebLogic 12.2.1.1 中部署 WebServices 吗?我们想找出我们的 WebServices 无法部署在新的 WebLogic 中的原因。

[解决方法]

在将 EAR 剥离到只有必要的依赖项之后,我们发现问题出在@WebService 注释上。

如果我们有 class 或用 @WebService 注释的接口,它不是 EAR EJB 模块的一部分,例如EAR 的 lib 文件夹中的 JAR 依赖项然后 Web 服务将不会在 WebLogic 12.2.1.1 中部署。

现在的问题是,如果这个 WebLogic 12.2.1.x 行为是有意的并且可以以某种方式被(标准或 weblogic)描述符覆盖,或者这个 WebLogic 12.2.1.x bug?

您是否尝试过将您的 Web 服务部署为 EJB?即没有 EJB 注释并且在 ejb-jar.xml.

中没有引用

我目前正在将某些作为 Web 服务公开的 @Stateless EJB 从 WLS12.1.3 升级到 WLS12.2.1,这没有按预期工作(我在每次调用我的 Web 服务时都会遇到 NPE)。删除@Stateless 注释解决了 NPE 问题。看起来 12.2.1.1 版本的 Weblogic 与 EJB 和 Webservice 组合有问题。

我测试了以下代码:

@WebService
@Stateless
public class MyWS {
    @WebMethod
    public String test() {
        return "OK";
    }

}

Web 服务已成功部署,但我收到 NPE 调用测试方法。所以它看起来像是在使用 EJB 和 Webservice 时 WLS12.2.1 中的一个错误。

可能你的问题和这个很接近。

[解决方案]

在部署描述符的帮助下覆盖 WebServices 注释。

要注册 WebService,您需要在 ejb-jar.xml 中注册 WebService ejb bean service-endpoint 并放置 webservice.xml 和 weblogic-webservices.xml 在 EAR 的 EJB 模块中。

有关 ejb-jar.xml、webservice.xml 和 weblogic-webservices.xml 描述符之间关系的更多信息,请参见 Oracle 文档 Packaging and Deploying Web Services

weblogic 12c 似乎不支持与无状态 ejb 和 web 服务相同的class。如果删除 ejb 注释,您的服务将 运行。 向 oracle 打开错误。