1

生成されたREST Webサービスから戻り値を取得しようと2時間試みましたが、Netbeansは何を試してもエラーをスローします。netbeans から生成されたコードは次のとおりです。

@GET
@Override
@Produces({"application/xml", "application/json"})
public List<Person> findAll() {
    return super.findAll();
}

クライアントを作成すると、この生成されたコードが得られます

public <T> T findAll_XML(Class<T> responseType) throws UniformInterfaceException {
     WebResource resource = webResource;
     return  resource.accept(javax.ws.rs.core.MediaType.APPLICATION_XML).get(responseType);
}

私はこれを呼び出す方法をいくつか試しましたが、多くのサーフィンを行った後、これでうまくいくはずですが、そうではありません。

public static void main(String[] args) {
    PersonRESTClient prc = new PersonRESTClient();
    Person person = prc.find_XML(Person.class, "100");
    System.out.println(person.getFirstname() + " " + person.getSecondname()); //THIS WORKS!!
   GenericType<List<Person>> gType = new GenericType<List<Person>>(){};
   List<Person> persons = (List<Person>) prc.findAll_XML(gType.getClass());
   for (Person p : persons) {
       System.out.println(person.getFirstname() + " " + person.getSecondname());
   }

}

私が得るエラーは

2013 年 3 月 7 日 2:23:31 PM com.sun.jersey.api.client.ClientResponse getEntity SEVERE: Java クラス restexample2client.RestExample2Client$1、Java タイプ クラス restexample2client.RestExample2Client$1、および MIME メディア タイプ アプリケーションのメッセージ本文リーダー/xml が見つかりませんでした 2013 年 3 月 7 日 2:23:31 PM com.sun.jersey.api.client.ClientResponse getEntity 重大: MIME メディア タイプと互換性のある登録済みメッセージ本文リーダーは、application/xml ->
com.sun です。 .jersey.core.impl.provider.entity.XMLJAXBElementProvider$App
com.sun.jersey.core.impl.provider.entity.DocumentProvider
com.sun.jersey.core.impl.provider.entity.SourceProvider$StreamSourceReader com.sun.jersey.core.impl.provider.entity.SourceProvider$SAXSourceReader com.sun.jersey.core.impl.provider.entity.SourceProvider$ DOMSourceReader com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$App
com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$App
com.sun.jersey.core.impl.provider.entity.XMLRootObjectProvider $App / -> com.sun.jersey.core.impl.provider.entity.FormProvider com.sun.jersey.core.impl.provider.entity.StringProvider
com.sun.jersey.core.impl.provider.entity.ByteArrayProvider
com.sun.jersey.core.impl.provider.entity.FileProvider
com.sun.jersey.core.impl.provider.entity.InputStreamProvider
com.sun.jersey.core.impl.provider.entity.DataSourceProvider
com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$General com.sun.jersey.core.impl.provider.entity.ReaderProvider
com.sun .jersey.core.impl.provider.entity.DocumentProvider
com.sun.jersey.core.impl.provider.entity.SourceProvider$StreamSourceReader com.sun.jersey.core.impl.provider.entity.SourceProvider$SAXSourceReader com.sun. jersey.core.impl.provider.entity.SourceProvider$DOMSourceReader com.sun.jersey.json.impl.provider.entity.JSONJAXBElementProvider$General com.sun.jersey.json.impl.provider.entity.JSONArrayProvider$General
com.sun .jersey.json.impl.provider.entity.JSONObjectProvider$General
com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$General com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$General com.sun.jersey.core.impl.provider.entity.XMLRootObjectProvider$一般 com.sun.jersey.core.impl.provider.entity.EntityHolderReader
com.sun.jersey.json.impl.provider.entity.JSONRootElementProvider$General com.sun.jersey.json.impl.provider.entity.JSONListElementProvider$General com.sun.jersey.json.impl.provider.entity.JacksonProviderProxy

スレッド「メイン」の例外 com.sun.jersey.api.client.ClientHandlerException: Java クラス restexample2client.RestExample2Client$1 および Java タイプ クラス restexample2client.RestExample2Client$1 のメッセージ本文リーダー、および MIME メディア タイプ application/xml が見つかりませんでしたcom.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:561) com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:517) 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 com.carnabygaming.rest.service.client.EnterpriseRESTClient.findAll_XML(EnterpriseRESTClient.java:47) at restexample2client.RestExample2Client.メイン (RestExample2Client.java:32)

誰が私が間違っているのか考えていますか? 単一オブジェクトで生成されたコードは問題なく動作します。テストを実行すると、メソッドが Web ページに表示されないことに気付きました。まだ助けが必要です。

4

1 に答える 1

6

そうです、スーパータイプ トークン ( ) を受け入れるクライアント メソッドのオーバーロードされたバリアントを提供する必要がありますGenericType。現在、2 番目のクライアント呼び出しは文字通り、応答データを class として逆シリアル化しようとしてGenericType<List<Person>>いますが、これは望んでいるものではありません。したがって、最初に、スーパータイプ トークンを受け入れるオーバーロードされたメソッドをクライアントで定義します。

public <T> T findAll_XML(GenericType<T> superType) throws UniformInterfaceException {
     WebResource resource = webResource;
     return  resource.accept(javax.ws.rs.core.MediaType.APPLICATION_XML).get(superType);
}

クライアントで次のように使用します。

GenericType<List<Person>> gType = new GenericType<List<Person>>() {};
List<Person> persons = (List<Person>) prc.findAll_XML(gType);
for (Person p : persons) {
    System.out.println(person.getFirstname() + " "
            + person.getSecondname());
}
于 2013-03-07T15:53:12.767 に答える