Restlet で HTTPS および XML 投稿を使用して、Java でクライアント サーバー アプリケーションを作成しようとしています。
私はさまざまなチュートリアルに従い、問題なくサーバー側を実行することができました (ブラウザーで接続すると正しく応答します) が、クライアントを起動するとすぐに両方ともフリーズします: クライアントはその要求を完了せず、サーバーはブラウザーの要求に応答しなくなります。
現在、バージョン 2.2 マイルストーン 1 を使用していますが、バージョン 2.1.1 も試しましたが、成功しませんでした。MacOSX 10.7.5 で Eclipse Juno を使用しています。2 つのストアは、keytool コマンドを使用して作成されています (serverKey.jks を作成し、自己署名証明書をエクスポートして clientTrust.jks に追加しました)。
私が最初に含めた瓶は次のとおりです。
- org.restlet
- org.jssl.utils
- org.restlet.ext.ssl
しかし、特定のコネクタも追加しようとしました(個別に、libs readme.txtにリストされている依存関係を使用して):
- org.restlet.ext.httpclient.jar
- org.restlet.ext.jetty.jar
- org.restlet.ext.net.jar
- org.restlet.ext.simple.jar
TestHTTPS クラス
public class TestHTTPS extends Application{
public static void main(String[] args) throws Exception{
TestHTTPS t = new TestHTTPS();
t.testhttps();
}
public void testhttps() throws Exception{
Component comp = new Component();
Server server = comp.getServers().add(Protocol.HTTPS, 8183);
Series<Parameter> servParameters = server.getContext().getParameters();
servParameters.add("keystorePath", "serverKey.jks");
servParameters.add("keystorePassword", "password");
servParameters.add("keystoreType", "JKS");
servParameters.add("keyPassword", "password");
servParameters.add("tracing", "true");
comp.getDefaultHost().attach(new TestHTTPS());
server.start();
Context con = new Context();
Series<Parameter> clParameters = con.getParameters();
clParameters.add("truststorePath", "clientTrust.jks");
clParameters.add("truststoreType", "JKS");
clParameters.add("truststorePassword", "password");
Client restletClient = new Client(con, Protocol.HTTPS);
Reference resourceRef = new Reference("https://localhost:8183/user/myself");
Request request = new Request(Method.POST, resourceRef);
request.getClientInfo().getAcceptedMediaTypes().add(new Preference<MediaType>(MediaType.TEXT_XML));
Response response = restletClient.handle(request);
System.out.println(response.getEntityAsText());
restletClient.stop();
server.stop();
}
@Override
public Restlet createInboundRoot() {
Router router = new Router(getContext());
router.attach("/user/{id}", UserResource.class);
return router;
}
}
UserResource クラス
public class UserResource extends ServerResource {
@Post("xml")
public Representation sendPostResponse(){
return new StringRepresentation("<Document>content</Document>", MediaType.APPLICATION_XML);
}
@Get("xml")
public Representation sendGetResponse(){
return new StringRepresentation("<Document>content</Document>", MediaType.APPLICATION_XML);
}
}
コンソールからの唯一の出力は次のとおりです。
Starting the internal [HTTPS/1.1] server on port 8183
Starting the internal [HTTPS/1.1] client
私は何か間違ったことをしていますか?