当前位置: 首页 > 知识库问答 >
问题:

多部分formdata的Jersey 2注入源

齐兴运
2023-03-14

我有一个方法:

@POST
@Consumes("multipart/form-data")
@Produces( {"text/xml"})
public Response processForm(
    @FormDataParam("myparam") InputStream is,
    @FormDataParam("myparam") FormDataContentDisposition detail)
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/projects/jersey/lists/commits/archive/2012-09/message/126,这似乎是相关的,但对于我来说,如何修复该问题并不明显。

已更新

我做了一个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:

共有1个答案

万俟均
2023-03-14

您需要在应用程序上启用多部分功能。启用此功能将为Jersey 2应用程序注入必要的消息正文阅读器和编写器。以下是您注册它们的方法:

final ResourceConfig resourceConfig = new ResourceConfig(MultiPartResource.class);
resourceConfig.register(MultiPartFeature.class);
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;
    }
}
<?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多部分示例。

 类似资料:
  • 我使用dropwizard实现我的服务器,为了上传我的文件,我使用多部分formdata使用这个答案。 但是当我使用带有utf-8字符集的文件时,我从表单数据内容对象中的文件名崩溃了。 代码:

  • 尝试将多部分功能用于我的泽西岛 3 Web 应用程序。不幸的是,似乎没有找到注射源... pom.xml web.xml endpoint 我一直在看其他帖子,在我看来,我有正确的依赖项,我还在我的web.xml.中注册了Multipart-Feature,我错过了什么? 感谢您的任何意见!

  • 问题内容: 我有一个方法: 在Jersey 1.x上运行正常。 我要升级到2.0平方米。 现在我得到以下错误: 我找到了 http://java.net/jira/browse/JERSEY-1413并提交了http://java.net/projects/jersey/lists/commits/archive/2012-09/message/126,这似乎很相关,但其对我而言不明显该如何解决该

  • 这个例子取自一本关于依赖注入的书。 在第87页,有这个例子。 我理解代码的用途,但我不理解的是如何声明或配置我的,以便我可以创建这个类的实例。 似乎注入了< code > deliver factory 。这个例子没有说是如何实现的,但是让我们承认它是通过构造函数注入实现的。在这种情况下,如何传递<代码>列表 我不明白的是,如何在构造函数的签名中同时自动注入对象和实例特定对象。在这种情况下,我不知

  • 当我尝试将我的maven项目部署到Glassfish 5时,我得到以下错误: [[FATAL]在索引0处找不到类型为public javax.ws.rs.core.response com.test.resources.AccountResource.AddProfilePicture(java.io.inputStream,org.glassfish.jersey.media.multipart

  • 当我使用JavaMailSender发送带有附件的电子邮件时,它总是失败,并引发以下异常: 这是我的密码