Я столкнулся с довольно интересной ошибкой произнесения:
«Допускается не более одного параметра объекта JAX-RS (все остальные параметры должны быть аннотированы одной из аннотаций параметра ресурса JAX-RS)».
Я использую enunciate для создания как SOAP, так и REST API с поддержкой XML и JSON. Enunciate настроен на использование всех классов service.* и service.impl.*. Каждая служба содержит всю документацию Javadoc для составления документации, а также аннотацию [@GET @POST @PUT @DELETE] и @Path. Каждая реализация службы содержит аннотацию класса @Path.
Пример интерфейса:
public interface myService {
@GET
@Path("/something")
Object doGetAll();
@GET
@Path("/something/{id}"
Object doGetOne(@PathParam("id") Integer id);
@PUT
@Path("/something")
Object doCreate(/*params*/);
@POST
@Path("/something/{id}")
Object doUpdate(@PathParam("id") Integer id, /*params*/);
@DELETE
@Path("/something/{id}")
Object doDelete(@PathParam("id") Integer id);
}
Пример реализации:
@Path("/base")
public class myServiceImpl implements myService {
Object doGetAll() {/*stuff*/}
Object doGetOne(Integer id) {/*stuff*/}
Object doCreate(/*params*/) {/*stuff*/}
Object doUpdate(Integer id, /*params*/) {/*stuff*/}
Object doDelete(Integer id) {/*stuff*/}
}
Когда я закомментирую аннотации "@POST" и "@PUT" в своем сервисе, enunciate будет работать нормально. Тем не менее, если вы вернетесь к комментарию, это не приведет к тому, что сообщение будет приведено выше. Загвоздка в том, что у меня есть сервисы, которые охватывают 2-8 разных моделей (пример: мой addressService включает 3 объекта: адрес, штат и страна), поэтому я указал контексты пути (используя адрес) следующим образом:
на импл:
@Path("/address")
public class myAddressServiceImpl implements myAddressService {}
по методам:
@GET
@Path("/{id}")
findAddressById();
@GET
@Path("/states/{id}")
findStateById();
@GET
@Path("/countries/{id}")
findCountryById();
Если я могу предоставить больше информации, я был бы рад. Это была довольно неприятная проблема, потому что я не уверен, правильно ли я настроил enunciate (сомнительно, это базовая конфигурация) или я растягиваю возможности JAX-RS. Я потратил немало времени на чтение руководств, поиск в Google и просмотр Javadoc (для формулировки и JAX-RS), но мне не повезло.
Кто-нибудь еще видел эту проблему? Любые мысли о том, что я могу сделать, чтобы исправить это? У меня такое ощущение, что это будет одно из тех "не-дух" исправлений... просто не могу понять.
Заранее спасибо за помощь.