3

我正在使用 glassfish 4 使用最近发布的标准 Java 7EE 堆栈构建一些宁静的应用程序。

我的基本 restful 服务运行良好,但现在我想处理在同一服务中使用 multipart mime 类型的传入文件上传。

我在https://jersey.java.net/documentation/latest/user-guide.html中找到了一个 POC jersey maven 示例(multipart-webapp), 它可以正常部署和工作。但是,一旦我在此框架上构建以包含依赖项注入,特别是,一旦我创建了 beans.xml 文件(甚至是空文件),我就会收到各种错误,例如:

严重:加载应用程序时出现异常:CDI 部署失败:WELD-001408 在注入点 [[BackedAnnotatedParameter] [BackedAnnotatedConstructor] @Inject public org.glassfish.jersey 的限定符 [@Default] 的类型 [Providers] 的依赖关系不满足。 media.multipart.internal.MultiPartReaderServerSide(@Context Providers, Provider)]

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

4

1 回答 1

7

事实证明,错误消息和 beans.xml 行为是红鲱鱼。为了帮助遇到同样问题的任何人,您需要在 glassfish 的安静界面中使用多部分 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);

现在您应该发现您可以安全地使用 jersey 中的 multipart mime 的各种注释。

于 2013-07-12T06:35:19.637 回答