我创建了一个基本的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的方法。
如果我在link text上运行测试客户端或浏览器,我会得到相同的答案:
500内部服务器错误 没有上下文处理程序
答案 0 :(得分:1)
我找到了问题的答案。我没有为传入的请求创建处理程序。 我应该使用
return server.createContext("/customerservice/customer", new HttpHandler(...));
而不是
return server.createContext("/customerservice/customer");
接口Endpoint
看起来像是由Apache的CFX中的EndpointImpl
类实现的。调用publish(address)
时,EndpointImpl
中调用的方法会创建一个ServerImpl
,它将成为服务服务器。如果我调用publish(server context)
,则没有任何反应,因为EndpointImpl
也不会覆盖该方法。
答案 1 :(得分:0)
对于那些想要使用CFX的EndpointImpl和SSL的人试试这个: link text
它使用Jetty Server包创建工作服务器并将其发布到端点。