0

タペストリーとResteasyの間でTynamoのチームによって行われた素晴らしい統合作業を発見しています。

WebサービスでLiveclassReloadingをアクティブ化しようとしています。ドキュメントによると:

ドキュメンテーション

RESTサービスのライブクラスリロードを有効にするために必要なのは、それらを通常のTapestry IoCサービスとしてバインドし、javax.ws.rs.core.Application.classに提供することだけです。サービス実装のリロードがどのように機能するかについて詳しくは、http: //tapestry.apache.org/reload.htmlをご覧ください。

これは、tapestry-resteasyテストスイートの例です。

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)

自動バインドが機能しないのとまったく同じです(実際、機能していると思います)。明らかに、インターフェイスとバインディングを作成せずにしようとすると、それは魅力のように機能します。

誰かが私に手がかりを与えることができますか?

4

1 に答える 1

1

問題は、tapestry-resteasyがIUserResourceを自動ビルドしようとしていることにあると思います。これは、「rest」パッケージに含まれているためです。

以下は、見落としている可能性がある非常に重要なドキュメント行です。

もう 1 つ: このサービスを自動検出パッケージに含めないでください。

これは重要な行であり、何らかの形でドキュメントに隠されているため、将来のユーザーが見やすいように警告を追加しました: http://docs.codehaus.org/pages/diffpagesbyversion.action?pageId=151847035&selectedPageVersions=24&selectedPageVersions=23

于 2013-01-18T09:21:07.787 に答える