5

シンプルな安らかなアプリケーションを作成するために Apache CXF を使用しています。JSONオブジェクトをサーバーに投稿するクライアントクラスがあり、サーバーは何らかの操作後にJSONを返します。しかし、コードを実行すると取得します

"org.apache.cxf.interceptor.Fault: .No message body writer has been found for class:           
 class org.codehaus.jettison.json.JSONObject, ContentType : application/json."

私のクライアントコード:

public class Client {
public static void main(String[] args) {

    try{

        URI uri =  new URI("http://localhost:8022/RestDemo");

        WebClient client = WebClient.create(uri);

        String ret = client.path("rest").path("server").path("welcome").accept(MediaType.TEXT_PLAIN).get(String.class);

        System.out.println(ret);

        JSONObject json = new JSONObject();
    json.put("name", "ronaldo");
    json = client.path("rest").path("server").path("op").type(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON).post(json, JSONObject.class);
    System.out.println(json);
    System.out.println(json.has("reverse")?json.getString("reverse"):"dont have");


    }catch(Exception e){
        System.out.println("e"+e.getLocalizedMessage());
        e.printStackTrace();
    }
}
}

助けてください。

4

6 に答える 6

5

これはずっと前に見つけたもので、将来のユーザーのために投稿しただけです。実際、apache cxf(2.5.2) は org.codehaus.jettison.JSONObject のような生の JSON オブジェクトをサポートしていません。リクエストとレスポンスで JSON を使用するために、pojos (単純に JAXB アノテーションを使用したゲッターとセッター) と apache cxf json プロバイダー、つまり org.apache.cxf.jaxrs.provider.JSONProvider を使用しました。以下は私の構成です:

<jaxrs:providers>
    <bean class="org.apache.cxf.jaxrs.provider.JSONProvider">
        <property name="dropRootElement" value="true" />
        <property name="supportUnwrapped" value="true" />
    </bean>
</jaxrs:providers>
于 2012-04-24T07:36:18.467 に答える
0

別のアプローチ: "Accept" 要求ヘッダーを "application/json" から " / " に変更すると、"メッセージ本文ライターが見つかりません" というエラー メッセージが表示されなくなったことがわかりました。

于 2014-01-16T17:42:18.770 に答える
0

私の場合、この問題は Jackson 2.x に変換した結果発生しました。JaxRS で CXF を使用したいと考えています。

MikeLand と Sikorski からの上記の提案は私にとってはうまくいきました。

移行ガイドでは、実際にこれについて説明しています

CXF 移行ガイド

「依存関係の変更」まで下にスクロールします。

Maven pom.xml ファイルに必要な依存関係を追加しているだけです。

    <!--  for JSON provider -->
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-rs-extension-providers</artifactId>
        <version>${cxf.version}</version>
    </dependency>
    <!--  for extension providers -->
    <dependency>
        <groupId>org.codehaus.jettison</groupId>
        <artifactId>jettison</artifactId>
        <version>1.2</version>
    </dependency>   

これは、解決に必要以上に時間がかかった取引の 1 つです。うまくいけば、これは誰かを助けるでしょう。

于 2015-05-28T20:49:20.237 に答える