websphere网络部署v8.5.5.0在部署期间不扫描带注释的Web服务类

时间:2014-02-18 03:08:51

标签: java web-services websphere ejb-3.1

我有一个包含war文件的简单ear文件,该文件有一个用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>

当我将此文件部署到我的测试服务器(与RAD v9.0打包的Websphere Application Server v 8.5.5.0)时,将扫描和部署Web服务,我可以在配置屏幕中看到它们并正确访问wsdl文件。

但是,当我尝试将应用程序部署到Websphere Application Server Network Deployment v 8.5.5.0时,注释 已扫描,我看不到Web服务prodiver从websphere管理控制台单击应用程序时的配置设置,并且它的端点URL无法解析。

奇怪的是,扫描是在之前(耳朵)部署中激活的,但是当我将同一个耳朵文件再次放入服务器时,它也失败了

因为上面显示的web.xml是3.0版,所以应该进行扫描。并且因为Websphere 8.5完全符合java ee 6,所以应该这样做。

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

我一直在花费数天时间来解决这个问题,并且会感谢任何拥有websphere知识的人指出我可能的方向

UPDATE:在设置中,metadata-complete属性是完全错误的,我还要确保在部署中不选中它。

2 个答案:

答案 0 :(得分:2)

检查已部署的应用程序中是否已禁用metadata-complete attribute

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

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

如果这不能完成卸载/重新安装应用程序的工作,但请注意在部署期间将metadata-complete设置为disabled。

答案 1 :(得分:0)

我花了很多天试图解决这个问题。当我将log4j与参数&#34; ALL &#34;放在一起时,我发现了问题。执行此操作后,Websphere 8.5在使用@WebService批注部署应用程序期间记录了问题。

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

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

@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注释移动到封装的类。