Java 仅当执行jar文件时,REST客户端中的ClientHandlerException
我已经建立了一个REST Web服务和一个客户端。Web服务部署在Glassfish服务器上。如果我用netbeans运行客户机的主类,那么一切都正常。现在,我使用Maven创建一个可执行的jar文件,如果我尝试运行这个jar文件,我会得到以下异常消息:Java 仅当执行jar文件时,REST客户端中的ClientHandlerException,java,rest,maven,jar,Java,Rest,Maven,Jar,我已经建立了一个REST Web服务和一个客户端。Web服务部署在Glassfish服务器上。如果我用netbeans运行客户机的主类,那么一切都正常。现在,我使用Maven创建一个可执行的jar文件,如果我尝试运行这个jar文件,我会得到以下异常消息: 21.07.2013 13:40:05 com.sun.jersey.api.client.ClientResponse getEntity SCHWERWIEGEND: A message body reader for Java class
21.07.2013 13:40:05 com.sun.jersey.api.client.ClientResponse getEntity
SCHWERWIEGEND: A message body reader for Java class java.lang.String, and Java type class java.lang.String, and MIME media type application/xml was not found
21.07.2013 13:40:05 com.sun.jersey.api.client.ClientResponse getEntity
SCHWERWIEGEND: The registered message body readers compatible with the MIME media type are:
*/* ->
com.sun.jersey.atom.rome.impl.provider.entity.AtomFeedProvider
com.sun.jersey.atom.rome.impl.provider.entity.AtomEntryProvider
Exception in thread "main" com.sun.jersey.api.client.ClientHandlerException: A message body reader for Java class java.lang.String, and Java type class java.lang.String, and MIME media type application/xml was not found
at com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:561)
at com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:517)
at com.sun.jersey.api.client.WebResource.handle(WebResource.java:684)
at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74)
at com.sun.jersey.api.client.WebResource$Builder.get(WebResource.java:507)
at de.movienexuscmd.MovieNexusWebserviceClient.getXml(MovieNexusWebserviceClient.java:52)
at de.movienexuscmd.App.run(App.java:20)
at de.movienexuscmd.App.main(App.java:16)
现在我真的不知道为什么只有在尝试执行jar文件时才会出现这个异常。希望有人能帮忙
我的Web服务看起来像:
@Path("MovieNexus")
public class MovieNexusWebService {
@Context
private UriInfo context;
private MovieNexusFrontController frontController = null;
/**
* Creates a new instance of MovieNexusWebService
*/
public MovieNexusWebService() {
frontController = new MovieNexusFrontController();
}
/**
* Retrieves representation of an instance of
* de.webservice.MovieNexusWebService
*
* @return an instance of java.lang.String
*/
@GET
@Produces("application/xml")
public String getXml() {
return frontController.getRandomMovie().getMovieName();
}
/**
* PUT method for updating or creating an instance of MovieNexusWebService
*
* @param content representation for the resource
* @return an HTTP response with content of the updated or created resource.
*/
@PUT
@Consumes("application/xml")
public void putXml(String content) {
}
}
客户:
public class MovieNexusWebserviceClient {
private WebResource webResource;
private Client client;
private static final String BASE_URI = "http://localhost:17589/MovieNexusWebservice/webresources";
public MovieNexusWebserviceClient() {
com.sun.jersey.api.client.config.ClientConfig config = new com.sun.jersey.api.client.config.DefaultClientConfig();
client = Client.create(config);
webResource = client.resource(BASE_URI).path("MovieNexus");
}
public String getXml() throws UniformInterfaceException {
WebResource resource = webResource;
return resource.accept(javax.ws.rs.core.MediaType.APPLICATION_XML).get(String.class);
}
public void putXml(Object requestEntity) throws UniformInterfaceException {
webResource.type(javax.ws.rs.core.MediaType.APPLICATION_XML).put(requestEntity);
}
public void close() {
client.destroy();
}
}
问候
诺亚经过几个小时的思考和尝试,我自己解决了这个问题。问题是maven创建了可执行jar。它缺少一些依赖项,因此我更改了插件配置:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.3.1</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>mainclass</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
org.apache.maven.plugins
maven依赖插件
复制依赖项
准备包装
复制依赖项
${project.build.directory}/lib
假的
假的
真的
org.apache.maven.plugins
maven jar插件
2.3.1
真的
解放党/
主类
经过几个小时的思考和尝试,我自己解决了这个问题。问题是maven创建了可执行jar。它缺少一些依赖项,因此我更改了插件配置:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.3.1</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>mainclass</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
org.apache.maven.plugins
maven依赖插件
复制依赖项
准备包装
复制依赖项
${project.build.directory}/lib
假的
假的
真的
org.apache.maven.plugins
maven jar插件
2.3.1
真的
解放党/
主类
如果这样创建可执行文件,则所有库都将被放置在lib目录中。如果要运行jar文件,lib目录必须位于同一目录中。我不确定这是否是一个好的解决方案,肯定有可能以更有效的方式解决这个问题。请随意发布一个:)如果您创建这样的可执行文件,那么所有库都将被放置在lib目录中。如果要运行jar文件,lib目录必须位于同一目录中。我不确定这是否是一个好的解决方案,肯定有可能以更有效的方式解决这个问题。请随意发布一条:)