如何从仅提供JSON的服务器获取JSONP?

时间:2013-06-12 23:50:18

标签: java json gwt jsonp httprequest

我正在GWT中编写一个应用程序,它应该从外部服务器获取JSON。我正在使用JsonpRequestBuilder但我总是遇到失败(超时),因为这是一个JSON no JSONP。

如果我有自己的服务器,那么我就可以更改响应格式(到JSONP)。

我可以改变什么才能让它发挥作用?

我已经使用Google Chrome的调试器进行了检查,而且我做了!获得响应,但不知何故代码落入onFailure方法,我无法使用响应。

String url = "http://api.mobile.endomondo.com/mobile/api/workout/list?authToken=XXXX";

JsonpRequestBuilder jsonp = new JsonpRequestBuilder();
jsonp.setTimeout(100000);
jsonp.setCallbackParam("callback");
 jsonp.requestObject(url,
     new AsyncCallback<TrainingData>() { // Type-safe!

       @Override
       public void onFailure(Throwable throwable) {
         // Easy to debug! (hopefully)
           Window.alert(throwable.getMessage());
       }
       @Override
       public void onSuccess(TrainingData trd) {
         // Success!
           //Window.alert("JSON obtained");
           Window.alert(trd.getEntries().toString());
         }
       });

编辑现在我开始

  

尚未实施的跨站点托管模式。看问题   http://code.google.com/p/google-web-toolkit/issues/detail?id=2079

1 个答案:

答案 0 :(得分:2)

我们正在使用maven和JBoss 7.2.0。但是如果你想要/也需要最小化或没有变化,你也应该能够在Tomcat或其他容器中使用它。

我们是使用dsmiley's httpproxy servlet完成的:下载并构建它,将其添加到您的maven存储库(或者忘记pom.xml文件,只需将新构建的jar添加到您的库中)。

在我们的pom.xml文件中,我们添加了一个依赖项:

   <dependency>
      <groupId>org.mitre.dsmiley.httpproxy</groupId>
      <artifactId>smiley-http-proxy-servlet</artifactId>
      <!-- 1.3-SNAPSHOT adds ability to handle spaces in paths, 1.2 works otherwise -->
      <version>1.3-SNAPSHOT</version>
   </dependency>

在web.xml中添加servlet映射:

   <servlet>
      <servlet-name>FirstResourceProxy</servlet-name>
      <servlet-class>org.mitre.dsmiley.httpproxy.ProxyServlet</servlet-class>
      <init-param>
         <param-name>targetUri</param-name>
         <param-value>http://targethost:port/and/root/path</param-value>
      </init-param>
      <init-param>
         <param-name>log</param-name>
         <param-value>true</param-value>
      </init-param>
   </servlet>
   <servlet-mapping>
      <servlet-name>FirstResourceProxy</servlet-name>
      <url-pattern>/firstResource/*</url-pattern>
   </servlet-mapping>

   <servlet>
      <servlet-name>SecondResourceProxy</servlet-name>
      <servlet-class>org.mitre.dsmiley.httpproxy.ProxyServlet</servlet-class>
      <init-param>
         <param-name>targetUri</param-name>
         <param-value>http://targethost:port/and/root/path</param-value>
      </init-param>
      <init-param>
         <param-name>log</param-name>
         <param-value>true</param-value>
      </init-param>
   </servlet>
   <servlet-mapping>
      <servlet-name>SecondResourceProxy</servlet-name>
      <url-pattern>/secondResource/*</url-pattern>
   </servlet-mapping>