我正在尝试将WAR文件部署到WebSphere 8.5.5。它适用于Tomcat,WebLogic,Jetty,JBoss,但在WebSphere中失败。
堆栈跟踪以com.ibm.ws.webcontainer.webapp.WebAppImpl.scanForHandlesTypesClasses()
方法开始,该方法尝试创建org.apache.cxf.jaxrs.provider.AtomPojoProvider
类的实例。其他应用程序服务器在启动时不会创建AtomPojoProvider
实例。
AtomPojoProvider
的注释为javax.ws.rs.ext.Provider
。如何告诉WebSphere忽略此JAX-RS注释?
更新:尝试以下内容:
- com.ibm.websphere.jaxrs.server.DisableIBMJAXRSEngine = true;
- web.xml中的metadata-complete = true;
- 在管理控制台中检查元数据完成情况。
看起来WebSphere 8.5.5忽略了这些设置。
答案 0 :(得分:0)
您需要设置以下JVM属性:
com.ibm.websphere.jaxrs.server.DisableIBMJAXRSEngine=true
但是,在禁用JAX-RS运行时环境后,JAX-RS功能不可用,包括基本JAX-RS运行时功能,Enterprise JavaBeans(EJB)运行时集成,Java上下文和依赖注入(JCDI)运行时集成以及Servlet 3.0 web容器集成。
有关详细信息,请查看Disabling the JAX-RS runtime environment。
因此,您也可以考虑从应用程序中删除第三方引擎,并尝试使用WebSphere提供的引擎。
答案 1 :(得分:0)
在web.xml中将web-app版本更改为2.4:
public IList<ProductAllResponse> GetAllProducts(string apiSecretKey, int storeId, int languageId)
{
var _productRepository = EngineContext.Current.Resolve<IRepository<Product>>();
var GetAllProducts = new List<ProductAllResponse>();
try
{
if (!CheckAPIKey(apiSecretKey, storeId))
{
GetAllProducts.Add(new ProductAllResponse { Message = _localizationService.GetResource("Plugins.XcellenceIT.RestApi.Message.CheckApi") });
return GetAllProducts;
}
var query = (from p in _productRepository.Table
where p.Published && !p.Deleted
select new
{
Id = p.Id,
Name = p.Name
}).ToList();
foreach (var item in query)
{
GetAllProducts.Add(new ProductAllResponse { Id = item.Id, Name = item.Name });
}
return GetAllProducts;
}
catch (Exception exc)
{
_logger.Error(exc.Message);
GetAllProducts.Add(new ProductAllResponse { Message = exc.Message });
return GetAllProducts;
}
}