2016-12-04 6 views
0

Используя последнюю версию CXF и других зависимостей, я пытаюсь объединить тестовые веб-службы, которые производят и потребляют JSON. Тест работает, когда аргумент метода является String, но не выполняется, когда аргумент является настраиваемым объектом. Ниже приводится образец ресурса:Невозможно развязать JSON-to-object с JAX-RS (CXF)

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

Последняя строка кода выше выдает следующее исключение:

5 декабря 2016 2 : 46: 50 AM org.apache.cxf.jaxrs.utils.JAXRSUtils logMessageHandlerProblem SEVERE: для класса com.finity.model.Employee, ContentType: application/json Dec 05, 2016 2:46:50 org.apache.cxf.jaxrs.impl.WebApplicationExceptionMapper toResponse ВНИМАНИЕ: javax.ws.rs.WebApplicationException: HTTP 415 Неподдерживаемый тип носителя на org.apache.cxf.jaxrs.utils .JAXRSUtils.readFromMessageBody (JAXRSUtils.java:1315) на org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameter (JAXRSUtils.java:826) в 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 с только полем имени и без аннотации к классу. Хотя я пробовал аннотации JsonAutoDetect и JsonSerialize в классе Employee, но это не помогло. –