Configuração de tempo limite para webservices de primavera com RestTemplate

Eu gostaria de configurar um tempo limite no lado do cliente para serviços web de mola usando RestTemplate. Eu tentei a seguinte configuração:

             

Mas eu tenho um NoClassDefFoundError quando eu inicio meu tomcat:

 06 févr. 2012 10:43:43,113 [ERROR,ContextLoader] Context initialization failed java.lang.NoClassDefFoundError: org/apache/commons/httpclient/HttpMethodBase 

No entanto, incluí commons-httpclient no meu pom.xml:

   commons-httpclient commons-httpclient 3.1 </dependency 

Alguma idéia de como eu poderia fazer / consertar isso?

Desde já, obrigado !

Snicolas responder quase funcionou para mim, só tive que mudar o casting Classe:

 RestTemplate restTemplate = new RestTemplate(); ((SimpleClientHttpRequestFactory)restTemplate.getRequestFactory()).setReadTimeout(1000*30); 

Além disso, você pode definir o tempo limite da conexão:

 ((SimpleClientHttpRequestFactory)restTemplate.getRequestFactory()).setConnectTimeout(1000*30); 

Isso funcionou para mim

 ( (HttpComponentsClientHttpRequestFactory) getRestTemplate().getRequestFactory() ).setReadTimeout( 120 * 1000 ); 

Eu usei na versão android do modelo de descanso android primavera.


O valor padrão é 60 * 1000

Eu tive o mesmo problema e primeiro tentei corrigi-lo, modificando a configuração do Spring, mas minhas tentativas foram todas sem sucesso.

Finalmente, eu o consertei parcialmente definindo as seguintes propriedades do sistema JVM: sun.net.client.defaultConnectTimeout

sun.net.client.defaultReadTimeout

(siga este link para mais detalhes sobre eles: http://docs.oracle.com/javase/1.4.2/docs/guide/net/properties.html )

Primeiro, injetar meus valores personalizados para “Tempo limite de conexão” e “Tempo limite de leitura” armazenados em um arquivo de propriedades, usando um bean de configuração “feito em casa”:

   ...   ...  

Em seguida, defino as propriedades do sistema da JVM usando o método System.setProperty (…) assim:

  System.setProperty(propName, value); 

Eu tenho apenas um problema: o valor definido em sun.net.client.defaultConnectTimeout não parece ser levado em consideração. Depois de ter feito mais alguns testes, percebi que isso acontece quando eu tento alcançar meus hosts de destino através de um servidor proxy (Squid no meu caso).

No entanto, há um inconveniente para usar esse método de configuração: as configurações de tempo limite serão usadas para todas as outras solicitações

Saudações

Eu tive a mesma necessidade de poder definir o tempo limite para o consumo de serviços Web, e resolvi-o apenas com um outro conf de primavera.

Primeiro com a configuração abaixo, eu tive o mesmo problema que @jsebFrank (java.lang.NoClassDefFoundError: org / apache / commons / httpclient / HttpMethodBase)

          

Mas como o Spring support explica aqui (na seção 16.5 Timeout Handling), você pode usar o factory de solicitação SimpleClientHttpRequestFactory (que é o padrão para Spring restTemplate).

Usando, não tenho mais problema: