Привязать конечную точку J2SE к HTTPS - PullRequest
1 голос
/ 19 января 2011

Я создал базовую службу 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());

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

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

500 Внутренняя ошибка сервера Нет обработчика для контекста

Ответы [ 2 ]

1 голос
/ 20 января 2011

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

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

вместо

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

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

0 голосов
/ 20 января 2011

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

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

...