Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring integration http出站网关不转换法语字符_Spring Integration - Fatal编程技术网

Spring integration http出站网关不转换法语字符

Spring integration http出站网关不转换法语字符,spring-integration,Spring Integration,我的spring integration http出站网关是这样的。我使用我自己的rest模板与ssl连接池。我得到了500个法语字符,因此我将UTF-8和支持的媒体类型注入到消息转换器。现在,在注入之前,我注入了我自己的请求工厂和默认rest模板然后它开始接受法语字符。现在,当我改为使用自己的rest模板时,它不接受消息转换器,当我尝试将其注入rest模板时,我得到了这个异常 Cause is - Could not write request: no suitable HttpMessage

我的spring integration http出站网关是这样的。我使用我自己的rest模板与ssl连接池。我得到了500个法语字符,因此我将UTF-8和支持的媒体类型注入到消息转换器。现在,在注入之前,我注入了我自己的请求工厂和默认rest模板然后它开始接受法语字符。现在,当我改为使用自己的rest模板时,它不接受消息转换器,当我尝试将其注入rest模板时,我得到了这个异常

Cause is - Could not write request: no suitable HttpMessageConverter found for request type [java.lang.String] and content type [text/plain;charset=UTF-8]
这对所有的要求都有效

<int-http:outbound-gateway id='batch-http'  header-mapper="headerMapper"
                           request-channel='toHttp'
                            request-factory="requestFactory"
                             message-converters="batchHTTPConverter"
                             url-expression="payload.contains('${filterAttribute}') ? '${url1}' : '${url2}'"  http-method="${httpMethod}"
                           expected-response-type='java.lang.String' charset='${charset}'
                           reply-timeout='${replyTimeout}' reply-channel='output'>
</int-http:outbound-gateway>

 <beans:bean  id="batchHTTPConverter" class="org.springframework.http.converter.StringHttpMessageConverter">
    <beans:constructor-arg index="0"  value="UTF-8"/>
    <beans:property name="supportedMediaTypes" value = "application/json;UTF-8" />

</beans:bean>


<beans:bean id="requestFactory" class="test.batch.httpclient.CustomClientHttpRequestFactory">       
 <beans:constructor-arg ref="verifier"/>
  </beans:bean>

 <beans:bean id="verifier"
      class="batch.NullHostnameVerifier">

</beans:bean>

这不适用于法语或任何输入请求


我的rest模板

public class BatchRestTemplate  extends RestTemplate{

     private static final Logger LOGGER = LoggerFactory
                .getLogger(BatchRestTemplate.class);
     private StringHttpMessageConverter batchHTTPConverter;



    public StringHttpMessageConverter getBatchHTTPConverter() {
        return batchHTTPConverter;
    }

    public void setBatchHTTPConverter(StringHttpMessageConverter batchHTTPConverter) {
        this.batchHTTPConverter = batchHTTPConverter;
    }

    public BatchRestTemplate()  {
          super(createBatchHttpRequestFactory());

        List<HttpMessageConverter<?>> messageConverters= new ArrayList<HttpMessageConverter<?>>();
        messageConverters.addAll(getMessageConverters());
        messageConverters.add(getBatchHTTPConverter());
        super.setMessageConverters(messageConverters);

    }

    private static ClientHttpRequestFactory createBatchHttpRequestFactory()  {

            CloseableHttpClient httpClient;
            HttpComponentsClientHttpRequestFactory httpRequestFactory;
            final int timeout = 3000;
            SSLConnectionSocketFactory socketFactory;
            try {
                socketFactory = new SSLConnectionSocketFactory(
                        SSLContext.getDefault(),
                        new String[] {"TLSv1"},
                        null,
                        SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);

            Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create()
                    .register("http", PlainConnectionSocketFactory.getSocketFactory())
                    .register("https", socketFactory)
                    .build();
            PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(socketFactoryRegistry);
            cm.setMaxTotal(700);
            cm.setDefaultMaxPerRoute(300);
            cm.closeExpiredConnections();


            RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(timeout)
                    .setConnectionRequestTimeout(timeout).setSocketTimeout(timeout).build();



            httpClient = HttpClients.custom().setDefaultRequestConfig(requestConfig).setConnectionManager(cm).build();


            httpRequestFactory = new HttpComponentsClientHttpRequestFactory(httpClient);

            return httpRequestFactory;

            }

            catch (Exception e) {
                 LOGGER.debug("error exception", e);


    }
            return null; 
    }


}
公共类BatchRestTemplate扩展了RestTemplate{
专用静态最终记录器记录器=记录器工厂
.getLogger(BatchRestTemplate.class);
私有StringHttpMessageConverter批处理HttpConverter;
public StringHttpMessageConverter getBatchHTTPConverter(){
返回批次HttpConverter;
}
public void setBatchHTTPConverter(StringHttpMessageConverter batchHTTPConverter){
this.batchHTTPConverter=batchHTTPConverter;
}
公共BatchRestTemplate(){
super(createBatchHttpRequestFactory());
列表>();
addAll(getMessageConverters());
添加(getBatchHTTPConverter());
super.setMessageConverters(messageConverters);
}
私有静态ClientHttpRequestFactory createBatchHttpRequestFactory(){
可关闭的httpClient httpClient;
Http组件客户端Http请求工厂Http请求工厂;
最终int超时=3000;
SSLConnectionSocketFactory socketFactory;
试一试{
socketFactory=新SSLConnectionSocketFactory(
SSLContext.getDefault(),
新字符串[]{“TLSv1”},
无效的
SSLConnectionSocketFactory。允许\u所有\u主机名\u验证程序);
注册表socketFactoryRegistry=RegistryBuilder.create()
.register(“http”,PlainConnectionSocketFactory.getSocketFactory())
.注册(“https”,socketFactory)
.build();
PoolightPClientConnectionManager cm=新的PoolightPClientConnectionManager(socketFactoryRegistry);
cm.setMaxTotal(700);
cm.setDefaultMaxPerRoute(300);
cm.closeExpiredConnections();
RequestConfig RequestConfig=RequestConfig.custom().setConnectTimeout(超时)
.setConnectionRequestTimeout(超时).setSocketTimeout(超时).build();
httpClient=HttpClients.custom().setDefaultRequestConfig(requestConfig).setConnectionManager(cm.build();
httpRequestFactory=新的HttpComponents客户端httpRequestFactory(httpClient);
返回httpRequestFactory;
}
捕获(例外e){
LOGGER.debug(“错误异常”,e);
}
返回null;
}
}

您自己的代码中有一个bug:

public BatchRestTemplate()  {
    ..........
    messageConverters.add(getBatchHTTPConverter());
    ..........

}
但是。。。还没有
batchHTTPConverter
!。只有在
setBatchHTTPConverter()
之后,它才会出现在那里

换句话说,您不能使用构造函数中的属性,因为setter是在对象实例化之后调用的

public BatchRestTemplate()  {
    ..........
    messageConverters.add(getBatchHTTPConverter());
    ..........

}