Я работаю над разработкой некоторых веб-сервисов с использованием RESTeasy и Seam.Одна из служб, которую я хотел бы создать, - это служба Query by Example.
Сначала я попытался закодировать ее следующим образом:
@GET
@Produces("application/xml")
@Consumes("application/xml")
@Path("/matching")
public MessageList getMatchingMessages(Message msg);
Это, к сожалению, вызвало сложности в клиенте:
[testng] [Parser] Running:
[testng] C:\Users\bdw\workspace-shepherd\GPRI\test-build\testng-Test.xml
[testng] java.lang.RuntimeException: java.lang.ClassCastException: org.apache.commons.httpclient.methods.GetMethod cannot be cast to org.apache.commons.httpclient.methods.EntityEnclosingMethod
[testng] at org.jboss.resteasy.client.core.ClientInvoker.invoke(ClientInvoker.java:104)
[testng] at org.jboss.resteasy.client.core.ClientProxy.invoke(ClientProxy.java:59)
[testng] at $Proxy138.getMatchingMessages(Unknown Source)
и так далее.Вариант этого метода допускает диапазон дат, но, очевидно, не работает и в этой форме:
@GET
@Produces("application/xml")
@Consumes("application/xml")
@Path("/matching")
public MessageList getMatchingMessages(@QueryParam("startDate") Date start,
@QueryParam("endDate") Date end, Message msg);
Когда я задумался об этом, передача сообщения методу GET может нарушитьДух ОТДЫХА.Конечно, удаление аннотации Consumes из метода позволяет клиенту работать без этих ошибок.Но напрашивается вопрос, что является правильным способом написать метод запроса, который принимает ввод без XML и вводит вывод XML?Или это берет и XML и основанные на URL параметры и производит вывод XML?