我正在尝试在移动 Android 应用程序中使用 odata4j 库。有时 HTTP 请求没有得到响应,因为设备在发送请求后就失去了移动连接。在几次尝试重现它并对其计时后,我注意到库大约需要 27 分钟才能抛出“java.net.SocketException: Connection timed out”。有什么办法可以减少这个超时,让我可以更快地处理故障?谢谢。
问问题
948 次
2 回答
3
使用 jersey 消费者实现(这是默认设置)。在构建消费者时添加 JerseyClientBehavior [1]。这允许您修改 ClientConfig [2] - 您可以修改连接 + 读取超时。
于 2012-06-18T12:11:27.923 回答
3
我想为@John Spurlock answer提供代码片段。通过类比此代码http://code.google.com/p/odata4j/source/browse/odata4j-jersey/src/main/java/org/odata4j/jersey/consumer/behaviors/AllowSelfSignedCertsBehavior.java:
private static ODataJerseyConsumer createOdataConsumer(final String odataServerUrl) {
Builder builder = ODataJerseyConsumer.newBuilder(odataServerUrl);
builder.setClientBehaviors(TimeoutBehavior.reduceTimeout());
return builder.build();
}
private enum TimeoutBehavior implements JerseyClientBehavior {
INSTANCE;
@Override
public ODataClientRequest transform(final ODataClientRequest request) {
return request;
}
@Override
public void modify(final ClientConfig clientConfig) {
Map<String, Object> properties = clientConfig.getProperties();
properties.put(ClientConfig.PROPERTY_CONNECT_TIMEOUT, 10 * 1000);
properties.put(ClientConfig.PROPERTY_READ_TIMEOUT, 10 * 1000);
}
@Override
public void modifyClientFilters(final Filterable filterable) {}
@Override
public void modifyWebResourceFilters(final Filterable filterable) {}
public static OClientBehavior reduceTimeout() {
return TimeoutBehavior.INSTANCE;
}
}
于 2013-02-09T11:13:40.797 回答