【发布时间】:2015-09-17 18:23:11
【问题描述】:
我尝试从使用 App Engine 的 GWT 应用程序调用外部 Web 服务(不是我的)。
我知道由于 SOP(同源策略)和 RequestBuilder 不是服务器上的解决方案,从客户端执行此操作是不可能的。我也按照the web site 和using java.net 上的教程进行操作
这里是客户端
AsyncCallback<CustomObject> callback = new AsyncCallback<CustomObjectCustomObject>() {
@Override
public void onFailure(Throwable caught) {
caught.printStackTrace();
}
@Override
public void onSuccess(CustomObject result) {
// code omitted
}
};
service.callMethod(aString, callback);
这是服务器
try {
String xmlRequest = "xmlToSend";
URL url = new URL("https://www.externalWebService.com");
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestMethod("POST");
conn.setAllowUserInteraction(false);
conn.setDoOutput(true);
conn.setRequestProperty("Content-Type","application/soap+xml");
conn.setRequestProperty( "Content-length", Integer.toString(xmlRequest.length()));
conn.setRequestProperty("charset", "utf-8");
conn.setConnectTimeout(10000);
OutputStream rawOutStream = conn.getOutputStream();
PrintWriter pw = new PrintWriter(rawOutStream);
pw.print(xmlRequest);
pw.flush();
pw.close();
if(conn.getResponseCode() != 200){
// Something...
}
我在conn.getResponseCode() 一直遇到同样的错误:
java.lang.ClassCastException: com.google.appengine.repackaged.org.apache.http.message.BasicHttpRequest cannot be cast to com.google.appengine.repackaged.org.apache.http.client.methods.HttpUriRequest
在不发出真正请求的情况下,远程服务运行良好:它能够序列化对象并将其返回给客户端。该问题与客户端和服务器之间的通信无关,更像是 AppEngine 不支持 HttpURLConnection。但它应该在服务器上(不是吗?)
任何想法将不胜感激!提前致谢
【问题讨论】:
标签: google-app-engine gwt classcastexception urlfetch cross-site