这篇博客介绍一下怎么通过配置方式配置https和cxf的日志功能
这部分用编码方式也是可以实现的,但是就存在代码重复的问题,用配置方式会比较好
1、打开日志功能
用编码方式,打开日志功能是这样的:
<jaxws:client id="client" serviceClass="xxx.xxx.xxx" address="${webservice_address}" />
WebserviceInterface client = (WebserviceInterface)ApplicationContext.getBean("client");
Client proxy = ClientProxy.getClient(client);
proxy.getInInterceptors().add(new LoggingInInterceptor());
proxy.getOutInterceptors().add(new LoggingOutInterceptor());
可以用配置文件的方式来做:
<jaxws:client id="client" serviceClass="xxx.xxx.xxx" address="${webservice_address}">
<jaxws:outInterceptors>
<bean class="org.apache.cxf.interceptor.LoggingOutInterceptor" />
</jaxws:outInterceptors>
<jaxws:inInterceptors>
<bean class="org.apache.cxf.interceptor.LoggingInInterceptor" />
</jaxws:inInterceptors>
</jaxws:client>
这样就可以把web service请求和响应的日志打出来了
形如:
信息: Outbound Message
---------------------------
ID: 1
Address: https://www.remedy-dummy.com:443/remedy/webservice/RemedySA
Encoding: UTF-8
Content-Type: text/xml
Headers: {SOAPAction=["http://cz.o2.com/systems/integrationinfrastructure/CIP-B2B/CIP-B2B_ServiceAssuranceWorkForceClientManagement/1.0/acknowledge"], Accept=[*/*]}
Payload: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns2:AcknowledgeRequest xmlns="http://cz.o2.com/cip/svc/IntegrationMessage-2.0" xmlns:ns2="http://cz.o2.com/systems/integrationinfrastructure/CIP-B2B/CIP-B2B_ServiceAssuranceWorkForceClientManagement/1.0"><ns2:requestBody><ns2:messageType>wolegequ</ns2:messageType><ns2:correlationId>0</ns2:correlationId></ns2:requestBody></ns2:AcknowledgeRequest></soap:Body></soap:Envelope>
--------------------------------------
上面的Outbound Message,是发出去的消息,对于客户端来说,是发出去的请求;对于服务端来说,是发出去的响应
信息: Inbound Message
----------------------------
ID: 1
Encoding: UTF-8
Content-Type: text/xml;charset=UTF-8
Headers: {content-type=[text/xml;charset=UTF-8], Date=[Fri, 20 Apr 2012 15:25:11 GMT], Content-Length=[478], X-Powered-By=[Servlet 2.4; JBoss-4.2.3.GA (build: SVNTag=JBoss_4_2_3_GA date=200807181417)/JBossWeb-2.0], Server=[Apache-Coyote/1.1]}
Payload: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns2:AcknowledgeResponse xmlns="http://cz.o2.com/cip/svc/IntegrationMessage-2.0" xmlns:ns2="http://cz.o2.com/systems/integrationinfrastructure/CIP-B2B/CIP-B2B_ServiceAssuranceWorkForceClientManagement/1.0"><ns2:responseBody><ns2:status>true</ns2:status><ns2:errorDescription>call acknowledge() success</ns2:errorDescription></ns2:responseBody></ns2:AcknowledgeResponse></soap:Body></soap:Envelope>
--------------------------------------
上面的Inbound Message,是收到的消息,对于客户端来说,是收到的响应;对于服务端来说,是收到的请求
ID是成对出现的,一个请求必有一个响应
Address只有请求的Outbound才有,表示发送的地址,也就是web service的endpoint
Headers是http请求头或响应头
Payload是日志的关键,其中就是soap正文的内容
2、发送https请求
用编码方式也可以实现:
WebserviceInterface client = (WebserviceInterface) ApplicationContext
.getBean("client");
Client proxy = ClientProxy.getClient(client);
HTTPConduit conduit = (HTTPConduit) proxy.getConduit();
TLSClientParameters tlsParams = conduit.getTlsClientParameters();
tlsParams.setKeyManagers();
tlsParams.setTrustManagers();
tlsParams.setDisableCNCheck(true);
tlsParams.setSecureSocketProtocol("SSL");
conduit.setTlsClientParameters(tlsParams);
同样可以通过配置文件的方式来做:
<http:conduit name="*.http-conduit">
<http:tlsClientParameters disableCNCheck="true"
secureSocketProtocol="SSL">
<!-- 对方的证书 -->
<sec:trustManagers>
<sec:keyStore type="JKS" password="changeit"
file="trust.keystore" />
</sec:trustManagers>
<!-- 己方的证书 -->
<sec:keyManagers keyPassword="changeit">
<sec:keyStore type="JKS" password="changeit"
file="self.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>
用配置文件的方式,可以节省很多重复代码
关于https和证书的问题,在另外一篇博客里介绍
分享到:
相关推荐
在实际开发过程中,对于WebService的请求和响应信息进行日志记录是非常必要的。这有助于我们在出现问题时能够快速定位问题原因,并且对服务的整体性能监控也有很大帮助。CXF提供了丰富的API来实现这一功能。 #### ...
CXF提供了两种主要的方式来实现Web服务:JAX-WS(Java API for XML Web Services)和JAX-RS(Java API for RESTful Web Services)。JAX-WS用于创建SOAP服务,而JAX-RS则用于构建RESTful服务。在我们的例子中,可能...
在IT行业中,SpringBoot、WebService和cxf是三个非常重要的技术组件,它们分别代表了现代Java应用程序开发的基础、服务间通信的重要方式以及一种强大的服务框架。在这个主题中,我们将深入探讨如何在SpringBoot项目...
整合两者,我们可以利用Spring配置来创建和管理CXF服务,使服务的生命周期与Spring容器同步,这样便于测试和维护。 1. **服务端实现**: - 创建服务接口:首先定义RESTful服务的Java接口,通常这些接口会使用JAX-...
在IT行业中,Spring框架和Apache CXF是两个非常重要的组件,它们在企业级应用开发中扮演着关键角色。...在实际开发中,还需要注意日志配置、异常处理、性能优化等多方面的问题,以确保服务的稳定性和效率。
我们将重点讨论基本认证和WS-Security这两种常见的实现方式。 1. **基本认证**: 基本认证是最简单的HTTP身份验证形式,它涉及将用户名和密码编码为Base64字符串并在HTTP请求头中传递。在CXF中,可以通过配置...
- 创建服务端点:使用CXF的`JAXWSServerFactoryBean`或`JAXRSServerFactoryBean`创建服务端点,配置服务地址和服务实现类。 - 启动服务:运行服务端点,使服务对外可用。 3. **调用Web服务**: 调用CXF发布的Web...
可以通过Spring的依赖注入(DI)来管理和控制服务实例,也可以利用Spring的AOP(面向切面编程)实现事务、日志等功能。 **六、CXF的RESTful服务** CXF不仅支持SOAP服务,也支持RESTful服务。通过JAX-RS注解,可以...
CXF支持多种编程模型,如JAX-WS和JAX-RS,这使得开发者可以方便地选择适合他们的服务实现方式。 ### 2. JAX-WS与JAX-RS - **JAX-WS**: Java API for XML Web Services,用于创建符合SOAP标准的Web服务。开发者可以...
CXF支持基于JAX-WS的标准API来创建SOAP服务,开发者可以使用注解或者XML配置文件定义服务接口和服务实现。 #### 2.2 RESTful Web服务 REST是一种轻量级的架构风格,常用于构建Web API。CXF提供JAX-RS(Java API for...
本实例将介绍如何将Spring与CXF集成,以实现Webservice的发布和调用,并涉及拦截器的配置。 首先,我们来看`spring与cxf集成配置小实例`的服务器端配置。在`cxf_test_spring_server.zip`中,你将会找到服务器端的...
在整合过程中,通常会创建一个Spring配置文件,用于声明CXF的服务器端点、服务实现和数据绑定。然后,Spring会根据配置加载并管理这些组件。这样,我们就可以利用Spring的强大功能,如事务管理、安全控制等,同时...
接下来,我们需要创建服务接口和实现。服务接口通常会遵循SOAP或RESTful约定,如下所示: ```java import javax.jws.WebService; @WebService public interface MyWebService { String doSomething(String input)...
总之,处理CXF中的编码问题需要对字符编码有深入的理解,并且熟悉CXF框架的配置和API。通过正确配置和使用各种工具,可以有效地避免和解决编码相关的问题,确保服务的正常运行和数据的准确传递。
3. **拦截器和插件**:CXF允许自定义拦截器和插件,扩展服务行为,如添加日志、性能监控、错误处理等功能。 4. **RESTful支持**:除了SOAP,CXF也支持RESTful风格的服务,通过JAX-RS(Java API for RESTful Web ...
同时,通过CXF的日志配置,可以查看详细的请求和响应XML,帮助定位问题。 6. **优化与性能** 对于大规模使用的情况,可以考虑使用CXF的缓存机制,减少重复的WSDL解析和Java类生成。此外,还可以通过调整线程池...
6. **调试工具**:CXF提供了强大的调试工具,如SOAP消息追踪和日志记录,帮助开发者调试和优化服务。 7. **国际化支持**:CXF支持多语言环境,能够处理不同地区的字符编码问题。 8. **插件体系**:CXF拥有丰富的...
4. **创建服务**:定义你的服务接口和实现。CXF提供了多种方式来创建服务,如JAX-WS(Java API for XML Web Services)或JAX-RS(Java API for RESTful Web Services)。 5. **配置CXF**:在应用的配置文件(如...
对于调试,CXF提供了强大的SOAP消息追踪和日志记录功能,帮助开发者排查问题。 **RESTful服务** 除了传统的SOAP服务,CXF也支持RESTful风格的服务。使用CXF,开发者可以轻松地创建符合REST原则的HTTP服务,支持JSON...
4. **服务创建**:掌握使用CXF的注解(如`@WebService`、`@WebMethod`等)来定义服务接口和实现。 5. **客户端生成**:学习如何使用CXF的工具自动生成客户端代码,以便于调用服务。 6. **安全与认证**:了解CXF...