WS play框架连接问题
WS play framework connection issue
环境:Java7、游戏框架
大家好,
我遇到了问题.. 我在 intelliJ idea 上创建了新的游戏项目。我写了一个WS调用了下面的URL
http://finance.yahoo.com/connection/currency-converter-cache?date=20151006
如下
public static F.Promise<Result> getAllCurrencies(){
SimpleDateFormat formater = new SimpleDateFormat("YYYYMMdd");
String curl = "http://finance.yahoo.com/connection/currency-converter-cache";
F.Promise<Result> holder = WS.url(curl).setTimeout(2000).setQueryParameter("date", formater.format(new Date())).get().map(new F.Function<WSResponse, Result>() {
@Override
public Result apply(WSResponse wsResponse) throws Throwable {
return ok(wsResponse.asJson());
}
});
return holder;
}
调用时出现连接异常..
[success] Compiled in 527ms
[info] play - Application started (Dev)
[error] play - Cannot invoke the action, eventually got an error: java.net.ConnectException: Connection timed out: no further information: finance.yahoo.com/106.10.199.10:80 to http://finance.yahoo.com/connection/currency-converter-cache?date=20150212
[error] application -
! @6l6kefip0 - Internal server error, for (GET) [/currencies] ->
play.api.Application$$anon: Execution exception[[ConnectException: Connection timed out: no further information: finance.yahoo.com/106.10.xxx.xx:80 to http://finance.yahoo.com/connection/currency-converter-cache?date=20150212]]
at play.api.Application$class.handleError(Application.scala:296) ~[play_2.11-2.3.7.jar:2.3.7]
at play.api.DefaultApplication.handleError(Application.scala:402) [play_2.11-2.3.7.jar:2.3.7]
at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$$anonfun$applyOrElse.apply(PlayDefaultUpstreamHandler.scala:320) [play_2.11-2.3.7.jar:2.3.7]
at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$$anonfun$applyOrElse.apply(PlayDefaultUpstreamHandler.scala:320) [play_2.11-2.3.7.jar:2.3.7]
at scala.Option.map(Option.scala:145) [scala-library-2.11.1.jar:na]
Caused by: java.net.ConnectException: Connection timed out: no further information: finance.yahoo.com/106.10.xxx.xx:80 to http://finance.yahoo.com/connection/currency-converter-cache?date=20150212
at com.ning.http.client.providers.netty.NettyConnectListener.operationComplete(NettyConnectListener.java:104) ~[async-http-client-1.8.14.jar:na]
at org.jboss.netty.channel.DefaultChannelFuture.notifyListener(DefaultChannelFuture.java:431) ~[netty-3.9.3.Final.jar:na]
at org.jboss.netty.channel.DefaultChannelFuture.notifyListeners(DefaultChannelFuture.java:422) ~[netty-3.9.3.Final.jar:na]
at org.jboss.netty.channel.DefaultChannelFuture.setFailure(DefaultChannelFuture.java:384) ~[netty-3.9.3.Final.jar:na]
at org.jboss.netty.channel.socket.nio.NioClientBoss.processSelectedKeys(NioClientBoss.java:109) ~[netty-3.9.3.Final.jar:na]
Caused by: java.net.ConnectException: Connection timed out: no further information: finance.yahoo.com/106.10.xxx.xx:80
at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) ~[na:1.7.0_71]
at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:739) ~[na:1.7.0_71]
想知道我在哪里遗漏了这件作品..
同样,当我在浏览器中点击 URL 时,我能够看到输出。我是否需要在 application.conf 中更新 application.secret 才能使其正常工作....
认为问题在于您从响应中获得了 Json,但随后您要求 "message" 字段,而该字段在 yahoo finance 响应中不存在。
wsResponse.asJson().get("message");
你到底想要什么return?如果你想 return 与雅虎发送的一样,你只需要
public static F.Promise<Result> getAllCurrencies(){
SimpleDateFormat formater = new SimpleDateFormat("YYYYMMdd");
String curl = "http://finance.yahoo.com/connection/currency-converter-cache";
F.Promise<WSResponse> holder1 = WS.url(curl).get();
F.Promise<Result> holder = WS.url(curl).setQueryParameter("date", formater.format(new Date())).get().map(new F.Function<WSResponse, Result>() {
@Override
public Result apply(WSResponse wsResponse) throws Throwable {
return ok(wsResponse.asJson());
}
});
return holder;
}
环境:Java7、游戏框架
大家好,
我遇到了问题.. 我在 intelliJ idea 上创建了新的游戏项目。我写了一个WS调用了下面的URL
http://finance.yahoo.com/connection/currency-converter-cache?date=20151006
如下
public static F.Promise<Result> getAllCurrencies(){
SimpleDateFormat formater = new SimpleDateFormat("YYYYMMdd");
String curl = "http://finance.yahoo.com/connection/currency-converter-cache";
F.Promise<Result> holder = WS.url(curl).setTimeout(2000).setQueryParameter("date", formater.format(new Date())).get().map(new F.Function<WSResponse, Result>() {
@Override
public Result apply(WSResponse wsResponse) throws Throwable {
return ok(wsResponse.asJson());
}
});
return holder;
}
调用时出现连接异常..
[success] Compiled in 527ms
[info] play - Application started (Dev)
[error] play - Cannot invoke the action, eventually got an error: java.net.ConnectException: Connection timed out: no further information: finance.yahoo.com/106.10.199.10:80 to http://finance.yahoo.com/connection/currency-converter-cache?date=20150212
[error] application -
! @6l6kefip0 - Internal server error, for (GET) [/currencies] ->
play.api.Application$$anon: Execution exception[[ConnectException: Connection timed out: no further information: finance.yahoo.com/106.10.xxx.xx:80 to http://finance.yahoo.com/connection/currency-converter-cache?date=20150212]]
at play.api.Application$class.handleError(Application.scala:296) ~[play_2.11-2.3.7.jar:2.3.7]
at play.api.DefaultApplication.handleError(Application.scala:402) [play_2.11-2.3.7.jar:2.3.7]
at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$$anonfun$applyOrElse.apply(PlayDefaultUpstreamHandler.scala:320) [play_2.11-2.3.7.jar:2.3.7]
at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$$anonfun$applyOrElse.apply(PlayDefaultUpstreamHandler.scala:320) [play_2.11-2.3.7.jar:2.3.7]
at scala.Option.map(Option.scala:145) [scala-library-2.11.1.jar:na]
Caused by: java.net.ConnectException: Connection timed out: no further information: finance.yahoo.com/106.10.xxx.xx:80 to http://finance.yahoo.com/connection/currency-converter-cache?date=20150212
at com.ning.http.client.providers.netty.NettyConnectListener.operationComplete(NettyConnectListener.java:104) ~[async-http-client-1.8.14.jar:na]
at org.jboss.netty.channel.DefaultChannelFuture.notifyListener(DefaultChannelFuture.java:431) ~[netty-3.9.3.Final.jar:na]
at org.jboss.netty.channel.DefaultChannelFuture.notifyListeners(DefaultChannelFuture.java:422) ~[netty-3.9.3.Final.jar:na]
at org.jboss.netty.channel.DefaultChannelFuture.setFailure(DefaultChannelFuture.java:384) ~[netty-3.9.3.Final.jar:na]
at org.jboss.netty.channel.socket.nio.NioClientBoss.processSelectedKeys(NioClientBoss.java:109) ~[netty-3.9.3.Final.jar:na]
Caused by: java.net.ConnectException: Connection timed out: no further information: finance.yahoo.com/106.10.xxx.xx:80
at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) ~[na:1.7.0_71]
at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:739) ~[na:1.7.0_71]
想知道我在哪里遗漏了这件作品..
同样,当我在浏览器中点击 URL 时,我能够看到输出。我是否需要在 application.conf 中更新 application.secret 才能使其正常工作....
认为问题在于您从响应中获得了 Json,但随后您要求 "message" 字段,而该字段在 yahoo finance 响应中不存在。
wsResponse.asJson().get("message");
你到底想要什么return?如果你想 return 与雅虎发送的一样,你只需要
public static F.Promise<Result> getAllCurrencies(){
SimpleDateFormat formater = new SimpleDateFormat("YYYYMMdd");
String curl = "http://finance.yahoo.com/connection/currency-converter-cache";
F.Promise<WSResponse> holder1 = WS.url(curl).get();
F.Promise<Result> holder = WS.url(curl).setQueryParameter("date", formater.format(new Date())).get().map(new F.Function<WSResponse, Result>() {
@Override
public Result apply(WSResponse wsResponse) throws Throwable {
return ok(wsResponse.asJson());
}
});
return holder;
}