我如何告诉WebSphere忽略JAX-RS注释?

时间:2015-07-06 17:54:47

标签: websphere jax-rs war websphere-8

我正在尝试将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忽略了这些设置。

2 个答案:

答案 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;
        }

    }