RESTeasy后端 - Restlet前端:响应实体null

时间:2012-12-30 10:04:18

标签: http gwt jetty restlet resteasy

我的服务器(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吗?我错过了什么?

提前谢谢

1 个答案:

答案 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