Null MultiPartConfig при создании GrizzlyHttpServer

1

Я пытаюсь создать HTTP-сервер Grizzly из основного метода, и я получаю это исключение 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();
    // ...
}
}

Это stacktrace:

 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>

EDIT: это файловый ресурс, в котором я пытаюсь использовать поддержку 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
}
Теги:
maven
rest
grizzly

1 ответ

0
Лучший ответ

Мне удалось решить проблему самостоятельно: я удалил эти аннотации для 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>

И проблема просто исчезает... Вы можете загружать файлы без каких-либо проблем. Надеюсь, это поможет любому, кто имеет ту же самую глупую проблему. Если кто-то узнает причину этого отказа, сообщите мне.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню