2012-12-30 18 views
0

我的服務器上有一些REST服務(Jetty,RESTeasy)和GWT客戶端。 我選擇在前端使用Restlet-GWT模塊。RESTeasy後端 - Restlet前端:響應實體null

我做了一個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?我錯過了什麼?

Thx預先

+0

這應該很好,Restlet-GWT可以與任何HTTP服務器通信。如果您在服務器端使用Restlet,您可以從一些自動Bean序列化中受益。你正在使用哪個版本的Restlet? RESTeqsy對Restlet = GWT返回的響應是什麼? –

+0

Thx爲您的答案,實際上我有一個SOP問題。這不是由Restlet引起的。 – isy

回答

0

這是一個SOP問題。 我的服務器在端口8080上運行,並且GWT在端口8888

我使用代理(把它放在你的/戰爭在客戶端):

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

+0

很好,順便說一下,R​​estlet API附帶了一個重定向器類,可以幫助您以更簡單的方式編寫這樣的反向代理。 –