2016-12-04 11 views
0

CXFの最新バージョンやその他の依存関係を使用して、JSONを生成して消費する単体テストのWebサービスを試しています。メソッドの引数がStringの場合は動作しますが、引数がカスタムオブジェクトの場合は失敗します。以下は、サンプル・リソースである:JAX-RS(CXF)でJSONをオブジェクトにアンマーシャリングできない

@POST 
@Produces(MediaType.APPLICATION_JSON) 
@Consumes(MediaType.APPLICATION_JSON) 
@Path("testPost") 
public Employee getPostTest(Employee data) { 
    return data; 
} 

次のテストケースの抜粋であり、上記のコードの

List<Object> providers = new ArrayList<Object>(); 
    providers.add(new JacksonJaxbJsonProvider()); 
    WebClient client = WebClient.create(ENDPOINT_ADDRESS, providers); 
    client.accept("application/json"); 
    client.type("application/json"); 
    client.path("users/testPost/"); 
    Employee e = new Employee(); 
    e.setName("Test"); 
    Response r = client.post(e); 

最後の行は、次の例外をスロー:

2016年12月5日2 :46:50 AM org.apache.cxf.jaxrs.utils.JAXRSUtils logMessageHandlerProblem 重大度:com.finity.model.Employee、ContentTypeのメッセージボディリーダーが見つかりませんでした:application/jsonorg.apache.cxf.jaxrs.impl.WebApplicationExceptionMapper toResponse 警告:javax.ws.rs.WebApplicationException:HTTP 415サポートされていないメディアタイプ at org.apache.cxf.jaxrs.utils .JAXRSUtils.readFromMessageBody(JAXRSUtils.java:1315) at org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameter(JAXRSUtils.java:826) at org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameters(JAXRSUtils .javaファイル:789)

はJSONParserが、ノー行くを使用して読み取りを試しました:

Employee e = new Employee(); 
    e.setName("Test"); 
    Response r = client.post(e); 

    MappingJsonFactory factory = new MappingJsonFactory(); 
    JsonParser parser = factory.createJsonParser((InputStream)r.getEntity()); 

答えて

0

あなたがする必要がありますJSONプロバイダを設定します。たとえばジャクソン

<jaxrs:providers> 
    <bean class="org.codehaus.jackson.jaxrs.JacksonJsonProvider"/> 
    </jaxrs:providers> 

またはJacksonJaxbJsonProvider(JAXB豆での作業)

は、あなたがそれを持っていない場合、Mavenの依存関係を追加することも必要とされています。 org.codehaus.jackson ジャクソンjaxrs 1.9.0

参照CXF JSON support

+0

はい、それはすでに追加されているが、まだその例外が来ています。 providers.add(新しいJacksonJaxbJsonProvider());とproviders.add(新しいJacksonJsonProvider());両方のプロバイダを試しました。 –

+0

Jaxbを使用していますか? 'Employee'のコードを投稿して、どのタグを使用しているのかを確認してください.jax-rsサーバを起動しているコード – pedrofb

+0

従業員モデルは、名前フィールドのみを持ち、クラスに注釈がないPOJOクラスです。私はEmployeeクラスでJsonAutoDetectとJsonSerializeアノテーションを試しましたが、それは助けにはなりませんでした。 –

関連する問題