2011-05-19 7 views
3

私のWebサービスを実装するためにJerseyを使用しています。 Jersey Client APIに基づいてこれらのサービスを使用するJavaクライアントを作成しています。文字列、地図、ビジネスオブジェクトのリストを返すWebサービスを呼び出すと、すべてOKになり、クライアント側で期待される応答が得られます。しかし、文字列やintを返すWebサービスを呼び出すと、JavaIOException:premature EOFが発生します。 この問題についてご意見はありますか?Jersey Client API - サービスを利用する際のJavaIOException早期EOFの取得

私はこのように私のクライアントをインスタンス化しています:

String serviceUrl = "http://localhost:9998"; 
ClientConfig config = new DefaultClientConfig(); 
config.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE); 
Client client = Client.create(config); 
resource = client.resource(serviceUrl + "/infos"); 
resource.accept(MediaType.APPLICATION_JSON_TYPE); 

方法私は文字列を返す必要が呼んでいる:ここで

public String getInfo() { 
    return resource.get(String.class); 
} 

はエラースタックトレースです:

com.sun.jersey.api.client.ClientHandlerException: java.io.IOException: Premature EOF 
    at com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:563) 
    at com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:506) 
    at com.sun.jersey.api.client.WebResource.handle(WebResource.java:674) 
    at com.sun.jersey.api.client.WebResource.get(WebResource.java:191) 
    at org.novapost.proto.client.InfoResourceClient.getInfo(InfoResourceClient.java:37) 
    at org.novapost.proto.client.TestInfoResourceClient.testGETInfo(TestInfoResourceClient.java:48) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.junit.internal.runners.TestMethodRunner.executeMethodBody(TestMethodRunner.java:99) 
    at org.junit.internal.runners.TestMethodRunner.runUnprotected(TestMethodRunner.java:81) 
    at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34) 
    at org.junit.internal.runners.TestMethodRunner.runMethod(TestMethodRunner.java:75) 
    at org.junit.internal.runners.TestMethodRunner.run(TestMethodRunner.java:45) 
    at org.junit.internal.runners.TestClassMethodsRunner.invokeTestMethod(TestClassMethodsRunner.java:75) 
    at org.junit.internal.runners.TestClassMethodsRunner.run(TestClassMethodsRunner.java:36) 
    at org.junit.internal.runners.TestClassRunner$1.runUnprotected(TestClassRunner.java:42) 
    at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34) 
    at org.junit.internal.runners.TestClassRunner.run(TestClassRunner.java:52) 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49) 
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 
Caused by: java.io.IOException: Premature EOF 
    at sun.net.www.http.ChunkedInputStream.readAheadBlocking(ChunkedInputStream.java:538) 
    at sun.net.www.http.ChunkedInputStream.readAhead(ChunkedInputStream.java:582) 
    at sun.net.www.http.ChunkedInputStream.read(ChunkedInputStream.java:669) 
    at java.io.FilterInputStream.read(FilterInputStream.java:116) 
    at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:2391) 
    at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264) 
    at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306) 
    at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158) 
    at java.io.InputStreamReader.read(InputStreamReader.java:167) 
    at java.io.Reader.read(Reader.java:123) 
    at com.sun.jersey.core.util.ReaderWriter.readFromAsString(ReaderWriter.java:171) 
    at com.sun.jersey.core.util.ReaderWriter.readFromAsString(ReaderWriter.java:157) 
    at com.sun.jersey.core.provider.AbstractMessageReaderWriterProvider.readFromAsString(AbstractMessageReaderWriterProvider.java:114) 
    at com.sun.jersey.core.impl.provider.entity.StringProvider.readFrom(StringProvider.java:73) 
    at com.sun.jersey.core.impl.provider.entity.StringProvider.readFrom(StringProvider.java:58) 
    at com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:553) ... 25 more 

答えて

0

]と複数回呼び出すこともできます。これは、クローズドストリームと呼ばれることを意味し、 Closeableリーダーは最初の呼び出しから閉じられます。したがって、response.getEntityを呼び出し、エンティティを使用してリソース値を取得してください。

関連する問題