在设置的RESTEasy JSON提供商在JBoss 7.1.1(Set JSON provider

2019-07-30 19:26发布

我怎么能设置是JBoss 7.1.1 JSON提供商RestEasy的?

RestEasy的文件说:

的RESTEasy让您马歇尔JAXB注释的POJO,并从JSON。 该供应商在包装抛弃JSON库来实现这一目标。

但我发现,似乎在JBoss 7.1.1 RestEasy的使用杰克逊提供商因为我的课场@XmlTransient被忽略,但@JsonIgnore进行了处理。

我怎么能告诉RestEasy的使用抛弃,而不是杰克逊?

在JBoss,我发现这两个供应商。

Answer 1:

如果你只是想拥有拉比标准不同的模块,你可以在一个JBoss具体部署描述符提供了这一点。

阅读https://docs.jboss.org/author/display/AS71/Class+Loading+in+AS7学习的细节,并阅读https://docs.jboss.org/author/display/AS7/Implicit+module +依赖性+为部署学习哪些模块的JBoss默认使用。

为了交换这两个供应商,提供了一个META-INF/jboss-deployment-structure.xml与下面的内容如下。

本文转自提供商对我来说。

BR亚历山大。

<jboss-deployment-structure>
  <deployment>
    <exclusions>
      <module name="org.jboss.resteasy.resteasy-jackson-provider" />
    </exclusions>
    <dependencies>
      <module name="org.jboss.resteasy.resteasy-jettison-provider" />
    </dependencies>
  </deployment>
</jboss-deployment-structure>


Answer 2:

作为后续到ahus1的回答是:如果你有一个多层次的部署存档(即包含EJB罐子和战争文件的顶级EAR文件),你需要配置的排除org.jboss.resteasy.resteasy-jackson-provider在任何一个子部署包含的RESTEasy / JAX-RS组件。

在我的部署,例如,我的REST终点注释在我的EJB JAR文件EJB的顶部,而我@ApplicationPath -annotated javax.ws.rs.core.Application子激活的RESTEasy是我的战争文件。 我发现,把排除只在顶层(EAR)的部署(如ahus1的例子),或在EJB-JAR级部署的方法是无效的,但是我终于得到的RESTEasy通过将使用抛弃,而不是杰克逊在所有3个级别的排除(EAR,EJB,网络):

<?xml version="1.0" encoding="UTF-8" ?>
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
    <deployment>
        <exclusions>
            <module name="org.jboss.resteasy.resteasy-jackson-provider" />
        </exclusions>
        <dependencies>
            <module name="org.jboss.resteasy.resteasy-jettison-provider" />
        </dependencies>
    </deployment>
    <sub-deployment name="MyApp-ejb.jar">
        <exclusions>
            <module name="org.jboss.resteasy.resteasy-jackson-provider" />
        </exclusions>
        <dependencies>
            <module name="org.jboss.resteasy.resteasy-jettison-provider" />
        </dependencies>
    </sub-deployment>
    <sub-deployment name="MyApp.war">
        <exclusions>
            <module name="org.jboss.resteasy.resteasy-jackson-provider" />
        </exclusions>
        <dependencies>
            <module name="org.jboss.resteasy.resteasy-jettison-provider" />
        </dependencies>
    </sub-deployment>
</jboss-deployment-structure>

这很可能是我只需要在子部署的排除,并把它放在主EAR部署是多余的; 我没有尝试这种方式,因为现在把它放在这三个似乎很好地工作。



Answer 3:

从我目前观察到,杰克逊是AS 7.1.2 JBoss中的缺省值。

首先 ,RestEasy的模块从应用程序的类加载器,这IMO不应该是隐藏的。 所以,我刚刚提出https://issues.jboss.org/browse/AS7-5605 。

其次 ,你的问题:要设置特定的供应商,你需要从类加载器的斑点作为其删除-如此反复,去module.xml的,并排除你不想使用这些供应商-如果杰克逊可用,RestEasy的使用它; 否则,使用抛弃。

此外,添加这些项目的编译时依赖,所以你可以使用自己的特殊注解。 例:

    <!-- RestEasy -->
    <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>jaxrs-api</artifactId>
        <version>2.3.4.Final</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-core-asl</artifactId>
        <version>1.9.2</version>
        <scope>provided</scope>
    </dependency>

注:直到AS7-5605完成后,您需要手动设置的版本。 之后(在AS的更高版本),你必须删除这些版本,并使用那些在JBoss中BOM定义。 见的JBoss AS QuckStarts例如。

随意创作和提供一个快速入门使用替代供应商RestEasy的的。



Answer 4:

我加入这行到standalone.conf.bat / sh和它解决了我的问题。

设置 “JAVA_OPTS =%JAVA_OPTS%-Dcom.sun.jersey.server.impl.cdi.lookupExtensionInBeanManager =真”



文章来源: Set JSON provider at RESTEasy on JBoss 7.1.1