0

私はレストレットフレームワークに不慣れです。小さなJavaeeアプリケーションを作成しましたが、「見つかりません(404)」というエラーが表示されます。

public class MailServerApplication extends Application {
   @オーバーライド
   public Restlet createInboundRoot(){
      ルーターrouter=new Router(getContext());
      router.attach( "http:// localhost:8084 / accounts / {accountId} / mails / {mailId}"、MailServerResource.class);
      リターンルーター;
   }
}

////////////////////////////////
public class MailServerResource extends ServerResource {
   @オーバーライド
   保護された表現get()はResourceException{をスローします

      DomRepresentationの結果=null;
      試す {
         結果=新しいDomRepresentation();
         result.setIndenting(true);
         ドキュメントdoc=result.getDocument();
         ノードmailElt=doc.createElement( "mail");
         doc.appendChild(mailElt);
         ノードstatusElt=doc.createElement( "status");
         statusElt.setTextContent( "received");
         mailElt.appendChild(statusElt);
         ノードsubjectElt=doc.createElement( "subject");
         subjectElt.setTextContent( "メッセージから自己へ");
         mailElt.appendChild(subjectElt);
         ノードcontentElt=doc.createElement( "content");
         contentElt.setTextContent( "Doh!");
         mailElt.appendChild(contentElt);
      } catch(IOException e){
      }
      結果を返します。
   }
   @オーバーライド
   保護された表現put(表現表現)はResourceException{をスローします
      DomRepresentation mailRep = new DomRepresentation(representation);
      ドキュメントドキュメント;
      試す {
         doc = mailRep.getDocument();
         要素mailElt=doc.getDocumentElement();
         要素statusElt=(要素)mailElt
         .getElementsByTagName( "status")。item(0);
         要素subjectElt=(要素)mailElt.getElementsByTagName(
         "件名").item(0);
         要素contentElt=(要素)mailElt.getElementsByTagName(
         "content")。item(0);
         要素accountRefElt=(要素)mailElt.getElementsByTagName(
         "accountRef")。item(0);
         System.out.println( "ステータス:" + statusElt.getTextContent());
         System.out.println( "件名:" + subjectElt.getTextContent());
         System.out.println( "コンテンツ:" + contentElt.getTextContent());
         System.out.println( "アカウントURI:" + accountRefElt.getTextContent());
      } catch(IOException e){
         新しいResourceException(e);をスローします。
      }
      nullを返します。
   }
}

しかし、私がそれを実行/デバッグする場合。次のエラーが発生します。

スレッド「main」の例外が見つかりません(404)-見つかりません
        org.restlet.resource.ClientResource.handle(ClientResource.java:858)で
        org.restlet.resource.ClientResource.handle(ClientResource.java:763)で
        org.restlet.resource.ClientResource.get(ClientResource.java:496)で
        MailClient.main(MailClient.java:19)で

ありがとう。

4

2 に答える 2

0

投稿されたコメントに加えて、どのようにしてRestletアプリケーションを開始しましたか?以下のように、Serverクラスを使用します。

public class MailServerApplication extends Application {
  (...)
  public static void main(String[] args) {
    try {
      Server server = new Server(Protocol.HTTP, 8084);
      server.setNext(new MailServerApplication());
      server.start();

      System.out.println("Press a key to stop");
      System.in.read();
    } catch(Exception ex) {
      ex.printStackTrace();
    }
  }
}

あなたが言ったように、あなたはJavaEEアプリケーションを開発しました、おそらくサーブレット拡張を使用しましたか?この場合、サーブレットレベルでのマッピングも考慮に入れることができます。

最初のアプローチでは、org.restlet.jarおよびorg.restlet.ext.xml.jar(バージョン2.0.5、jeeエディション)を使用してアプリケーションを動作させました。URL http:// localhost:8084 / accounts / 10 / mails/1を使用してアクセスしました。

お役に立てば幸いです。ティエリー

于 2011-04-21T07:50:31.723 に答える
0

こんにちはカバに感謝します。
実際、問題はURLにありました。
次の行を変更する必要がありました

     router.attach( "http:// localhost:8084 / accounts / {accountId} / mails / {mailId}"、MailServerResource.class);

この行に。

     router.attach( "/accounts/{accountId}/mails/{mailId}"、MailServerResource.class);

JavaSEのレストレットフレームワークを使用する場合、最初のURLは問題ありませんでした。ただし、Webアプリケーション(java ee)の場合は、サーバーの相対パスを使用する必要があります。

助けてくれてありがとう。

于 2011-04-21T09:14:37.493 に答える