私はRestletフレームワーク(バージョン2.08)を魅了しています。これは私が現在OSGi環境でRestletを使って私の論文の実用的な部分をしようとしている理由です。最後に、サーバーバンドル(私のFelix OSGi環境でActivatorによって起動される)を作成し、http://localhost:8888/
のような単純な呼び出しに対する応答としてメッセージを表示するようになりました。Restlet OSGiのHTTPの問題
しかし、私はRestletから別のリソースを受け取ることに成功しません。 http://localhost:8888/test
の結果を計算するために、http://localhost:8080/tripleStore/triples/5
のデータが必要な場合を想像してください。私は私のRestletからhttp://127.0.0.1:8080/tripleStore/triples/5
を呼び出すとき(コードスニペットは、次の...)
public void startServer() throws Exception {
component = new Component();
Server server = new Server (Protocol.HTTP, 8888);
component.getServers().add(server);
Client client = new Client (Protocol.HTTP);
component.getClients().add(client);
Restlet restlet = new Restlet() {
@Override
public void handle(Request request, Response response) {
response.setEntity("Container Resource is active!", MediaType.TEXT_PLAIN);
}
};
Restlet restletTest = new Restlet() {
@Override
public void handle(Request request, Response response) {
RdfClientResource cli = new RdfClientResource("http://localhost:8080/tripleStore/triples/5");
cli.setFollowingRedirects(false);
Representation repri = cli.get();
response.setEntity(repri);
}
};
component.getDefaultHost().attach("/container",new Sink());
component.getDefaultHost().attach("/test",restletTest);
component.getDefaultHost().attach(restlet);
component.getClients().add(Protocol.HTTP);
component.start();
}
現在、私は、「不正な要求」を取得-error私は私のRestletに http://localhost:8080/tripleStore/triples/5
を呼び出すときに「禁止」-errorよ。
今後の研究では、このエラーの原因が非常に簡単であることが示されています。レセプタクルは、ネットワークプロキシから直接結果を取得しようとします。これは、localhost
を知らず、127.0.0.1
への呼び出しを禁止します。
もう1つの重要な点は、1回の試行中を除いて、エラーは常に複製可能であったことです。この場合、すべて正常に機能しました。これが私がOSGiの起動順序との関係を想定している理由です。 (これは修正されておらず、Sonatype Aether-frameworkに依存します)
あなたはすでにこのようなエラーに気付いていますか? OSGiのスタートアップ注文をすべて手作業で試してみることを避けるためのバグフィックスをお勧めしますか?私がOSGiの外でこれらのことをしようとすると、すべてうまく動作します。
ありがとうございます! Marcus