我怎么能设置是JBoss 7.1.1 JSON提供商RestEasy的?
RestEasy的文件说:
的RESTEasy让您马歇尔JAXB注释的POJO,并从JSON。 该供应商在包装抛弃JSON库来实现这一目标。
但我发现,似乎在JBoss 7.1.1 RestEasy的使用杰克逊提供商因为我的课场@XmlTransient被忽略,但@JsonIgnore进行了处理。
我怎么能告诉RestEasy的使用抛弃,而不是杰克逊?
在JBoss,我发现这两个供应商。
我怎么能设置是JBoss 7.1.1 JSON提供商RestEasy的?
RestEasy的文件说:
的RESTEasy让您马歇尔JAXB注释的POJO,并从JSON。 该供应商在包装抛弃JSON库来实现这一目标。
但我发现,似乎在JBoss 7.1.1 RestEasy的使用杰克逊提供商因为我的课场@XmlTransient被忽略,但@JsonIgnore进行了处理。
我怎么能告诉RestEasy的使用抛弃,而不是杰克逊?
在JBoss,我发现这两个供应商。
如果你只是想拥有拉比标准不同的模块,你可以在一个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>
作为后续到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部署是多余的; 我没有尝试这种方式,因为现在把它放在这三个似乎很好地工作。
从我目前观察到,杰克逊是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的的。
我加入这行到standalone.conf.bat / sh和它解决了我的问题。
设置 “JAVA_OPTS =%JAVA_OPTS%-Dcom.sun.jersey.server.impl.cdi.lookupExtensionInBeanManager =真”