cxf構成方式によるログとhttpsリクエストの実装
5261 ワード
このブログでは、httpsとcxfのログ機能を構成する方法について説明します.
この部分は符号化方式でも可能ですが、コードが重複するという問題がありますので、構成方式の方が良いと思います
1、ログを開く機能
エンコーディングにより、ログを開く機能は次のとおりです.
プロファイルを使用することができます.
これでwebサービスリクエストと応答のログを打ち出すことができます
次のようになります.
情報: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:wolegequ 0
--------------------------------------
上の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:true call acknowledge() success
--------------------------------------
上のInbound Messageは、受信されたメッセージであり、クライアントにとって受信された応答である.サービス側にとって、受信したリクエストです.
IDはペアで表示され、1つのリクエストに応答する必要があります.
AddressはリクエストされたOutboundのみであり,送信されたアドレス,すなわちwebサービスのendpointを表す.
Headersはhttpリクエストヘッダまたはレスポンスヘッダです
Payloadはログの鍵であり、soap本文の内容です.
2.httpsリクエストの送信
符号化方式でも実現できる.
ファイルを構成することもできます.
コンフィギュレーション・ファイルを使用すると、重複コードを大幅に節約できます.
httpと証明書について、別のブログで紹介します
この部分は符号化方式でも可能ですが、コードが重複するという問題がありますので、構成方式の方が良いと思います
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サービスリクエストと応答のログを打ち出すことができます
次のようになります.
情報: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:
--------------------------------------
上の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:
--------------------------------------
上のInbound Messageは、受信されたメッセージであり、クライアントにとって受信された応答である.サービス側にとって、受信したリクエストです.
IDはペアで表示され、1つのリクエストに応答する必要があります.
AddressはリクエストされたOutboundのみであり,送信されたアドレス,すなわちwebサービスの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>
コンフィギュレーション・ファイルを使用すると、重複コードを大幅に節約できます.
httpと証明書について、別のブログで紹介します