Привязать конечную точку J2SE к HTTPS

Я создал базовую службу REST, которая работает при вызове через http-соединение. Но когда я пытаюсь добавить SSL сверху, у меня возникают некоторые проблемы.

Это код для создания сервера:

 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());

В классе RestSourcePayloadProvider есть вызов открытого метода, но он никогда не вызывается. Предполагаю, что причина такого поведения в том, что привязка для конечной точки HTTPBinding.HTTP_BINDING, а не HTTPS. Но мне не удалось найти способ привязки к https.

Если я запускаю тестовый клиент или браузер на тексте ссылки, я получаю тот же ответ:

500 Internal Server Error Нет обработчика контекста


person Cristian    schedule 19.01.2011    source источник


Ответы (2)


Я нашел ответ на свою проблему. Я не создавал обработчик для входящих запросов. я должен был использовать

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

вместо

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

Похоже, что интерфейс Endpoint реализован классом EndpointImpl в Apache CFX. При вызове publish(address) метод, вызываемый в EndpointImpl, создает ServerImpl, который будет сервисным сервером. Если я вызову publish(server context), ничего не произойдет, потому что EndpointImpl также не переопределяет этот метод.

person Cristian    schedule 20.01.2011

Для тех, кто хочет использовать EndpointImpl и SSL CFX, попробуйте следующее: текст ссылки

Он использует пакет Jetty Server для создания рабочего сервера и его публикации в конечной точке.

person Cristian    schedule 20.01.2011