1. 程式人生 > >SSM 架構整合WebService 服務

SSM 架構整合WebService 服務

專案需要,需要釋出webService 介面供其他系統呼叫
需求背景:需要釋出的介面,提供給 ESB ,ESB 進行處理後(即標準化後)釋出wsdl 檔案,我通過CXF 根據 wsdl 檔案 生成 javaBean

專案環境:jdk1.6 tomcat7 ssm 架構

一:當然是引入jar 包(我這裡使用的事 apache cxf )
下載地址 :http://archive.apache.org/dist/cxf/
我下的是:2.6.1 版本的zip 包,解壓出來後,複製 lib 包裡的jar ,放入專案中,此處筆者

這裡寫圖片描述
下方是放入專案中的jar ,由於本專案中,已經存在了slf4j 的包,因此
這裡寫圖片描述


我只放了下面這些,大家根據實際增減自己的包
這裡寫圖片描述

二:接下來就是,寫介面檔案和介面的實現檔案
我這裡的介面 為ESB 釋出的wsdl 檔案 cxf 生成的 介面
在此不贅述

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;

import com.grand.webservice.entity.FdmsReqSysHead;
import com.grand.webservice.entity.FdmsRspSysHead;

@WebService
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE) public interface Fdms2ESBInterfaces { /** * 系統測試 介面 */ @WebResult(name = "RspFdmsTest", partName = "RspFdmsTest") @WebMethod public FdmsRspSysHead fdmsTest( @WebParam(partName = "ReqFdmsTest", name = "ReqFdmsTest"
) FdmsReqSysHead fdmsReqSysHead); }

三:編寫實現類

@WebService(endpointInterface="com.grand.webservice.service.Fdms2ESBInterfaces")
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
public class FdmsWebServiceImpl implements Fdms2ESBInterfaces {

    @Override
    public FdmsRspSysHead fdmsTest(FdmsReqSysHead fdmsReqSysHead) {
        // TODO Auto-generated method stub
        FdmsRspSysHead fdmsRspSysHead = new FdmsRspSysHead();
        fdmsRspSysHead.setRetCode("");
        fdmsRspSysHead.setRetMsg("卡號是:"+fdmsReqSysHead.getCardNo());
        return fdmsRspSysHead;
    }

四:配置
在Spring配置檔案,預設為applicationContext.xml中增加下列程式碼,需要注意的是:請加入xsd資訊 注意標註的字

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:cache="http://www.springframework.org/schema/cache"
    //此處要新增下面兩行
    xmlns:jaxws="http://cxf.apache.org/jaxws"
    xmlns:soap="http://cxf.apache.org/bindings/soap"
    //此處要新增上面兩行
    xsi:schemaLocation="http://www.springframework.org/schema/beans   
    http://www.springframework.org/schema/beans/spring-beans-3.1.xsd  
    http://www.springframework.org/schema/context   
    http://www.springframework.org/schema/context/spring-context-3.1.xsd  
    http://www.springframework.org/schema/aop   
    http://www.springframework.org/schema/aop/spring-aop-3.1.xsd  
    http://www.springframework.org/schema/tx   
    http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
    //此處要新增下面兩行
    http://cxf.apache.org/jaxws 
    http://cxf.apache.org/schemas/jaxws.xsd
    ">

 <!-- 引入CXF配置檔案,低版本還需引入其他兩個檔案 -->
    <import resource="classpath:META-INF/cxf/cxf.xml" /> 
    <!--有兩種釋出方式,本人使用了第二種 -->
    <!-- 配置方式1   注意:serviceClass為介面類並非實現類 -->
    <!-- 這是實現類 -->
    <!-- <bean id="Fdms001"    class="com.grand.webservice.FdmsWebServiceImpl" /> --> 
    <!-- serviceClass 是介面的路徑-->
    <!--  
    <jaxws:server serviceClass="cn.com.XXX.XX.XXX.Fdms2ESBInterfaces "
        address="/FdmsWebService">
        <jaxws:serviceBean>
            <ref bean="Fdms001" />
        </jaxws:serviceBean>
    </jaxws:server> -->


    <!-- 配置方式2  注意:implementor為介面的具體實現類 -->
    <jaxws:endpoint implementor="com.grand.webservice.FdmsWebServiceImpl" address="/FdmsWebService" ></jaxws:endpoint>

修改web.xml檔案,在末尾增加filter配置

<!-- cxf服務啟動servlet -->
    <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>/webService/*</url-pattern>
    </servlet-mapping>

執行tomcat 進行測試
在瀏覽器中 輸入
訪問專案地址+/webService/FdmsWebService?wsdl 就會出現 wsdl 的釋出內容,程式碼釋出成功

大家注意

如果後期執行時出現 這樣的異常時,一般是jdk 版本對cxf 版本的支援問題

Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/cxf/frontend/ServerFactoryBean : Unsupported major.minor version 51.0  

剛開始筆者下載的是
使用jdk6和apache-cxf-3.1.6,但cxf-3.1.6已經不支援jdk6,需要jdk7以上

jdk版本對照:
J2SE 8 = 52,
J2SE 7 = 51,
J2SE 6.0 = 50,
J2SE 5.0 = 49,
JDK 1.4 = 48,
JDK 1.3 = 47,
JDK 1.2 = 46,
JDK 1.1 = 45

解決方法一:
把CXF換成apache-cxf-2.6.1(筆者這裡,下了個版本低的)

解決方法二:
升級jdk到7

此文章,是針對本人具體專案來寫的,比較粗糙,具體可以看下參考連結
參考:

針對webService的註解總結