`

cxf配置http:conduit

阅读更多
本次项目要通过https方式,调用外部的web service,所以在cxf的配置文件里进行配置如下:
<http:conduit name="*.http-conduit">

		<http:tlsClientParameters disableCNCheck="true"
			secureSocketProtocol="SSL">

			<!-- 对方的证书 -->
			<sec:trustManagers>
				<sec:keyStore type="JKS" password="changeit"
					file="/opt/inoc/wfm/certificates/remedy.keystore" />
			</sec:trustManagers>

			<!-- 己方的证书 -->
			<sec:keyManagers keyPassword="changeit">
				<sec:keyStore type="JKS" password="changeit"
					file="/opt/inoc/wfm/certificates/wfm.keystore" />
			</sec:keyManagers>

			<sec:cipherSuitesFilter>
				<sec:include>.*_EXPORT_.*</sec:include>
				<sec:include>.*_EXPORT1024_.*</sec:include>
				<sec:include>.*_WITH_DES_.*</sec:include>
				<sec:include>.*_WITH_NULL_.*</sec:include>
				<sec:exclude>.*_DH_anon_.*</sec:exclude>
			</sec:cipherSuitesFilter>

		</http:tlsClientParameters>

	</http:conduit>

结果发现影响了系统原有的web service客户端的功能

查看日志,异常信息如下:

2012-05-07 15:34:59,407 ERROR [STDERR] javax.xml.ws.soap.SOAPFaultException: Could not send Message.
2012-05-07 15:34:59,408 ERROR [STDERR] at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:138)
2012-05-07 15:34:59,409 ERROR [STDERR] at $Proxy146.invoke(Unknown Source)
2012-05-07 15:34:59,409 ERROR [STDERR] at com.huawei.nsm.framework.service.engine.impl.WsInvoker.invoke(WsInvoker.java:104)
2012-05-07 15:34:59,410 ERROR [STDERR] at com.huawei.nsm.framework.service.engine.ServiceEngine.invoke(ServiceEngine.java:69)
2012-05-07 15:34:59,411 ERROR [STDERR] at com.huawei.nsm.framework.service.ServiceAccessor.invoke(ServiceAccessor.java:49)
2012-05-07 15:34:59,412 ERROR [STDERR] at com.huawei.wfm.workforce.task.sch.service.calculatepriority.CalculatePriorityService.calculate(CalculatePriorityService.java:57)
2012-05-07 15:34:59,412 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
2012-05-07 15:34:59,413 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
2012-05-07 15:34:59,414 ERROR [STDERR] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
2012-05-07 15:34:59,415 ERROR [STDERR] at java.lang.reflect.Method.invoke(Method.java:597)
2012-05-07 15:34:59,415 ERROR [STDERR] at org.apache.commons.beanutils.MethodUtils.invokeMethod(MethodUtils.java:216)
2012-05-07 15:34:59,416 ERROR [STDERR] at org.apache.commons.beanutils.MethodUtils.invokeMethod(MethodUtils.java:162)
2012-05-07 15:34:59,417 ERROR [STDERR] at com.huawei.nsm.framework.utils.ClassUtil.invokeMethod(ClassUtil.java:45)
2012-05-07 15:34:59,418 ERROR [STDERR] at com.huawei.nsm.datasource.service.impl.DatasourceSaveServiceImpl.initSchedulePriority(DatasourceSaveServiceImpl.java:917)
2012-05-07 15:34:59,419 ERROR [STDERR] at com.huawei.nsm.workflow.service.AfterTicketSubmitedAsyncService$AfterTicketSubmitedAsyncRunnable.initSchedulePriority(AfterTicketSubmitedAsyncService.java:267)
2012-05-07 15:34:59,419 ERROR [STDERR] at com.huawei.nsm.workflow.service.AfterTicketSubmitedAsyncService$AfterTicketSubmitedAsyncRunnable.run(AfterTicketSubmitedAsyncService.java:183)
2012-05-07 15:34:59,420 ERROR [STDERR] at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
2012-05-07 15:34:59,421 ERROR [STDERR] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
2012-05-07 15:34:59,422 ERROR [STDERR] at java.lang.Thread.run(Thread.java:662)

2012-05-07 15:34:59,422 ERROR [STDERR] Caused by: org.apache.cxf.interceptor.Fault: Could not send Message.
2012-05-07 15:34:59,423 ERROR [STDERR] at org.apache.cxf.interceptor.MessageSenderInterceptor.handleMessage(MessageSenderInterceptor.java:48)
2012-05-07 15:34:59,424 ERROR [STDERR] at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:226)
2012-05-07 15:34:59,425 ERROR [STDERR] at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:449)
2012-05-07 15:34:59,426 ERROR [STDERR] at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:279)
2012-05-07 15:34:59,426 ERROR [STDERR] at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:231)
2012-05-07 15:34:59,427 ERROR [STDERR] at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:73)
2012-05-07 15:34:59,428 ERROR [STDERR] at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:117)
2012-05-07 15:34:59,428 ERROR [STDERR] ... 18 more

2012-05-07 15:34:59,429 ERROR [STDERR] Caused by: java.io.IOException: Illegal Protocol http for HTTPS URLConnection Factory.
2012-05-07 15:34:59,430 ERROR [STDERR] at org.apache.cxf.transport.https.HttpsURLConnectionFactory.createConnection(HttpsURLConnectionFactory.java:126)
2012-05-07 15:34:59,431 ERROR [STDERR] at org.apache.cxf.transport.http.HTTPConduit.prepare(HTTPConduit.java:484)
2012-05-07 15:34:59,431 ERROR [STDERR] at org.apache.cxf.interceptor.MessageSenderInterceptor.handleMessage(MessageSenderInterceptor.java:46)
2012-05-07 15:34:59,432 ERROR [STDERR] ... 24 more

原来系统原有的web service客户端,走的http协议,但是配置文件里配置了
<http:conduit name="*.http-conduit">

以上配置会对所有的cxf客户端都生效,所以报异常

将这段配置改成:
<http:conduit name="https://10.78.8.172:443/.*">

仅针对目标https地址的web service客户端进行配置,对原有的web service客户端就不会造成影响了

总结:

1、<http:conduit>标签是对cxf的客户端,即<jaxws:client>产生影响,对<jaxws:endpoint>没有影响

2、<http:conduit name="*.http-conduit">会对所有的cxf客户端都生效,可以通过name属性,来指定生效范围
分享到:
评论

相关推荐

    2.CXF安全访问之Http Basic Auth(一)

    &lt;http:conduit name="{http://cxf.apache.org/transports/http/configuration}*.http-conduit"&gt; &lt;http:client Authorization="Basic realm='My Realm'"/&gt; &lt;/http:conduit&gt; ``` 这段配置将所有CXF HTTP服务的请求都...

    CXF实现SSL安全验证

    - `&lt;http:conduit&gt;` 定义了一个 HTTP 连接器,其中 `&lt;http:tlsClientParameters&gt;` 设置了 TLS 客户端参数,包括禁用 CN 检查以及信任管理器的配置。 - `&lt;jaxws:client&gt;` 定义了一个 Web Service 客户端,指定了服务...

    cxf使用中编码问题

    - **配置CXF组件**:在CXF的配置文件(如cxf.xml或Spring配置文件)中,可以设置HTTP绑定的编码。例如,对于HTTP传输,可以使用`&lt;http-conf:conduit&gt;`标签来指定`charset_encoding`属性。 - **处理XML编码**:确保...

    4.CXF安全访问之单向SSL或者双向SSL(三)

    例如,在Spring配置文件中,可以定义`&lt;http-conf:conduit&gt;`元素来配置SSL参数。编程方式则是通过`JAXWSClientFactoryBean`的属性设置。 `ws-client`这个文件可能包含了一个示例CXF客户端的配置或者代码,用于演示...

    cxf2.7.18编码GBK的不可映射字符问题

    - 配置CXF服务端的字符编码:在CXF服务端,可以通过设置消息总线(Bus)的默认字符集来解决这个问题。例如,可以在Spring配置文件中添加如下代码: ```xml &lt;bean id="cxf" class="org.apache.cxf.bus.spring....

    cxf客户端出现GBK编码问题解决jar.rar

    2. **客户端配置**:在CXF客户端,你需要配置HTTPConduit来指定GBK编码。可以通过以下方式: ```java HTTPConduit conduit = (HTTPConduit) client.getConduit(); conduit.getClient().setCharsetEncoding("GBK")...

    CXF_WebService_开发指南、技术文档

    #### 二、CXF环境搭建与配置 CXF的安装非常简单,只需要下载官方提供的jar包并将其加入到项目中即可。CXF官方网站为[http://cxf.apache.org/](http://cxf.apache.org/),其中提供了详细的文档和支持。 **下载地址*...

Global site tag (gtag.js) - Google Analytics