Java WebSphereNetworkDeployment v8.5.5.0在部署期间不扫描带注释的web服务类

Java WebSphereNetworkDeployment v8.5.5.0在部署期间不扫描带注释的web服务类,java,web-services,websphere,ejb-3.1,Java,Web Services,Websphere,Ejb 3.1,我有一个简单的ear文件,其中包含一个war文件,该文件有一个用WebService注释的本地ejb类 @WebService @Stateless @LocalBean public class TestWS { @WebMethod public int meaningoflife() {return 42;} } 我的web.xml文件如下所示: <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns=

我有一个简单的ear文件,其中包含一个war文件,该文件有一个用WebService注释的本地ejb类

@WebService
@Stateless
@LocalBean
public class TestWS {
    @WebMethod
    public int meaningoflife() {return 42;}
}
我的web.xml文件如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
          http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         metadata-complete="false"
         version="3.0">

</web-app>

当我将此文件部署到测试服务器(WebSphereApplicationServerV8.5.5.0与RADV9.0打包)时,将扫描并部署web服务,我可以在配置屏幕中看到它们,并正确访问wsdl文件

但是,当我尝试将应用程序部署到Websphere application Server Network Deployment v 8.5.5.0时,注释未被扫描,当我从Websphere管理控制台单击应用程序时,我看不到web service prodiver配置设置,并且它的端点URL未解析

奇怪的是,扫描是在以前的(ear)部署中激活的,但当我第二次将相同的ear文件放入服务器时,它也失败了

因为上面显示的web.xml是3.0版,所以应该进行扫描。因为WebSphere8.5完全兼容JavaEE6,所以它应该做到这一点

在manifest.mf中将usewsfip61scanpolicy设置为true不起作用,即使它应该扫描类文件

我已经花了几天的时间试图解决这个问题,希望任何具有websphere知识的人都能为我指出一个可能的方向

更新:元数据完成属性在安装程序中是完全错误的,我还确保在部署中未选中该属性。

检查已部署的应用程序中禁用的属性

您可以从WAS ND控制台执行此操作:

企业应用程序您的应用程序模块元数据>取消选中元数据完整属性复选框,与节点同步,然后重新启动应用程序


如果这不起作用,请卸载/重新安装应用程序,但要小心在部署期间将metadata complete设置为禁用状态。

我花了很多天试图解决此问题。当我将log4j与参数“ALL”放在一起时,我发现了问题。之后,WebSphere8.5使用@WebService注释记录了应用程序部署期间的问题

我的问题是,我在这个@WebService类中有其他来源的类,而wsgen无法识别

解决方案是创建一个封装我的逻辑的委托类

@WebService(targetNamespace = "http://tempuri.org/" ,serviceName = "MyService", portName = "MyServicePort")
public class MyServiceDelegate {

    my.class.MyService serviceLogic = null;

    public MyServiceDelegate() {
        serviceLogic = new my.class.MyService();
    }

    @WebMethod
    public ExecuteServiceResponse executeService() {
        return serviceLogic.executeService();
    }

}

尝试将@Stateless和@LocalBean注释移动到封装类。

在WAS ND环境和应用程序中,检查com.ibm.ws.amm.scan.context.filter.*和com.ibm.ws.application.enhancedScanning属性是否未更改。这里有一个完整的指南:不幸的是,所有这些属性都没有设置。我检查了服务器、概要文件、jvm参数、Manifest.MF等。我还没有测试servlet注释,但是我们的EJB注释在WAS 8.5.5中运行良好。您是否尝试过为部署管理器启用跟踪日志记录?阅读起来有点困难,但除了打开PMR,这是你唯一能做的事情