9

JacksonJsonProvider が CXF で機能していません。

CXF v2.6.0 Jackson v2.1.2 (com.fasterxml.jackson) RESTClient (テスト用)

私はbeans.xmlで以下のようにプロバイダーを構成しています。

<bean id="jacksonMapper" class="com.fasterxml.jackson.databind.ObjectMapper">
    <property name="dateFormat">
    <bean class="java.text.SimpleDateFormat">
    <constructor-arg type="java.lang.String" value="yyyy-MM-dd'T'HH:mm:ss.SSSZ">     </constructor-arg>
    </bean>
   </property>
</bean>

<bean id="jacksonProvider" class="com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider">
    <property name="mapper" ref="jacksonMapper" />
</bean>

jaxrs:server で.....>

<jaxrs:providers>
<ref bean="jaxbProvider" />
<ref bean="jacksonProvider" />                        
</jaxrs:providers>

</jaxrs:server>

アプリケーションは問題なくデプロイされ、リクエストを「application/xml」として、レスポンスを「application/json」として提供している間、適切な JSON が提供されます。

Content-Type=application/json を設定してリクエストで JSON を提供しようとすると、500 Internal Server Error に直面しています

要求は、CXF ロギングを介してログ ファイルに記録されます。

リクエストは、Web サービスのサービス実装クラスにまったく到達しません。

リクエスト本文の JSON は次のとおりです。

{"SearchOrdersRequest":{"LoginCredentials":{"AppId":"BookStore","Username":"myuser","Password":"abcd1234","SecurityToken":"Vcvx45YilzX1"},"SearchHeader":{"SearchCategory":"Rep","FilterLogic":"1 AND 2","SearchParams":{"Field":"Order Number (s)","Operator":"EQUALS","Values":"600045335"}}}} 

すぐに助けていただければ幸いです。

4

6 に答える 6

3

CXF ドキュメントでは、json プロバイダーを追加して依存関係を含める必要がある場所を確認できます。しかし、jettison の代わりに jackson を追加しようとすると、まだエラーが発生します。数時間後、jackson の依存関係をもう 1 つ含める必要があると判断しました。

  1. JSON プロバイダーを追加する

    <jaxrs:providers>
        <bean class="org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider" />
    </jaxrs:providers>
    
  2. 依存関係を追加する

    <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-xc</artifactId>
        <version>1.9.12</version>
    </dependency>
    <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-jaxrs</artifactId>
        <version>1.9.12</version>
    </dependency>
    
于 2013-05-08T20:06:46.490 に答える
0

jettison をオーバーライドして jackson ライブラリを使用するには、次のように jacksonprovider を構成する必要があります。

<bean id="jacksonJsonProvider" class="com.student.CustomJsonProvider"/>

<jaxrs:providers> 
  <ref bean="jacksonJsonProvider" /> 
</jaxrs:providers>
于 2013-03-17T19:14:42.077 に答える
0

通常、その依存関係を追加するだけで EE サーバーにデプロイする場合、プロバイダーを自動的に検出して使用する必要がありました (TomEE 7 の幅をテストしました)。

<dependency>
    <groupId>com.fasterxml.jackson.jaxrs</groupId>
    <artifactId>jackson-jaxrs-json-provider</artifactId>
    <version>2.8.6 </version>
</dependency>

ただし、正しいバージョンを使用するように注意してください。CFX ガイドは、Jackson 1 とのみ互換性があり、Jackson 2 とは互換性がない Jackson JAX-RS プロバイダーを提案しています。詳細については、その質問を参照してください。

于 2017-03-21T20:35:44.697 に答える
0

少し前に、クラスパスにライブラリを放棄していないときにjsonリクエストに問題がありました。http://www.javatips.net/blog/2012/02/cxf-restful-tutorialチュートリアルを確認してください。

于 2013-01-18T21:12:32.597 に答える