我是一名Java REST服务的新手,对于整个Java客户端服务器的概念也不是很了解。我正在尝试实现基本的客户端服务器设计。
从客户端方面来看,我正在尝试POST一个特定类(POJO)对象的
从客户端方面来看,我正在尝试POST一个特定类(POJO)对象的
ArrayList
。以下是我的客户端代码:public class TestClient1 {
private static final String webServiceURI = "http://localhost:8080/IadssitHPCServer";
private static URI serviceURI;
private static WebTarget webTarget;
private static ArrayList<ImageInput> imageList;
public static void main(String[] args) {
ClientConfig clientConfig = new ClientConfig();
Client client = ClientBuilder.newClient(clientConfig);
serviceURI = UriBuilder.fromUri(webServiceURI).build();
webTarget = client.target(serviceURI);
webTarget = webTarget.path("clientserver").path("restservice").path("analyze");
imageList = new ArrayList<ImageInput>();
/*
Code to add objects in the Arraylist
*/
Session session= webTarget.request().accept(MediaType.APPLICATION_XML).
post(Entity.entity(imageList, MediaType.APPLICATION_XML), Session .class);
}
}
ImageInput
(POJO)类:
@XmlRootElement
public class ImageInput implements Serializable {
private String imageName;
private String imageDirPath;
public String getImageName() {
return imageName;
}
public void setImageName(String imageName) {
this.imageName = imageName;
}
public String getImageDirPath() {
return imageDirPath;
}
public void setImageDirPath(String imageDirPath) {
this.imageDirPath = imageDirPath;
}
}
在服务器端:
@Path( "/hpcservice" )
@Consumes( MediaType.APPLICATION_XML )
@Produces( MediaType.APPLICATION_XML )
public class HpcService {
@POST
@Path( "/analyze" )
public Session startAnalysing(ArrayList<ImageInput> clientInput){
System.out.println( "Started Analyzing..." );
return session;
}
}
服务器返回一个类的对象Session
,这又是一个POJO类。
当我执行代码时,在客户端会出现以下错误:
Oct 19, 2015 3:01:10 PM org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor aroundWriteTo
SEVERE: MessageBodyWriter not found for media type=application/xml, type=class java.util.ArrayList, genericType=class java.util.ArrayList.
org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyWriter not found for media type=application/xml, type=class java.util.ArrayList, genericType=class java.util.ArrayList.
at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.aroundWriteTo(WriterInterceptorExecutor.java:247)
at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162)
at org.glassfish.jersey.message.internal.MessageBodyFactory.writeTo(MessageBodyFactory.java:1154)
at org.glassfish.jersey.client.ClientRequest.writeEntity(ClientRequest.java:503)
at org.glassfish.jersey.client.HttpUrlConnector._apply(HttpUrlConnector.java:315)
at org.glassfish.jersey.client.HttpUrlConnector.apply(HttpUrlConnector.java:227)
at org.glassfish.jersey.client.ClientRuntime.invoke(ClientRuntime.java:246)
at org.glassfish.jersey.client.JerseyInvocation$2.call(JerseyInvocation.java:683)
at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
at org.glassfish.jersey.internal.Errors.process(Errors.java:228)
at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:424)
at org.glassfish.jersey.client.JerseyInvocation.invoke(JerseyInvocation.java:679)
at org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:435)
at org.glassfish.jersey.client.JerseyInvocation$Builder.post(JerseyInvocation.java:338)
at com.TestClient1.main(TestClient1.java:61)
我觉得可能是我发送和接收请求的类型有问题。这个MediaType.APPLICATION_..
如何影响/变化与我发送的不同数据结构有关?
我知道我在这里问了一个非常基础的问题,但是无论我在Stack Overflow上找到什么在线解决方案,我都越来越困惑。