我知道jax-rs 1.1
不支持直接上传,每个应用程序服务器都有自己的实现来处理multipart/form-data
。 我无法意识到如何使用 jax-rs 1.1 功能使用 Websphere Liberty 17 来做到这一点。jaxrs-2.0 功能我无法使用,因为它与 openidConnectClient-1.0 冲突
我知道 Websphere Liberty 基于 Apache Wink 上传文件的解决方案,但它无法识别以下任何文件:InMultiPart
或BufferedInMultiPart
如下所述: 阿帕奇眨眼 : 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.thirdparty.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