Класс xxx не содержит публичного конструктора, необходимого для автоматического построения, когда xxx становится сервисом Tapestry.
Я открываю для себя замечательную интеграционную работу, проделанную командой Тинамо между Tapestry и Resteasy .
Я пытаюсь активировать Liveclass Reloading на веб-сервисах. Согласно документу говорит:
Документация
Единственное, что вам нужно сделать, чтобы включить перезагрузку классов в реальном времени для ваших REST-сервисов, это связать их как обычные сервисы IestC Tapestry и добавить их в javax.ws.rs.core.Application.class. Узнайте больше о том, как происходит перезагрузка реализации сервиса: http://tapestry.apache.org/reload.html
Вот пример из набора тестов гобелен-рестайзи.
public static void bind(ServiceBinder binder)
{
binder.bind(ReloadableEchoResource.class, ReloadableEchoResourceImpl.class);
}
@Contribute(javax.ws.rs.core.Application.class)
public static void configureRestResources(Configuration<Object> singletons, ReloadableEchoResource reloadableEchoResource)
{
singletons.add(reloadableEchoResource);
}
Моя собственная работа
Это именно то, что я делаю (ну... по крайней мере, я верю, что это так;D):
Мой переплет
public static void bind(ServiceBinder binder)
{
binder.bind(PushMessageService.class, GCMPushMessageServiceImpl.class);
binder.bind(UserService.class, HibernateUserServiceImpl.class);
binder.bind(IUserResource.class, UserResourceImpl.class);
}
/**
* Contributions to the RESTeasy main Application, insert all your RESTeasy singletons services here.
*/
@Contribute(javax.ws.rs.core.Application.class)
public static void configureRestResources(Configuration<Object> singletons, IUserResource userResource)
{
singletons.add(userResource);
}
Мой интерфейс
@Path("/user")
public interface IUserResource {
/**
* Lecture de tous les utilisateurs
*
* @return une List des utilisateurs existants
*/
@GET
@Produces("application/json")
public abstract List<User> getAllDomains();
ошибка
Но когда я запускаю свое приложение, я получаю это сообщение:
HTTP ERROR 500
Problem accessing /user. Reason:
Exception constructing service 'ResteasyRequestFilter': Error building service proxy for service 'Application' (at org.tynamo.resteasy.Application(Collection) (at Application.java:14) via org.tynamo.resteasy.ResteasyModule.bind(ServiceBinder) (at ResteasyModule.java:31)): Error invoking service contribution method org.tynamo.resteasy.ResteasyModule.javaxWsRsCoreApplication(Configuration, ObjectLocator, ResteasyPackageManager, ClassNameLocator): Class com.sopragroup.ecommerce.mobile.rest.IUserResource does not contain a public constructor needed to autobuild.
Caused by:
java.lang.RuntimeException: Exception constructing service 'ResteasyRequestFilter': Error building service proxy for service 'Application' (at org.tynamo.resteasy.Application(Collection) (at Application.java:14) via org.tynamo.resteasy.ResteasyModule.bind(ServiceBinder) (at ResteasyModule.java:31)): Error invoking service contribution method org.tynamo.resteasy.ResteasyModule.javaxWsRsCoreApplication(Configuration, ObjectLocator, ResteasyPackageManager, ClassNameLocator): Class com.sopragroup.ecommerce.mobile.rest.IUserResource does not contain a public constructor needed to autobuild.
at org.apache.tapestry5.ioc.internal.services.JustInTimeObjectCreator.obtainObjectFromCreator(JustInTimeObjectCreator.java:75)
at org.apache.tapestry5.ioc.internal.services.JustInTimeObjectCreator.createObject(JustInTimeObjectCreator.java:54)
Это похоже на то, что автоматическое связывание не работает (на самом деле я так думаю). Очевидно, что когда я пытаюсь без создания интерфейса и привязки, это работает как шарм.
Может кто-нибудь дать мне подсказку?
1 ответ
Я думаю, что проблема в том, что tapestry-resteasy пытается автоматически собрать IUserResource, потому что он находится в пакете rest.
Вот очень важная строка документации, которую вы, возможно, пропустили:
Еще одна вещь: НЕ помещайте эту услугу в пакет автообнаружения.
Это важная строка, и она была каким-то образом скрыта в документах, поэтому я добавил предупреждение, чтобы сделать его более заметным для будущих пользователей: http://docs.codehaus.org/pages/diffpagesbyversion.action?pageId=151847035&selectedPageVersions=24&selectedPageVersions=23