2013-07-11 54 views
3

我正在使用最近发布的标准Java 7EE堆栈来构建一些宁静的应用程序。glassfish 4和jersey-media-multipart 2不能与beans.xml一起工作

我的基本宁静服务工作正常,但现在我想处理在同一服务中使用多部分MIME类型的传入文件上传。

我发现了https://jersey.java.net/documentation/latest/user-guide.html 中提到的POC球衣maven示例(multipart-webapp),并且此部署工作正常。但是,一旦我构建这个框架以包含依赖注入,特别是当我创建一个beans.xml文件(即使是空的)时,我会得到各种类似的错误:

SEVERE :加载应用程序时出现异常:CDI部署失败:WELD-001408具有限定符的[Providers]类型的不完全依赖关系[注释点[@Default] [[BackedAnnotatedParameter] [BackedAnnotatedConstructor]的参数1 @Inject public org.glassfish.jersey.media .multipart.internal.MultiPartReaderServerSide(@Context Providers,Provider)]

我试过在我的beans.xml文件中使用新的bean-discovery-mode属性设置为all或none,但它没有区别。 这是Glassfish或Jersey中的错误,还是它们目前不兼容,即使Glassfish包含所有涉及的罐子,还是我在做一些非常愚蠢的事情?

回答

7

事实证明,错误消息和beans.xml行为是红鲱鱼。为了帮助出现同样问题的任何人,这就是您需要在glassfish的平静界面中使用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作为起点产生一个宁静的模板,你将有一个文件名为application-config.java,已为您生成。添加行:

resources.add(MultiPartFeature.class); 

立即行

 addRestResourceClasses(resources); 

上面现在你会发现,你可以放心地使用各种注解多默的球衣。

+0

+1我今天尝试运行[bookstore-webapp示例](https://github.com/jersey/jersey/tree/2.0/examples/bookstore-webapp/)时遇到此问题。 '提供了'在jersey-mvc-jsp依赖项上为我工作。 –

+0

对不起,我不能给这个答案更多的+1。 –