2014-01-14 25 views
0

我正在使用RestTemplate爲了發送一個post請求。事情是這樣的:java.net.SocketException:與RestTemplate無效的參數

restTemplate.postForObject(url, fetchImageDataRequest, SimpleImageHolder[].class); 

當我創建restTemplate這樣的:

restTemplate = new RestTemplate(); 
MappingJacksonHttpMessageConverter converter = new MappingJacksonHttpMessageConverter(); 
restTemplate.getMessageConverters().add(converter); 

,一切工作正常。但是,當我使用在spring.xml創建和定義如下RestTemplate

<bean id="reHttpConnectionManager" class="org.apache.commons.httpclient.MultiThreadedHttpConnectionManager"> 
    <property name="params"> 
    <bean class="org.apache.commons.httpclient.params.HttpConnectionManagerParams"> 
     <property name="soTimeout"     value="30000"/> 
     <property name="connectionTimeout"   value="30000"/> 
     <property name="maxTotalConnections"   value="300"/> 
     <property name="defaultMaxConnectionsPerHost" value="50"/> 
    </bean> 
    </property> 
</bean> 

<bean id="reRequestFactory" class="org.springframework.http.client.CommonsClientHttpRequestFactory"> 
    <property name="readTimeout" value="3000" /> 
    <constructor-arg> 
    <bean id="httpClient" class="org.apache.commons.httpclient.HttpClient"> 
     <constructor-arg> 
     <bean class="org.apache.commons.httpclient.params.HttpClientParams" /> 
     </constructor-arg> 
     <property name="httpConnectionManager" ref="reHttpConnectionManager" /> 
     <property name="state"> 
     <bean class="org.apache.commons.httpclient.HttpState" /> 
     </property> 
    </bean> 
    </constructor-arg> 
</bean> 

<bean id="restTemplate" class="org.springframework.web.client.RestTemplate"> 
    <constructor-arg ref="reRequestFactory" /> 
</bean> 

我得到一個java.net.SocketException: Invalid argument例外。試圖解決這個問題。

全stacke跟蹤:

org.springframework.web.client.ResourceAccessException: I/O error: Invalid argument; nested exception is java.net.SocketException: Invalid argument 
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:453) 
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:401) 
at org.springframework.web.client.RestTemplate.postForObject(RestTemplate.java:279) 
+0

請發佈完整的堆棧跟蹤。 –

+0

@SotiriosDelimanolis - 添加。謝謝! – Avi

回答

0

我找不到什麼問題了,但我只是刪除從bean httpClient的構造函數的HttpParams豆並完全去掉了HttpState和現在的作品。新的XML如下所示:

<bean id="reHttpConnectionManager" class="org.apache.commons.httpclient.MultiThreadedHttpConnectionManager"> 
    <property name="params"> 
    <bean class="org.apache.commons.httpclient.params.HttpConnectionManagerParams"> 
     <property name="soTimeout"     value="30000"/> 
     <property name="connectionTimeout"   value="30000"/> 
     <property name="maxTotalConnections"   value="300"/> 
     <property name="defaultMaxConnectionsPerHost" value="50"/> 
    </bean> 
    </property> 
</bean> 

<bean id="reRequestFactory" class="org.springframework.http.client.CommonsClientHttpRequestFactory"> 
    <property name="readTimeout" value="3000" /> 
    <constructor-arg> 
    <bean id="httpClient" class="org.apache.commons.httpclient.HttpClient"> 
     <property name="httpConnectionManager" ref="reHttpConnectionManager" /> 
    </bean> 
    </constructor-arg> 
</bean> 

<bean id="restTemplate" class="org.springframework.web.client.RestTemplate"> 
    <constructor-arg ref="reRequestFactory" /> 
</bean>