首页 文章

在JBoss 7.1.1上的RESTEasy上设置JSON提供程序

提问于
浏览
8

如何在JBoss 7.1.1上为RestEasy设置JSON提供程序?

RestEasy文档说:

RESTEasy允许您将JAXB带注释的POJO与JSON进行编组 . 此提供程序包装Jettison JSON库以实现此目的 .

但我发现似乎在JBoss 7.1.1上Resteasy使用了Jackson提供程序,因为我的类字段上的@XmlTransient被忽略了,但@JsonIgnore被处理了 .

我如何告诉Resteasy使用Jettison而不是Jackson?

在Jboss上我找到了两个提供商 .

4 回答

  • 0

    如果你只想要一个比标准模块拉不同的模块,你可以在一个特定于jboss的部署描述符中提供它 .

    阅读https://docs.jboss.org/author/display/AS71/Class+Loading+in+AS7以了解详细信息,并阅读https://docs.jboss.org/author/display/AS7/Implicit+module+dependencies+for+deployments以了解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>
    
  • 1

    作为 ahus1 答案的后续内容:如果您有一个多级部署存档(即包含EJB jar和war文件的顶级EAR文件),则需要在任何子目录上配置 org.jboss.resteasy.resteasy-jackson-provider 的排除-deployment包含RESTEasy / JAX-RS组件 .

    例如,在我的部署中,我的REST endpoints 在EJB jar文件中的EJB之上进行了注释,而激活RESTEasy的 @ApplicationPath -notnotated javax.ws.rs.core.Application 子类则在我的war文件中 . 我发现将排除项单独放在顶级(EAR)部署(如在ahus1的示例中)或在EJB-jar级别部署上的方法是无效的,但我终于得到了RESTEasy来使用Jettison而不是Jackson所有3个级别(EAR,EJB,Web)的排除:

    <?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部署上是多余的;我没有这样尝试,因为现在把它放在所有三个上似乎工作得很好 .

  • 1

    从我现在观察到的情况来看,Jackson是JBoss AS 7.1.2的默认设置 .

    First ,RestEasy模块隐藏在应用程序的类加载器中,IMO不应该这样 . 所以我刚刚提交了https://issues.jboss.org/browse/AS7-5605 .

    Second ,针对您的问题:要设置特定的提供者,您需要将其从AS中的类加载器中删除 - 所以再次使用 module.xml 's and comment out those providers which you don' t想要使用 - 如果Jackson可用,则RestEasy使用它;否则它使用Jettison .

    另外,将项目添加为编译时依赖项,这样您就可以使用它们的特定注释 . 例:

    <!-- 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 .

    使用替代提供商随意create and contribute a QuickStart的RestEasy .

  • 3

    我将此行添加到standalone.conf.bat / sh并解决了我的问题 .

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

相关问题