【问题标题】:websphere network deployment v8.5.5.0 not scanning annotated web service classes during deploymentwebsphere 网络部署 v8.5.5.0 在部署期间不扫描带注释的 Web 服务类
【发布时间】:2014-02-18 03:08:51
【问题描述】:

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

@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 服务提供者当我从 websphere 管理控制台单击应用程序时的配置设置,它的端点 url 无法解析。

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

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

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

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

更新: metadata-complete 属性在设置中肯定是错误的,我还确保在部署中未选中它。

【问题讨论】:

  • 我没有测试过 servlet 注释,但是我们的 EJB 注释在 WAS 8.5.5 中运行良好。您是否尝试过为部署管理器启用跟踪日志记录?它有点难读,但这是你唯一能做的,除了打开 PMR

标签: java web-services websphere ejb-3.1


【解决方案1】:

检查 metadata-complete attribute 在您部署的应用程序中是否被禁用。

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

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

如果这不起作用,请卸载/重新安装应用程序,但请注意在部署期间将元数据完成设置为禁用。

【讨论】:

  • 在您的 WAS ND 环境和应用程序中检查您是否未更改 com.ibm.ws.amm.scan.context.filter.* 和 com.ibm.ws.application.enhancedScanning 属性.如需完整指南:wasdynacache.blogspot.gr/2012/05/…
  • 不幸的是,所有这些属性都没有设置。我检查了服务器、配置文件、jvm args、Manifest.MF 等。
【解决方案2】:

我花了很多天试图解决这个问题。当我将 log4j 与参数“ALL”一起放置时,我发现了问题。之后,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 注解移到封装的类中。

【讨论】:

    猜你喜欢
    • 2013-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-29
    • 1970-01-01
    • 2015-04-14
    相关资源
    最近更新 更多