我有一个非常简单的 Restlet 服务器,我正在使用一个非常简单的 Restlet 客户端进行测试,所有这些都使用带有以下扩展的 Restlet-2.1.0:xstream-1.4、jettison-1.3。
在我的 Mac 上一切正常,但是当尝试在 SunOS 5.10 上运行它时,客户端在连接到服务器时挂起。从浏览器或 telnet 访问服务器时,我可以得到响应,并且在连接到Restlet 服务器以外的任何其他资源时,同样的客户端也可以正常工作。
查看线程转储,我看到了这一点:
"main" prio=3 tid=0x08070800 nid=0x2 waiting on condition [0xfe0eb000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0xbbe827e8> (a java.util.concurrent.CountDownLatch$Sync)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:156)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:811)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly(AbstractQueuedSynchronizer.java:969)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1281)
at java.util.concurrent.CountDownLatch.await(CountDownLatch.java:207)
at org.restlet.engine.connector.ClientConnectionHelper.handle(ClientConnectionHelper.java:517)
at org.restlet.Client.handle(Client.java:180)
at org.restlet.Restlet.handle(Restlet.java:284)
at com.redprairie.task.common.TempClient.main(TempClient.java:17)
我尝试同时使用 ClientResource.get() 和 Client.handle(Request) 并且都挂起。
服务器代码:
server = new Server(Protocol.HTTP, SERVER_PORT, TestServerResource.class);
Context ctx = new Context();
server.setContext(ctx);
server.start();
客户端代码:
Request request = new Request(Method.GET, "http://localhost:8188/retrieve");
Client client = new Client(Protocol.HTTP);
Response response = client.handle(request);
response.getEntity().write(System.out);
资源:
public class TestServerResource extends ServerResource {
private static volatile Customer bernard = Customer.createSample();
@Get("json")
public Customer retrieve() {
System.out.println("GET request received");
return bernard;
}
}
xstream 和 jettison 扩展可以完美地将 java 对象转换为 JSON,反之亦然,同样,这在我的 Mac OS X 上运行良好,但在 Sun ...
我是 Restlet 的新手,所以也许我做错了什么,但这些是从可用文档中获取的简单示例。