2011-01-19 5 views
1

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

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

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 г имеет ВЫЗОВ общественный метод, но он никогда не вызывается. Я полагаю, что причиной такого поведения является то, что привязка для конечной точки равна HTTPBinding.HTTP_BINDING, а не HTTPS. Но мне не удалось найти способ привязки к https.

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

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

ответ

1

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

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

вместо

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

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

0

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

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

Смежные вопросы