Apache CXF - http-ориентированный подход и PUT от клиента к серверу - PullRequest
2 голосов
/ 02 апреля 2012

Я использую Apache CXF для обеспечения связи с RESTful API.

Мне нужно использовать метод PUT для отправки некоторых ограниченных объектов в базу данных через API.

Это правильный способ предоставить этот метод?

Я спрашиваю, потому что получаю ответ с кодом ошибки 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()); 

1 Ответ

2 голосов
/ 02 апреля 2012

Может ли быть, что служба ожидает тип контента, отличный от XML, например JSON?Поведение по умолчанию для WebClient предполагает, что content-type равно application/xml.

Вот соответствующий исходный код для 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);
}

Если это так, вы можете установить тип контента на WebClient, используя type() метод.Например, чтобы клиент произвел 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);
...