Jersey 2 多部分表单数据注入源

2024-04-15

我有一个方法:

@POST
@Consumes("multipart/form-data")
@Produces( {"text/xml"})
public Response processForm(
    @FormDataParam("myparam") InputStream is,
    @FormDataParam("myparam") FormDataContentDisposition detail)

与 Jersey 1.x 配合得很好。

我要升级到 2.0 m11。

现在我收到以下错误:

12/01/2013 11:15:04 AM org.glassfish.jersey.server.ApplicationHandler initialize
INFO: Initiating Jersey application, version Jersey: 2.0-m11 2012-12-21 12:34:15...
12/01/2013 11:15:04 AM org.glassfish.jersey.internal.Errors processErrors
SEVERE: The following errors and warnings have been detected:
WARNING: No injection source found for a parameter of type public javax.ws.rs.core.Response com.plutext.FileUpload.processForm(java.io.InputStream,org.glassfish
.jersey.media.multipart.FormDataContentDisposition) at index 0.

我发现http://java.net/jira/browse/JERSEY-1413 http://java.net/jira/browse/JERSEY-1413并承诺http://java.net/projects/jersey/lists/commits/archive/2012-09/message/126 http://java.net/projects/jersey/lists/commits/archive/2012-09/message/126这似乎相关,但对我来说如何解决问题并不明显。

UPDATED

我制作了一个 servlet,它在 org.glassfish.jersey.server.ApplicationHandler 初始化之前在 Tomcat 中运行:

public class Jersey2Init extends HttpServlet {

    private static final Logger jul = Logger.getLogger(Jersey2Init.class
        .getName());

    static {    
        System.out.println("\n\nrunning Jersey2Init\n\n");

        final ResourceConfig resourceConfig1 = new ResourceConfig(XFormService.class);
        resourceConfig1.registerInstances(new LoggingFilter(jul, true));
        resourceConfig1.register(MultiPartFeature.class);       

        final ResourceConfig resourceConfig2 = new ResourceConfig(AssembleService.class);
        resourceConfig2.registerInstances(new LoggingFilter(jul, true));
        resourceConfig2.register(MultiPartFeature.class);       
    }
}

它肯定是先运行的:

INFO: Deploying web application archive C:\Java\apache-tomcat-7.0.29\webapps\Foo-Services.war


running Jersey2Init


18/01/2013 9:09:51 PM org.glassfish.jersey.server.ApplicationHandler initialize
INFO: Initiating Jersey application, version Jersey: 2.0-m11 2012-12-21 12:34:15...
18/01/2013 9:09:52 PM org.glassfish.jersey.internal.Errors processErrors
SEVERE: The following errors and warnings have been detected:

但我仍然遇到同样的错误。


您需要在您的应用程序上启用 MultiPart 功能。启用此功能会将必要的消息正文读取器、写入器注入到您的 Jersey 2 应用程序中。以下是注册它们的方法:

在服务器端(http-server):

final ResourceConfig resourceConfig = new ResourceConfig(MultiPartResource.class);
resourceConfig.register(MultiPartFeature.class);

在服务器端(servlet 部署):

import org.glassfish.jersey.filter.LoggingFilter;
import org.glassfish.jersey.media.multipart.MultiPartFeature;

import javax.ws.rs.core.Application;
import java.util.HashSet;
import java.util.Set;

public class MyApplication extends Application {
    @Override
    public Set<Class<?>> getClasses() {
        final Set<Class<?>> classes = new HashSet<Class<?>>();
        // register resources and features
        classes.add(MultiPartFeature.class);
        classes.add(MultiPartResource.class);
        classes.add(LoggingFilter.class);
        return classes;
    }
}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <servlet>
        <servlet-name>Jersey Servlet</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>javax.ws.rs.Application</param-name>
            <param-value>com.aruld.jersey.multipart.MyApplication</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Jersey Servlet</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
</web-app>

在客户端:

final ClientConfig clientConfig = new ClientConfig();
clientConfig.register(MultiPartFeature.class);
Client client = ClientFactory.newClient(clientConfig);

我在 Github 上整理了一个端到端 Jersey 2 MultiPart 示例here https://github.com/aruld/jersey2-multipart-sample.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Jersey 2 多部分表单数据注入源 的相关文章

随机推荐

  • 无法获取源的真实路径 - Xcode、SFML、C++

    我是 SFML 新手 并遵循 SFML 2 5 的 SFML 和 Xcode 教程来尝试构建和运行基本程序 将 Frameworks 的内容复制到 Library Frameworks和 extlibs 的内容 Library Framew
  • Python 的 SignalR 替代方案

    Python 世界中 SignalR 的替代方案是什么 准确地说 我在Windows 8上使用tornado和python 2 7 6 我发现sockjs龙卷风 https github com MrJoes sockjs tornado
  • Swift Playground 中的弱引用无法按预期工作

    我一直在关注弱引用示例中级 Swift WWDC 会议在操场上 我将代码稍作修改如下 class Apartment let address Int init address Int self address address weak va
  • 如何在不使用 extern crate 的情况下导入 Rust 2018 中的所有宏、派生宏和过程宏?

    我正在尝试铁锈版 2018 https rust lang nursery github io edition guide rust 2018 index html 在 Rust 2015 中你使用 macro use extern cra
  • IEnumerable 如何在后台工作

    我正在徘徊于更深入的功能IEnumerable
  • 如何在 Java 中创建安全的随机 AES 密钥?

    使用标准 JDK 在 Java 中生成安全 随机 AES 密钥的推荐方法是什么 在其他帖子中 我发现了这一点 但是使用SecretKeyFactory可能是一个更好的主意 KeyGenerator keyGen KeyGenerator g
  • 如何将文件从 JavaScript 发送到 Java WebService

    我有一个使用 Cordova 的 HTML5 应用程序 您可以从您的设备上传文件 图像和视频 我必须将用户上传的文件发送到Java WebService 然后将其上传到服务器 我需要帮助 因为我无法实现我想要的 我尝试了在互联网上找到的几种
  • 在方法中使用索引签名 - Typescript 3.5

    interface Keys key string any const obj Keys trimDescription text string length number string return text length gt leng
  • Swift 中的阶段 1 和阶段 2 初始化

    这是 Apple Swift 文档的副本 一旦超类的所有属性都有初始值 它的内存被认为已完全初始化 并且阶段 1 已完成 超类的指定初始化器现在有机会 进一步自定义实例 尽管不是必须的 一旦超类的指定初始化器完成 子类的指定初始化器可以执行
  • 使用 jQuery AJAX 发送多个数据参数

    我正在向 php 文件发送 ajax 请求 如下所示 function checkDB code userid ajax type POST url profile check code php data code code userid
  • iOS UITextField Swift 中的下划线样式

    我添加了这张用户界面登录图像 希望您能看到 请注意 除了底部的线条之外 文本字段是透明的 我需要输入什么代码才能产生这种效果 我可以将必要的信息放入 用户定义的运行时属性 中吗 创建一个子类UITextField如下所示 只需在故事板中将此
  • 克隆存储库后,Azure DevOps 强制 core.hooksPath

    我尝试实施客户端 git hooks到 azure devops git 存储库 我添加了一个 githooks目录到根目录并实施pre commit钩 我提交所有内容并将其推送到存储库 但当然 只有当我执行时 钩子才会激活 git con
  • 使用 Node.js 和 mongo 设置单例连接

    以前我使用 mongodb 和 php 来查询我使用单例的数据库 这样我只实例化连接一次 然后重复使用它 class MDB protected static instance public static function use if s
  • 如何在 Cucumber-JVM 中明确匹配这些步骤?

    有什么方法可以明确匹配以下步骤吗 And I should have 2 alerts And I should have 2 alerts with param 71 我将它们实现为 And I should have d alerts
  • 使用 file.show 在 R studio 中打开 PDF

    我正在制作一个在 Swirl 中在 R 中运行的 R 教程 我正在尝试在 R 中打开特定的 PDF 文件 我在用 file show paste getwd cv pdf sep title some title 但显示是这样的 它不显示
  • Growl 通知:如何从网站推送 Growl 通知?

    我想知道如何将桌面 Growl 通知从我的 Web 应用程序推送给我的 Web 应用程序的用户 如果可能的话 我想使用 javascript 否则像 Ruby 或 PHP 这样的语言将是我的第二选择 您以前实施过类似的事情吗 如何做呢 我弄
  • 从列表中删除 nan - Python

    我试图从列表中删除 nan 但它拒绝删除 我尝试过 np nan 和 nan 这是我的代码 ztt for i in z if i nan ztt append i ztt or ztt for i in z if i np nan ztt
  • Feedparser 到数据框不输出所有列

    我从 feedparser 解析 URL 并尝试获取所有列 但我没有将所有列作为输出 不确定问题出在哪里 如果执行下面的命令 我没有获得几列的数据 但数据确实存在 您可以在浏览器中查看 my code import feedparser i
  • 左连接查询的 LINQ Fluent API 版本

    我目前有一个运行良好的 LINQ 查询 但我想知道如何将其转换为 LINQ Fluent API 格式 我尝试在 Google 上搜索有关 Fluent API 的不错的教程 尝试自己学习 但似乎没有 这是我要转换的查询 from s in
  • Jersey 2 多部分表单数据注入源

    我有一个方法 POST Consumes multipart form data Produces text xml public Response processForm FormDataParam myparam InputStream