繁体   English   中英

创建GrizzlyHttpServer时为null MultiPartConfig

[英]Null MultiPartConfig when creating GrizzlyHttpServer

我正在尝试从一种主要方法创建一个Grizzly HTTP Server,并且得到了这个IllegalArgumentException:

java.lang.IllegalArgumentException: The MultiPartConfig instance we expected is not    present.  Have you registered the MultiPartConfigProvider class?

我尝试手动注册MultiPartConfigProvider的新实例和类本身(请参见注释行)。 我可能会缺少什么?

这是代码:

public class ResourceServer
{

public static final String HOST = "localhost";
public static final int PORT = 8080;
public static final String ROOT = "dummy";

public static final URI BASE_URI = ResourceUriBuilder.getBaseURI(HOST, PORT, ROOT);
private static final String BASE_PACKAGE_NAME = "com.mycompany.myapp.resource";

public static HttpServer startServer()
{
    final ResourceConfig rc = new ResourceConfig().packages(true, BASE_PACKAGE_NAME);

//        rc.register(new MultiPartConfig());
//
//        MultiPartConfigProvider provider = new MultiPartConfigProvider();
//        rc.register(provider);

//        rc.register(MultiPartConfig.class);


    return GrizzlyHttpServerFactory.createHttpServer(BASE_URI,rc);
}

public static void main(String[] args) throws IOException
{
    final HttpServer server = startServer();
    // ...
}
}

这是堆栈跟踪:

 java.lang.IllegalArgumentException: The MultiPartConfig instance we expected is not present.
 Have you registered the MultiPartConfigProvider class?
at com.sun.jersey.multipart.impl.MultiPartReaderClientSide.<init>(MultiPartReaderClientSide.java:102)
com.mycompany.myapp.resource.server.ResourceServer.startServer(ResourceServer.java:37)
at com.mycompany.myapp.resource.server.ResourceServer.main(ResourceServer.java:47)

这些是POM文件中的相关依赖项:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.glassfish.jersey</groupId>
            <artifactId>jersey-bom</artifactId>
            <version>${jersey.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>16.0.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.2.6</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-grizzly2-http</artifactId>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-moxy</artifactId>
    </dependency>
    <dependency>
        <groupId>com.sun.jersey.contribs</groupId>
        <artifactId>jersey-multipart</artifactId>
        <version>1.8</version>
    </dependency>
    <dependency>
        <groupId>com.google.gwt</groupId>
        <artifactId>gwt-servlet</artifactId>
        <version>2.5.0</version>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>com.google.gwt</groupId>
        <artifactId>gwt-user</artifactId>
        <version>2.5.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>commons-beanutils</groupId>
        <artifactId>commons-beanutils</artifactId>
        <version>1.9.1</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.9</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>javax.mail</groupId>
        <artifactId>mail</artifactId>
        <version>1.4.5</version>
    </dependency>

</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.5.1</version>
            <inherited>true</inherited>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
        </plugin>
    </plugins>
</build>

<properties>
    <jersey.version>2.7</jersey.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

编辑:这是我试图使用MultiPart支持上载文件的文件资源。 此资源导致错误:

@Path("/file")
public class FileResource
{
    @POST
    @Path("/upload")
    @Consumes(MediaType.MULTIPART_FORM_DATA)
    public Response uploadFile(
            @FormDataParam("file") InputStream uploadedInputStream,
            @FormDataParam("file") FormDataContentDisposition fileDetail) {
    // Empty method here
}

我设法自己解决了这个问题:我删除了FileResource的这些注释:

@FormDataParam("file") InputStream uploadedInputStream,
@FormDataParam("file") FormDataContentDisposition fileDetail)

这个库来自pom.xml文件:

<dependency>
     <groupId>com.sun.jersey.contribs</groupId>
     <artifactId>jersey-multipart</artifactId>
     <version>1.8</version>
</dependency>

问题就消失了……您可以上传文件而没有任何问题。 希望它对遇到同样愚蠢问题的人有所帮助。 如果有人碰巧知道此失败的原因,请告诉我。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM