как реализовать REST-клиент с tomee и CXF с использованием MultivaluedMap?

Я не могу найти правильную зависимость для реализации клиента REST с помощью tomEE и CXF.

Мой модуль имеет эту зависимость:

<dependency>
    <groupId>org.apache.openejb</groupId>
    <artifactId>tomee-jaxrs</artifactId>
    <version>1.7.1</version>
    <scope>provided</scope>
</dependency>

Начальная реализация клиента проста. Он должен обслуживать метод публикации и отправлять MultiValueMap.

import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;

import org.apache.cxf.jaxrs.client.WebClient;
import org.apache.cxf.jaxrs.ext.form.Form;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

    public class RestClient<T> {

        private static final Logger LOG = LoggerFactory.getLogger(RestClient.class);
        private WebClient client;
        private Class<T> type;

        public RestClient(Class<T> aType, String aBaseUrl, String aPath) {

            this.client = WebClient.create(aBaseUrl);
            this.client.path(aPath);
            this.client.accept(MediaType.APPLICATION_JSON);
            this.type = aType;
        }

        public T post(MultivaluedMap<String, String> params) {

            LOG.debug("sending POST request to: " + this.client.getCurrentURI());
            Form theForm = new Form(params);
            T theReponse = (T) this.client.post(theForm, this.type.getClass());
            return theReponse;
        }   
    }

Проблема в том, что я не могу понять реализацию javax.ws.rs.core.MultivaluedMap. В результате я не могу вызвать свой метод. :( Я вижу только интерфейс. Разве CXF полностью не предоставляется моим pom.xml и не имеет ли он реализации этого интерфейса? Какую зависимость я должен использовать, чтобы обеспечить правильную работу CXF с tomEE?

Я не нашел ни одного примера в Интернете.


person S.Kras    schedule 06.01.2015    source источник


Ответы (1)


При использовании cxf реализация MultivaluedMap представляет собой org.apache.cxf.jaxrs.impl.MetadataMap.

В более новых версиях, совместимых с JAX-RS 2.0, есть javax.ws.rs.core.MultivaluedHashMap, но с JAX-RS 1.x реализация интерфейса зависит от реализации.

person Paul Samsotha    schedule 06.01.2015
comment
спасибо! Это помогло. В любом случае теперь маршалинг из json в T не работает, но это другая проблема. - person S.Kras; 06.01.2015