使用 JAX-RS 1.1 功能部件将文件上载到 Websphere Liberty



我知道jax-rs 1.1不支持直接上传,每个应用程序服务器都有自己的实现来处理multipart/form-data。 我无法意识到如何使用 jax-rs 1.1 功能使用 Websphere Liberty 17 来做到这一点。jaxrs-2.0 功能我无法使用,因为它与 openidConnectClient-1.0 冲突

我知道 Websphere Liberty 基于 Apache Wink 上传文件的解决方案,但它无法识别以下任何文件:InMultiPartBufferedInMultiPart如下所述: 阿帕奇眨眼 : 7.8 多部件

我错在哪里?谢谢。

在使用 jaxrs-1.1 功能部件时,您应该能够使用 InMultiPart 和 BufferedInMultiPart API。 知识中心在此处提供了一些说明: https://www.ibm.com/support/knowledgecenter/en/SSEQTP_8.5.5/com.ibm.websphere.base.doc/ae/twbs_jaxrs_multipartcontent.html

但是,我怀疑问题是由于您的应用程序未指定"第三方"API 类型而导致的。 这是从非 IBM 源访问 API 所必需的 - 在本例中为 Apache Wink。 我不认为这个陷阱在知识中心有很好的记录(我将与 IBM 文档团队合作并尝试改进文档)。

你能检查你的服务器.xml文件是否有这样的东西:

<application id="myApp" name="myApp" type="war" location="myApp.war">
<classloader apiTypeVisibility="spec, ibm-api, third-party"  />
</application>

默认情况下启用"spec"和"ibm-api"的apiTypeVisibility,但"第三方"不启用。 添加此行应允许应用程序加载 org.apache.wink.* 类。

希望这有帮助, 安 迪

我没有在我的问题中提到这一点,因为我认为它与我的问题无关,但我使用 Liberty Maven 存储库提供的原型构建了带有Maven的项目。此原型提供的项目的默认配置:webapp-jee7-liberty不包含所有第三方库,例如Andy McCright在给他的回答的评论中提到的com.ibm.websphere.appserver.thirdp‌​arty.jaxrs_1.0.*.jar。因此,您有两个选择,或者手动添加此依赖项(我想避免的)或通过pom.xml添加它,如下所示:

<dependency> <groupId>com.ibm.tools.target</groupId> <artifactId>was-liberty-impl</artifactId> <version>RELEASE</version> <type>pom</type> <scope>provided</scope> </dependency>

was-liberty-impl:此依赖项包含第三方实现库,如 Open JPA、Wind 和 Jackson。

有关更详细的说明,请查看此资源:配置模拟特定 WebSphere 运行时环境的类路径的依赖关系 POM 文件

当然,您应该添加以下代码server.xml <application id="myApp" name="myApp" type="war" location="myApp.war"> <classloader apiTypeVisibility="spec, ibm-api, third-party" /> </application> 正如安迪·麦克赖特(Andy McCright)在这里解释的那样: https://stackoverflow.com/a/44632423/947111

最新更新