2016-12-14 83 views
1

我们有复杂的javaee应用程序。该应用程序有许多EJB 3 bean,其中一些EJB作为WebServices(JAX-WS 2.1)公开。整个应用程序被打包到一个EAR中,所有EJB bean都在ejb-jar.xml描述符中定义。在WebLogic中部署WebServices的问题12.2.1.1

我们已经从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的EJB和一个helloworld EJB)成功测试了WebLogic 12.2.1.1上的WebService部署。如果我们在复杂的应用程序中创建相同的helloworld WebService(部署在WebLogic 12.2.1.1上),那么这个WebService不会部署,但是EJB已成功部署。

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

[解决方案]

剥离下来,只需要依赖我们发现,问题出在@WebService标注EAR后。

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

现在的问题是,如果此WebLogic 12.2.1.x行为是打算的,并且可以以某种方式覆盖(标准或weblogic)描述符或者是此WebLogic 12.2.1.x错误?

+1

中找到它是一种功能,而不是一个错误。 “Java EE编程模型对Web容器使用JDK注释功能,例如EJB,servlet,Web应用程序和JSP” http://docs.oracle.com/middleware/12212/wls/WLPRG/annotate_dependency.htm #WLPRG257 这意味着只有耳朵顶层的罐子被标注扫描。对我来说,解决方案是将包含service-endpoint-interface的jar放在顶层。 – weberjn

回答

0

您是否尝试将Webservice部署为不是EJB?即没有EJB注释并且在ejb-jar.xml中没有引用。

我目前正在将一些作为Webservice公开的@Stateless EJB从WLS12.1.3升级到WLS12.2.1,并且这不像预期的那样工作(我在每次调用web服务时都得到了NPE)。删除@Stateless注解解决了NPE问题。它看起来像WebLogic的12.2.1.1版本有EJB和Webservice组合的问题。

我测试了以下代码:

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

} 

WebService的成功部署,但我得到NPE调用的测试方法。因此,在使用EJB和Webservice时,它看起来像WLS12.2.1中的一个错误。

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

+0

感谢您的回答,但我们的应用程序部署在WebLogic上时情况并非如此。我在部署时没有任何异常 - 在我的情况下,结果没有部署Web服务 – maha

2

[SOLUTION]

借助部署描述符覆盖WebServices注释。

要注册WebService,您需要在ejb-jar.xml中注册WebService ejb bean服务端点,并将webservice.xml和weblogic-webservices.xml注册到EAR的EJB模块中。

更多关于ejb-jar.xml中,webservice.xml和weblogic-webservices.xml的描述符之间的关系可以Oracle文档Packaging and Deploying Web Services