2012-04-02 19 views
2

Apache CXFを使用して、RESTful APIとの通信を提供します。Apache CXF - HTTP中心のアプローチとクライアントからサーバーへのPUT

APIを使用して制約付きエンティティをデータベースに送信するには、PUTメソッドを使用する必要があります。

これはこの方法を提供する正しい方法ですか?

私はHTTP 500エラーコード応答を取得しているので質問します。

GETメソッドの例は、公式のApache CXFドキュメントでのみ見つけることができます。 HTTP PUT、HTTP POSTなどがありません。

WebClient client = 
     WebClient.create("http://MY_SERVER:9090/admission/services/processing"); 
Admission a = new Admission(); 
a.setCode("73935282"); 
: 
: 

Response r = client.path("/admission").put(a); 
// Here I would like to get 201, but there is 500 :(
System.out.println("response: " + r.getStatus()); 

答えて

2

JSONのようなXML以外のコンテンツタイプをサービスが期待していますか? WebClientのデフォルトの動作は、content-typeapplication/xmlであると仮定します。ここで

は、関連するsource code for WebClient.javaです:

protected Response doInvoke(String httpMethod, Object body, Class<?> responseClass, Type genericType) { 

    MultivaluedMap<String, String> headers = getHeaders(); 
    if (body != null) { 
     if (headers.getFirst(HttpHeaders.CONTENT_TYPE) == null) { 
      headers.putSingle(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_XML_TYPE.toString()); 
     } 
    } else { 
     headers.putSingle(HttpHeaders.CONTENT_TYPE, MediaType.WILDCARD); 
    } 
    if (responseClass != null && headers.getFirst(HttpHeaders.ACCEPT) == null) { 
     headers.putSingle(HttpHeaders.ACCEPT, MediaType.APPLICATION_XML_TYPE.toString()); 
    } 
    resetResponse(); 
    return doChainedInvocation(httpMethod, headers, body, responseClass, genericType, null, null); 
} 

もしそうなら、あなたはtype()メソッドを使用してWebClient上のコンテンツタイプを設定することができます。たとえば、クライアントでJSONを生成させるには:

WebClient client = WebClient.create("http://MY_SERVER:9090/admission/services/processing"); 

client.type(MediaType.APPLICATION_JSON_TYPE); 

Admission a = new Admission(); 
a.setCode("73935282"); 

Response r = client.path("/admission").put(a); 
+1

非常に参考になりました。 –

関連する問題