假设我们的情况是 .ear
应用程序包含多个 .war
和 .jar
,我们在其中控制 JSON 反/序列化我们的 REST 端点中的对象通过自定义 javax.ws.rs.ext.Provider
打包在一个特定 .jar
中,并使用我们的 .ear 部署为 lib
.
现在,当我们即将使用上述自定义反/序列化来扩展部署数量时,我们寻找一种减少工件大小的方法,我基本上想到了三种可能性,其中只有两种可行,一种似乎也可行冗长才是真正的解决方案:
部署
javax.ws.rs.ext.Provider
-artifact,每个.ear
都引用它(缺点:多个.ear
-包含相同.jar
库的工件)。将
javax.ws.rs.ext.Provider
-artifact 安装为全局 Wildfly 模块,并通过jboss-deployment-struct.xml
添加依赖项> (缺点:.ear
-artifact 可以部署,但反序列化/序列化无法按预期工作,因为 Wildfly 模块不是已部署的.ear
类路径的一部分code>-application 和javax.ws.rs.ext.Provider
不会在部署时自动注册)。将
javax.ws.rs.ext.Provider
-artifact 安装为“普通”Wildfly 模块并引用自定义javax.ws.rs.ext.Provider
在 REST 配置类的getClasses
方法中,该方法扩展了javax.ws.rs.core.Application
(缺点:我们必须列出每个javax .ws.rs.ext.Provider
和 REST 端点显式地代替目前使用的自动发现)。
是否有第四种可能性来完成此任务,或者是否对上述三种可能性进行了任何调整?我没有找到任何解决方案来解决这个(我认为)在 Wildfly 中安装“全局”自定义 javax.ws.rs.ext.Provider
的基本任务。
最佳答案
解决方案非常容易找到,很难正确找到:
或者:
javax.ws.rs.ext.Provider
-artifact 正在由名为javax.ws.rs.ext.Providers
的文件扩展放置于/META-INF/services
其中所有类都用javax.ws.rs.ext.Provider
注释列出了它们的完全限定类名。.ear
- Artifactjboss-deployment-structure.xml
由两个依赖项扩展:-
<module name="<module-name>" slot="main" />
对于<deployment>
-元素。 -
<module name="<module-name>" slot="main" services="import" />
对于.war
-文物<sub-deployment>
-(隐式)使用javax.ws.rs.ext.Provider
的类的元素- Artifact 。
-
或者:
- 离开
javax.ws.rs.ext.Provider
- 与以前一样的 Artifact 。 .ear
- Artifactjboss-deployment-structure.xml
由两个依赖项扩展:-
<module name="<module-name>" slot="main" annotations="true" />
对于<deployment>
-元素。 -
<module name="<module-name>" slot="main" />
对于.war
-文物<sub-deployment>
-(隐式)使用javax.ws.rs.ext.Provider
的类的元素- Artifact 。
-
关于java - 在 Wildfly 中安装自定义 JAX-RS JSON 反/序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40148156/