在 maven 应用程序中使用 resteasy multipart provider jboss 模块
Use resteasy multipart provider jboss module in a maven application
我正在开发 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 APIs(包括非多部分 JAX-RS 端点)提供的默认实现,就像我一样不在我的 pom 中包含任何其他特定依赖项。
- 包括上面的依赖项会不会是冲突的根源?
- 有没有一种方法可以依赖 JBoss 提供的模块而不绑定到特定的 JBoss 版本?
经过更多调查,我发现以下内容:要在您的应用程序中使用容器模块(例如 jboss resteasy),请在您的 pom 中添加范围为 provided[=17= 的依赖项],这意味着这个依赖将在运行时由容器提供。然后你会注意到你的WAR文件中没有包含resteasy。
您的容器实现的版本是在运行时使用的版本,而不是您在 pom.xml 中提供的版本(这里是 3.6.1.SP9-redhat-00001 而不是 3.6。1.Final ).
但是,您的代码会根据 pom 中的版本进行编译,该版本应小于或等于容器提供的版本(假设容器中的更高版本应始终向后兼容)。
我正在开发 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 APIs(包括非多部分 JAX-RS 端点)提供的默认实现,就像我一样不在我的 pom 中包含任何其他特定依赖项。
- 包括上面的依赖项会不会是冲突的根源?
- 有没有一种方法可以依赖 JBoss 提供的模块而不绑定到特定的 JBoss 版本?
经过更多调查,我发现以下内容:要在您的应用程序中使用容器模块(例如 jboss resteasy),请在您的 pom 中添加范围为 provided[=17= 的依赖项],这意味着这个依赖将在运行时由容器提供。然后你会注意到你的WAR文件中没有包含resteasy。
您的容器实现的版本是在运行时使用的版本,而不是您在 pom.xml 中提供的版本(这里是 3.6.1.SP9-redhat-00001 而不是 3.6。1.Final ).
但是,您的代码会根据 pom 中的版本进行编译,该版本应小于或等于容器提供的版本(假设容器中的更高版本应始终向后兼容)。