Spring統合CXf WebServiceまとめ


Webサービスは、プラットフォームが独立した低結合で、プログラム可能なWebベースのアプリケーションから構成され、オープンXML(標準的な汎用タグ言語の下のサブセット)標準を使用して、分散型の相互運用アプリケーションを開発するために、これらのアプリケーションを記述、公開、発見、協調、構成することができます.Java WebServiceフレームワークについては、主にAXIS、XFire、CXF、そしてJavaが持参したJAX-WS(JDK 6以上の環境が必要)があります.
        SOAP RPCの動作原理:WebクライアントとWebサーバの間でHTMLデータが伝送される点で、Webのリクエスト/応答方式と同様です.SOAP RPCモードでは、SOAPクライアント(プログラム)とSOAPサービスとの間で、SOAP仕様に適合したXMLデータが伝送される.
Webサービスでは、次の2つのテクノロジーが使用されます.
        XML(標準汎用タグ言語の下のサブセット):XMLはweb上で構造化データを転送する偉大な方法であり、Webサービスは信頼できる自動的な方法でデータを操作しなければならない.HTML(標準汎用タグ言語の下のアプリケーション)は要求を満たさないが、XMLはwebサービスが非常に便利にデータを処理することができ、その内容と表示の分離は非常に理想的である.
        SOAP:SOAPはXMLメッセージを使用してリモートメソッドを呼び出し、WebサービスはHTTPプロトコルのpostとgetメソッドを通じてリモートマシンとインタラクティブになり、SOAPはより丈夫で柔軟で使いやすい.
UDDIおよびWSDLのような他の技術は、XMLおよびSOAP技術と密接に結合してサービス実装に使用される.
1、AXISはapacheソフトウェア組織のSOAP規範の実現である.
SOAPクライアント-->AXIS API-RPCリクエスト->AXIS Webアプリケーション(SOAPサービス)は、Tomcatコンテナに格納できます.
RPCベースのSOAPサービス手順をAXISで作成し、配布します.
a、    SOAP   java ;
b、  SOAP         ;
c、  AXIS AdminClient      SOAP  ;
  web    web  ———    ———>   web    AXIS  (SOAP  )

2、webサービスオープンソースフレームワークXFire
XFireは次世代java soapオープンソースフレームワークです.XFireは便利なAPIを提供し、これらのAPIを使用してサービス(SOA)向けのプログラムを開発することができる.XFireはcodehausがウェブサービスオープンソースフレームワークプロジェクトを組織し、公式ホームページはhttp://xfire.codehaus.org.
主な機能は次のとおりです.
a、       webservice  ,  SOAP、WSDL 。
b、  JSR181,    JDK5      web  。
c、    HTTP、JMS       web  。
d、  spring、Pico     。
e、             。

XFireとspring統合(XFireはspringコンテナで動作)XFireはspringの統合を提供し、spring beanを構成してwebサービスを提供することができます.
a、  spring bean web.xml     spring   ,   XFire bean       spring   。
b、  XFire Servlet spring   ,   org.codehaus.xfire.spring.XFireSpringServlet     web   servlet  。
c、  web  Bean   spring    bean,  XFire   spring   ,       servicers.xml  ,   applicationContext.xml  bean。

Webサービスのセキュリティ説明
        デジタル署名(signature)により秘密鍵を用いてメッセージの要約を暗号化するサービスセキュリティメカニズムを提供し、メッセージが伝送中に改ざんされない限り、受信側はデジタル署名検証を行う際に成功する可能性がある.デジタル署名は、完全性と信頼性のないセキュリティの問題を解決しますが、メッセージ・ボディは明文的に送信され、伝送中にメッセージ・ボディの内容が監視される可能性があります.暗号化(encryption)が必要です.
3、CXFとSpringの完璧な統合方案
(1)CxfDemoのようなWebプロジェクトを新規作成し、pom.xmlに依存コードを以下のように追加する.
<dependency>
	<groupId>org.apache.cxf</groupId>
	<artifactId>cxf-rt-frontend-jaxws</artifactId>
	<version>2.6.2</version>
</dependency>
<dependency>
	<groupId>org.apache.cxf</groupId>
	<artifactId>cxf-rt-transports-http</artifactId>
	<version>2.6.2</version>
</dependency>

インタフェースを定義し、@webservice注記を使用します.コードは次のとおりです.
@WebService(name="HelloService", targetNamespace="http://www.yoodb.com")  
public interface HelloService {   

    @WebMethod
    @WebResult(name = "result")
    public String sayHello(@WebParam(name = "s")String s);   

}

実装クラス,@WebService注記はパブリッシュするウェブサービスを表し,endpointInterfaceパラメータの値はそのサービスクラスに対応するインタフェースである.
@WebService(name="HelloService", targetNamespace="http://www.yoodb.com",endpointInterface = "com.yoodb.webservice.HelloService")   
public class HelloServiceImpl implements HelloService{   

 public String  sayHello(String s) {   
        System.out.println( "====>>>>" + s);   
        return "sucess";   

    }   
}

アプリケーションcontext-springファイルを構成します.具体的なコードは次のとおりです.
<beans xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xmlns:jaxws="http://cxf.apache.org/jaxws"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans  
    http://www.springframework.org/schema/beans/spring-beans.xsd  http://cxf.apache.org/jaxws http://cxf.apache.org/schema/jaxws.xsd">  
    
    <import resource="classpath:META-INF/cxf/cxf.xml" />  
    <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />  
    <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />  
    <bean id="helloServiceImpl" class="com.yoodb.webservice.HelloServiceImpl" />
    <jaxws:endpoint id="hello" implementor="#helloServiceImpl" address="/Hello" />          

</beans>

implementorパラメータ:具体的な実装クラスを示す;addressパラメータ:このwebserviceの相対アドレスを指定します.
Web.xmlファイルには、次の構成が追加されます.具体的なコードは次のとおりです.
<context-param>  
    <param-name>contextConfigLocation</param-name>  
     <param-value>classpath:/applicationcontext-spring.xml</param-value><!--         spring     -->
</context-param>   

<listener>  
   <listener-class>  
          org.springframework.web.context.ContextLoaderListener  
   </listener-class>  
</listener>  

<servlet>  
    <servlet-name>CXFServlet</servlet-name>  
    <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
    <load-on-startup>1</load-on-startup>  
</servlet>  

<servlet-mapping> 
    <servlet-name>CXFServlet</servlet-name>  
    <url-pattern>/*</url-pattern>  
</servlet-mapping>

Webサーバに配備し、Webサービスプロジェクトをパブリッシュし、入力http://localhost:8080/CxfDemo/Hello?wsdl
(2)クライアント呼び出しWebServiceサービステストの作成
//  WebService       
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
//  WebService  
factory.setServiceClass(HelloService.class);
//  WebService  
factory.setAddress(http://localhost:8080/CxfDemo/Hello);
HelloService hello = (HelloService)factory.create();
//  webservice    
hello.sayHello("hello");//  sucess

インタフェースを定義します.コードは次のとおりです.
@WebService(name="HelloService", targetNamespace="http://www.yoodb.com")  
public interface HelloService {   

    @WebMethod
    @WebResult(name = "result")   
    public String sayHello(@WebParam(name = "s")String s);   

}

アプリケーションcontext-springファイルを構成します.具体的なコードは次のとおりです.
<beans xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xmlns:jaxws="http://cxf.apache.org/jaxws"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans  
    http://www.springframework.org/schema/beans/spring-beans.xsd  http://cxf.apache.org/jaxws http://cxf.apache.org/schema/jaxws.xsd"> 
    <import resource="classpath:META-INF/cxf/cxf.xml" />  
    <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />  
    <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />  
    <bean id="helloService" class="com.yoodb.webservice.HelloService" factory-bean="helloClientFactory" factory-method="create"/>
    <bean id="helloClientFactory" class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
            <property name="serviceClass" value="com.yoodb.webservice.HelloService" />
            <property name="address" value="http://localhost:8080/CxfDemo/Hello" />
    </bean>
</beans>

Actionメソッドで@Resource注記を参照します.コードは次のとおりです.
@Resource(name="helloService")
private HelloService helloService;

このHelloServiceのメソッドをactionで呼び出すと、データが取得されます.