Невозможно сгенерировать пустые методы для клиента-джерси из wadl - PullRequest
1 голос
/ 29 марта 2012

Я использую майку.У меня есть rest-метод:

@PUT
@Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
@Path("/create-profile")
public void createProfile (Profile profile) throws UnableTransferToEntity {
    EntityManager em = emf.createEntityManager();
    try{
        em.getTransaction().begin();
        em.persist(EntityConversionUtils.transformReporterProfileToSimpleProfileEntity(profile));
        em.getTransaction().commit();
    }finally{
        em.close();
    }
}

Часть wadl, сгенерированная для этого метода:

<resource path="/create-profile">
            <method id="createProfile" name="PUT">
                <request>
                    <representation mediaType="application/json"/>
                    <representation mediaType="application/xml"/>
                </request>
            </method>
        </resource>

Я использую maven-plugin для генерации клиента:

<groupId>org.jvnet.ws.wadl</groupId>
            <artifactId>wadl-maven-plugin</artifactId>
            <version>1.1-SNAPSHOT</version>

Проблема в том, что пустые методы (putApplicationXml Asvoid ) не создаются, только методы, которые ожидают ответа.Когда я пытаюсь использовать их даже с ожидаемым Void.class, я получаю исключение (возвращается состояние ответа 204 Нет содержимого).

Если метод rest содержит @QueryParam:

@DELETE
@Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
@Path("/remove-profile")
public void removeProfile (@QueryParam("id") final int id){
    EntityManager em = emf.createEntityManager();
    SimpleProfileEntity simpleProfileEntity = em.find(SimpleProfileEntity.class, id);

    new NotificationService().removeProfile(simpleProfileEntity.getNotificationProfile().getId());

    try{
        em.getTransaction().begin();
        em.remove(simpleProfileEntity);
        em.getTransaction().commit();
    }finally{
        em.close();
    }
}

wadl выглядит так:

<resource path="/remove-profile">
            <method id="removeProfile" name="DELETE">
                <request>
                    <param xmlns:xs="http://www.w3.org/2001/XMLSchema" name="id" style="query" type="xs:int"/>
                </request>
            </method>
        </resource>

Как видите, он содержит узел "param".Метод void client для этой записи генерируется правильно.

Как создать метод void для моего CreateProfile?

1 Ответ

0 голосов
/ 30 июня 2012

Верный тип ответа 205.

Я работаю с той же проблемой, и кажется, что это проблема клиентской части, но не серверной части.

Я использовал resource.type(MediaType.APPLICATION_JSON).put(String.class, datenJson); и получаю те же исключения.

Сработало после удаления ожидаемого типа возврата (первый параметр put (String.class)):

resource.type(MediaType.APPLICATION_JSON).put(datenJson);

Поэтому не указывайте ожидаемый тип ответа, если у вас нет ответа.

...