我有一个简单的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 时,注释会被扫描,并且当我从 websphere 管理中单击应用程序时,我无法看到 Web 服务提供者配置设置控制台及其端点 URL 无法解析。 奇怪的是,扫描是在之前的(ear)部署中激活的,但是当我第二次将相同的ear文件放入服务器时,它也失败了 因为上面显示的 web.xml 是 3.0 版本,所以应该进行扫描。因为 Websphere 8.5 完全兼容 java ee 6,所以它应该可以做到。
在manifest.mf中将UseWSFEP61ScanPolicy设置为true不起作用,即使它应该扫描类文件。
我花了几天时间试图解决这个问题,并且希望任何有 websphere 知识的人为我指出一个可能的方向
更新:元数据完整属性在设置中肯定是错误的,我还确保在部署中未选中它。
检查您部署的应用程序中是否禁用了
metadata-complete您可以从 WAS ND 控制台执行此操作:
企业应用程序>
您的应用程序> 模块元数据 > 取消选中元数据完整属性复选框,与节点同步并重新启动您的应用程序。 如果这不起作用,请卸载/重新安装应用程序,但请小心在部署期间将元数据完整设置为禁用。
我花了很多天试图解决这个问题。当我将 log4j 与参数“
ALL我的问题是我在这个 @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注释移至封装类。