Невозможно сгенерировать пустые методы для клиента-джерси из wadl
Я использую майку. У меня есть метод отдыха:
@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-плагин для генерации клиента:
<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 ответ
Тип ответа 205 правильный.
Я бегу в той же проблеме, и кажется, что это проблема клиентской части, но не серверной части.
я использовал resource.type(MediaType.APPLICATION_JSON).put(String.class, datenJson);
и получите те же исключения.
Это сработало после удаления ожидаемого типа возврата (первый параметр put
(String.class)):
resource.type(MediaType.APPLICATION_JSON).put(datenJson);
Поэтому не указывайте ожидаемый тип ответа, если у вас нет ответа.