我正在尝试使用带有Restlet的HTTPS和XML帖子在Java中创建客户端 - 服务器应用程序。
我已经按照各种教程,设法运行服务器端没有问题(如果我用浏览器连接它,它会正确响应),但是一旦我启动客户端他们都冻结:客户端无法完成它的请求和服务器不再响应浏览器请求。
现在我正在使用2.2版里程碑1,但我也尝试使用版本2.1.1但没有成功。我在MacOSX 10.7.5上使用Eclipse Juno。这两个商店是使用keytool命令创建的(我创建了serverKey.jks,导出了自签名证书并将其添加到clientTrust.jks)。 我最初包括的罐子是:
但我也尝试添加特定的连接器(单独使用libs readme.txt中列出的依赖项):
public class TestHTTPS extends Application{
public static void main(String[] args) throws Exception{
TestHTTPS t = new TestHTTPS();
t.testhttps();
}
public void testhttps() throws Exception{
Component comp = new Component();
Server server = comp.getServers().add(Protocol.HTTPS, 8183);
Series<Parameter> servParameters = server.getContext().getParameters();
servParameters.add("keystorePath", "serverKey.jks");
servParameters.add("keystorePassword", "password");
servParameters.add("keystoreType", "JKS");
servParameters.add("keyPassword", "password");
servParameters.add("tracing", "true");
comp.getDefaultHost().attach(new TestHTTPS());
server.start();
Context con = new Context();
Series<Parameter> clParameters = con.getParameters();
clParameters.add("truststorePath", "clientTrust.jks");
clParameters.add("truststoreType", "JKS");
clParameters.add("truststorePassword", "password");
Client restletClient = new Client(con, Protocol.HTTPS);
Reference resourceRef = new Reference("https://localhost:8183/user/myself");
Request request = new Request(Method.POST, resourceRef);
request.getClientInfo().getAcceptedMediaTypes().add(new Preference<MediaType>(MediaType.TEXT_XML));
Response response = restletClient.handle(request);
System.out.println(response.getEntityAsText());
restletClient.stop();
server.stop();
}
@Override
public Restlet createInboundRoot() {
Router router = new Router(getContext());
router.attach("/user/{id}", UserResource.class);
return router;
}
}
public class UserResource extends ServerResource {
@Post("xml")
public Representation sendPostResponse(){
return new StringRepresentation("<Document>content</Document>", MediaType.APPLICATION_XML);
}
@Get("xml")
public Representation sendGetResponse(){
return new StringRepresentation("<Document>content</Document>", MediaType.APPLICATION_XML);
}
}
控制台的唯一输出是:
Starting the internal [HTTPS/1.1] server on port 8183
Starting the internal [HTTPS/1.1] client
我做错了吗?
答案 0 :(得分:2)
经过相当多的调查后,我发现以下内容解决了“启动内部[HTTPS / 1.1]客户端”过程停滞的问题:
确保以下三个JAR位于您的构建路径中:
org.restlet.ext.net.jar
org.restlet.ext.ssl.jar
org.restlet.jar