我的服务器(Jetty,RESTeasy)和GWT客户端上有一些REST服务。 我选择在前端使用Restlet-GWT模块。
我创建了一个JSE客户端(RESTeasy客户端),我的服务很好(我在Jetty服务器的日志中看到了SQL跟踪),我得到了一个xml响应。
然后我尝试用GWT和Restlet。调用Web服务(Jetty日志),但我的响应为空。
Web服务(后端):
@GET
@Path("/getArt/{id}")
@Produces("application/xml")
public Art getArt(@PathParam("id")int id){
Art art= artDAO.findById(id);
return art;
}
前端GWT:
public class Front_End implements EntryPoint {
/**
* This is the entry point method.
*/
public void onModuleLoad() {
final Client client = new Client(Protocol.HTTP);
client.get("http://localhost:8080/rest/service/getArt/1", new Callback() {
@Override
public void onEvent(Request request, Response response) {
System.out.println("Reponse : " + response.getEntity().getText());
}
});
}
RESTeasy客户端工作:
public Object test(int id){
try {
ClientRequest request = new ClientRequest("http://localhost:8080/rest/service/getArt/"+id);
request.accept("application/xml");
ClientResponse<String> response = request.get(String.class);
if (response.getStatus() == 200)
{
Unmarshaller un = jc.createUnmarshaller();
Object o = un.unmarshal(new StringReader(response.getEntity()));
return o;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
RESTeasy和Restlet“兼容”吗?我应该在后端使用Restlet而不是RESTeasy吗?我错过了什么?
提前谢谢
答案 0 :(得分:0)
这是一个SOP问题。 我的服务器在端口8080上运行,GWT在端口8888上运行。
我使用了代理服务器(在客户端将其放入/ war中):
proxy.jsp
<%@page import="javax.naming.Context"%>
<%@page import="javax.naming.InitialContext"%><%@page session="false"%>
<%@page import="java.net.*,java.io.*" %>
<%
try {
String reqUrl = request.getQueryString();
URL url = new URL(reqUrl.substring(4));
HttpURLConnection con = (HttpURLConnection)url.openConnection();
con.setDoOutput(true);
con.setRequestMethod(request.getMethod());
int clength = request.getContentLength();
if (clength > 0) {
con.setDoInput(true);
byte[] idata = new byte[clength];
request.getInputStream().read(idata,0,clength);
con.getOutputStream().write(idata,0,clength);
}
response.setContentType(con.getContentType());
BufferedReader rd = new BufferedReader(new InputStreamReader(con.getInputStream()));
String line;
while ((line = rd.readLine()) != null) {
out.println(line);
}
rd.close();
} catch (Exception e) {
e.printStackTrace();
response.setStatus(500);
}
%>
然后在您拨打电话的班级中,您的网址变为:
String url ="proxy.jsp?url=" + URL.encode("http://localhost:8080/rest/service/getArt/1");
还有另一种解决方法,请检查https://developers.google.com/web-toolkit/doc/1.6/tutorial/Xsite