2012-04-02 5 views
2

Ich verwende Apache CXF, um die Kommunikation mit einer RESTful API zu ermöglichen.Apache CXF - HTTP-zentrischer Ansatz und PUT von Client zu Server

Ich muss eine PUT-Methode verwenden, um einige eingeschränkte Entitäten über die API an die Datenbank zu senden.

Ist dies der richtige Weg, um diese Methode bereitzustellen?

Ich frage, weil ich eine HTTP 500 Fehlercode Antwort bekomme.

Ich kann GET-Methodenbeispiele nur in der offiziellen Apache CXF-Dokumentation finden; HTTP PUT, HTTP POST usw. fehlen.

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()); 

Antwort

2

Könnte es sein, dass der Dienst andere Inhaltstypen als XML erwartet, wie JSON? Das Standardverhalten für WebClient ist content-type ist application/xml.

Hier ist die relevante 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); 
} 

Wenn ja, können Sie den Inhaltstyp auf WebClient mit dem type() Verfahren einstellen. Zum Beispiel, damit der Client JSON erzeugt:

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

Vielen Dank für Ihren Kommentar, sehr hilfreich! –

Verwandte Themen