【问题标题】:Use resteasy multipart provider jboss module in a maven application在 maven 应用程序中使用 resteasy multipart provider jboss 模块
【发布时间】:2021-05-11 22:43:51
【问题描述】:

我正在开发 maven Web 应用程序,其中包含 Java EE 8 标准 API

    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-api</artifactId>
        <version>8.0.1</version>
        <scope>provided</scope>
    </dependency>

我正在部署到 JBoss EAP 7.2.9

在我的应用程序中,我想将文件上传到 JAX-RS 端点。

@POST
@Path("{id}/file-upload")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public void uploadFile(@PathParam("id") Long id, @MultipartForm FileMetaData metaData) {}

文件元数据

public class FileMetaData{
  @FormParam("name")
  private String name;
  
  @FormParam("type")
  private String type;

  @FormParam("file")
  @PartType("application/octet-stream")
  byte[] file;
}

问题是@MultipartForm 不是标准JavaEE 8 API 的一部分。要使用它,我必须在我的 pom 中包含 resteasy 多部分提供程序

    <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-multipart-provider</artifactId>
        <version>3.6.1.Final</version>
        <scope>provided</scope>
    </dependency>

我使用了 WildFly 14.0.0 提供的版本,它是 JBoss EAP 7.2.9 的社区对应版本。但是,我不确定这是否是正确的做法。 JBoss EAP 使用它自己实现的模块“resteasy-multipart-provider-3.6.1.SP9-redhat-00001.jar”,它位于私有 maven 存储库中。

此外,我仍在使用 JBoss 为 Java EE API 提供的默认实现(包括非多部分 JAX-RS 端点),因为我的 pom 中没有包含任何其他特定的依赖项。

  • 是否包含上述依赖项会导致冲突?
  • 有没有办法依赖JBoss提供的模块而不绑定到特定的JBoss版本?

【问题讨论】:

    标签: multipartform-data resteasy jboss-eap-7 java-ee-8


    【解决方案1】:

    经过更多的调查,我发现以下内容:要在您的应用程序中使用容器模块(例如 jboss resteasy),请在您的 pom 中添加范围为 provided 的依赖项,这意味着该依赖项将是由容器在运行时提供。然后你会注意到resteasy没有包含在你的WAR文件中。

    您的容器实现的版本是运行时使用的版本,而不是您在 pom.xml 中提供的版本(此处为 3.6.1.SP9-redhat-00001 而不是 3.6.1.Final)。

    但是,您的代码会根据 pom 中的版本进行编译,该版本应小于或等于容器提供的版本(假设容器中的更高版本应始终向后兼容)。

    【讨论】:

      猜你喜欢
      • 2020-01-15
      • 1970-01-01
      • 2019-10-13
      • 2015-04-18
      • 1970-01-01
      • 1970-01-01
      • 2017-07-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多