我们有复杂的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>
答案 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)