2011-01-19 11 views
1

http接続で呼び出されたときに機能する基本的なRESTサービスを作成しました。しかし、私が上にSSLを追加しようとするといくつかの問題があります。HTTPSへのJ2SEエンドポイントのバインド

これは、サーバーを作成するためのコードです:

private HttpContext getHttpContext() { 
    HttpsServer server = null; 
    try { 
    server = HttpsServer.create(new InetSocketAddress("localhost", 443), 5); 

    server.setHttpsConfigurator(new HttpsConfigurator(SecureChatSslContextFactory.getServerContext()) { 

    public void configure(HttpsParameters params) { 
    SSLContext context = getSSLContext(); 

    // get the default parameters 
    SSLParameters sslparams = context.getDefaultSSLParameters(); 
    params.setSSLParameters(sslparams); 
    } 
    }); 

    server.start(); 

    return server.createContext("/customerservice/customer"); 
    } catch (IOException e) { 
    e.printStackTrace(); 
    } 
    return null; 
} 
    Endpoint e = Endpoint.create(HTTPBinding.HTTP_BINDING, new RestSourcePayloadProvider()); 
    e.publish(getHttpContext()); 

クラスRestSourcePayloadProvide rは公共invokeメソッドを持っていますが、それが呼ばれることは決してありません。私は、この動作の理由は、エンドポイントのバインディングがHTTPBinding.HTTP_BINDINGであり、HTTPSではないと考えています。しかし、私はhttpsにバインドする方法を見つけることはできませんでした。

500内部サーバーエラー 私は私の問題への答えを見つけたコンテキスト

答えて

1

なしハンドラ:私はテストクライアントまたはlink textのブラウザを実行した場合

は、私は同じ答えを得ます。私は着信要求のハンドラを作成していませんでした。 は、私はインターフェイスEndpointはApacheのCFXにEndpointImplクラスによって実装されているように見えます

return server.createContext("/customerservice/customer", new HttpHandler(...)); 

代わりの

return server.createContext("/customerservice/customer"); 

を使用することになりました。 publish(address)を呼び出す場合、EndpointImplで呼び出されるメソッドはサービスサーバーとなるServerImplを作成します。 publish(server context)と呼ぶと、EndpointImplはそのメソッドもオーバーライドしないため、何も起こりません。 link text

それが働いて、サーバーを作成して、エンドポイントにそれを公開する突堤Serverパッケージを使用しています:CFXのEndpointImplを使用し、SSLはこれを試してみたい人のために

関連する問題