我已经设置了一个REST Web服务和一个客户端。 Webservice部署在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 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();
}
}
问候
诺亚
答案 0 :(得分: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>