在WebLogic 12.2.1.1

时间:2016-12-14 12:06:50

标签: web-services java-ee jax-ws weblogic12c

我们有复杂的javaee应用程序。此应用程序具有许多EJB 3 bean,其中一些EJB作为WebServices(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和一个作为WebService公开的helloworld EJB)成功测试了WebLogic 12.2.1.1上WebService的部署。如果我们在复杂的应用程序中创建相同的helloworld WebService(部署在WebLogic 12.2.1.1上),则不会部署此WebService,但是EJB已成功部署。

我们可以在WebLogic 12.2.1.1中记录/调试WebServices的部署吗?我们想找出为什么我们的WebServices不会部署在新的WebLogic中的原因。

[解决方法]

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

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

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

3 个答案:

答案 0 :(得分:2)

[溶液]

借助部署描述符覆盖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

答案 1 :(得分:0)

您是否尝试将Web服务部署为EJB?即没有EJB注释而ejb-jar.xml中没有引用。

我目前正在将一些从Web服务公开的@Stateless EJB从WLS12.1.3升级到WLS12.2.1,这不能按预期工作(我在每次调用webservice时都会获得NPE)。删除@Stateless注释解决了NPE问题。看起来Weblogic的12.2.1.1版本在EJB和Web服务组合方面存在问题。

我测试了以下代码:

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

}

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

可能是你的问题接近这一点。

答案 2 :(得分:0)

似乎weblogic 12c不支持与无状态ejb和Web服务相同的类。如果删除ejb注释,您的服务将会运行。 打开oracle的bug。