2017-06-19 88 views
0

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

我明白了WebSphere自由的解决方案上传基于Apache Wink文件有冲突,但它不承认任何下列文件:这里描述InMultiPartBufferedInMultiPartApache Wink : 7.8 MultiPart

我错在哪里?谢谢。

回答

2

使用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文档团队合作并尝试改进文档)。

你可以检查你的server.xml文件中这样的事情:

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

“规范”和“IBM-API”的apiTypeVisibility是默认启用的,但“第三方”不是。添加这一行应该允许你的应用程序加载org.apache.wink。*类。

希望这有助于 安迪

+0

我试着做正如你所建议的,但'Eclipse'没有看到'InMultiPart'和'BufferedInMultiPart'文件。如果遇到运行时问题,我认为您的解决方案更具相关性,即使在我尝试编译Liberty之前发布了对Liberty的战争之前,它也找不到文件。它没有在文档中提及,但也许我需要手动添加** Apache的表情**库,我的项目或我错过了什么东西? – Anatoly

+1

我的理解是Eclipse工具(WDT)会看到与运行时提供的相同的包 - 请确保您的项目构建路径设置为使用服务器的构建路径。最坏的情况下,你应该能够在 /dev/api/third-party/com.ibm.websphere.appserver.thirdparty.jaxrs_1.0.*.jar添加库(微版本号将取决于哪个版本的自由你正在使用)到项目的类路径中找到在开发时这些类。 –

+0

非常感谢您的帮助,您为我提供了一些线索是什么导致的问题,并感谢它,我发现什么原因造成的。我没有提到我建的项目中使用'maven'和'archetype'从自由的存储库。默认配置不包含所需的第三方库,并且应该将其他依赖项添加到'pom.xml'中以导入它。我公司将提供详细的解释在我的答案,但请保留你的答案也一样,它可以帮助别人。再次感谢你的帮助! – Anatoly

0

我没有在我的问题提到了这一点,因为我不认为它可以是有关我的问题,但我已经通过使用Liberty Maven Repository提供原型建造项目,Maven 。该原型提供的项目的默认配置:webapp-jee7-liberty不包含所有第三方库,例如正如提到的Andy McCright在给他评论的答案中。所以,你有两个选择,或者手动添加这种依赖关系(想什么,我避免)或将其添加至pom.xml如下:

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

是 - 自由 - IMPL: 这种依赖性包含第三方实现库,如Open JPA,Wind和Jackson。

对于更详细的解释一下这个资源:Configuring dependency POM files that emulate the classpath of specific WebSphere runtime environments

当然,你应该添加到server.xml下面的代码: <application id="myApp" name="myApp" type="war" location="myApp.war"> <classloader apiTypeVisibility="spec, ibm-api, third-party" /> </application> 作为安迪McCright这里解释:https://stackoverflow.com/a/44632423/947111

相关问题