Я пытаюсь создать 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
}
Мне удалось решить проблему самостоятельно: я удалил эти аннотации для 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>
И проблема просто исчезает... Вы можете загружать файлы без каких-либо проблем. Надеюсь, это поможет любому, кто имеет ту же самую глупую проблему. Если кто-то узнает причину этого отказа, сообщите мне.