我使用glassfish 4使用最近发布的标准Java 7EE堆栈构建一些restful应用程序。
我的基本restful服务工作正常,但现在我想处理在同一服务中使用multipart mime类型的传入文件上传。
我找到了https://jersey.java.net/documentation/latest/user-guide.html中提到的POC球衣maven示例(multipart-webapp) 这部署和工作正常。 但是,只要我构建此框架以包含依赖注入,特别是,只要我创建beans.xml文件(甚至是空文件),我就会遇到各种错误:
严重:加载应用程序时出现异常:CDI部署失败:WELD-001408类型[提供者]在注入点[[BackedAnnotatedParameter]的参数1 [BackedAnnotatedParameter] @Inject public org.glassfish的类型[@Default]不满意依赖关系.jersey.media.multipart.internal.MultiPartReaderServerSide(@Context Providers,Provider)]
我尝试在我的beans.xml文件中使用新的bean-discovery-mode属性设置为all或none,但它没有任何区别。 这是Glassfish或Jersey中的一个错误,或者它们目前是不兼容的,即使Glassfish包含所有涉及的罐子,还是我做的事情真的很傻?
答案 0 :(得分:7)
事实证明,错误消息和beans.xml行为是红色的鲱鱼。为了帮助任何有同样问题的人,你需要做的就是在glassfish上的一个restful接口中使用multipart mime。
确保仅在编译时添加库。如果你使用netbeans,这意味着从glassfish / modules目录中添加multipart-mime-xxx.jar作为库,但是不要点击'package'按钮,因此它不包含在war包中(因为它已经在glassfish里面了)。
如果您正在使用maven,则可以通过在依赖项中使用提供的标记来获得相同的结果:
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-multipart</artifactId>
<scope>provided</scope>
</dependency>
如果您使用netbeans生成的restful模板作为起点,那么您将拥有一个名为application-config.java的文件,该文件已为您生成。添加以下行:
resources.add(MultiPartFeature.class);
紧接在线
之上 addRestResourceClasses(resources);
现在你应该发现你可以安全地在球衣中使用各种注释来进行多部分哑剧。