Spring集成WebService


一、搭建WebService服務端

搭建webservice服務端一般有兩種情況

1.1 從0搭建webService服務端

首先引入jar包

<!--cxf-->

    <!-- https://mvnrepository.com/artifact/org.apache.cxf/cxf-rt-frontend-jaxws -->
    <dependency>
      <groupId>org.apache.cxf</groupId>
      <artifactId>cxf-rt-frontend-jaxws</artifactId>
      <version>3.1.6</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.apache.cxf/cxf-core -->
    <dependency>
      <groupId>org.apache.cxf</groupId>
      <artifactId>cxf-core</artifactId>
      <version>3.1.6</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.apache.cxf/cxf-rt-transports-http -->
    <dependency>
      <groupId>org.apache.cxf</groupId>
      <artifactId>cxf-rt-transports-http</artifactId>
      <version>3.1.6</version>
    </dependency>

然后新建service,這里就面向接口了,直接新建一個calss類

package cn.wanghao.server;

import javax.jws.WebService;

@WebService
public class HelloWordWebServie {


    public String say(String parm1,int parm2){
        System.out.println("測試測試"+parm1);
        return "測試";
    }
}

然后定義Servlet,攔截webservice開頭的請求

  <!--定義一個cxf的servlet-->

  <servlet>
    <servlet-name>CXFServlet</servlet-name>
    <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>CXFServlet</servlet-name>
    <url-pattern>/webservice/*</url-pattern>
  </servlet-mapping>

然后把我們的webservice類教給Spring管理

        <import resource="classpath:META-INF/cxf/cxf.xml"/>
        <import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>
        <bean id="hello" class="cn.wanghao.server.HelloWordWebServie" />
        <jaxws:endpoint id="helloWorld" implementor="#hello" address="/HelloWorld" />
<!--        <jaxws:endpoint id="helloWorld" implementor="cn.wanghao.server.HelloWordWebServie" address="/HelloWorld"/>-->

如果引入上面的需要增加約束

xmlns:jaxws="http://cxf.apache.org/jaxws"

......



http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">

然后訪問:http://localhost:8080/webservice  可以看到我們已經發布成功,點擊url鏈接可以看到wsdl內容。

 

 

 可以看到成功了,但是我們的參數名稱是arg0,看起來很難閱讀,我們可以修改參數名稱。不建議用中文,此處測試用

 

 重啟tomcat后訪問如下:

 

 注:我們把這個wsdl內容保存下來,取名后后綴為.wsdl,下面會用到

1.1 根據wsdl生成服務端

由於我沒有系統學過,所以對webService了解的也不是很多,粗略理解webService就是根據這個wsdl規范的請求和訪問。

所以可能業務需求需要你根據wsdl生成服務端供其他人調用。所以就會給你一個wsdl,你依據wsdl寫服務端。

開始了,首先把之前保存的wsdl文件復制到項目下面,如下:

 

 點擊確定生成服務端代碼,還在當前目錄下,可能名字不一樣,但是文件差不多

 然后重寫實現類:

package cn.wanghao.server.test;

public class HelloWordWebServieServiceSoapBindingImpl implements cn.wanghao.server.test.HelloWordWebServie{
    public java.lang.String say(java.lang.String desc, int status) throws java.rmi.RemoteException {
        return "你的參數為: desc "+desc+"  status:" +status;
    }

}

注:這里不止生成了這幾個文件。還會生成一個server-config.wsdd 該文件與web.xml同級,以及web.xml多了很多代碼如下:

 

 

 報錯是因為缺少jar包,我們依賴第三方包即可:

    <!-- https://mvnrepository.com/artifact/org.apache.axis/axis -->
    <dependency>
      <groupId>org.apache.axis</groupId>
      <artifactId>axis</artifactId>
      <version>1.4</version>
    </dependency>

不報錯之后,我們拷貝deploy.wsdd 里面的service到server-config.wsdd 與里面的service標簽同級即可

 

 

 service的名字可以自己修改,

 

 

 

然后啟動項目提示少包,依次根據報錯引入這兩個包,然后啟動OK,

    <!-- https://mvnrepository.com/artifact/org.apache.axis/axis-jaxrpc -->
    <dependency>
      <groupId>org.apache.axis</groupId>
      <artifactId>axis-jaxrpc</artifactId>
      <version>1.4</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/commons-discovery/commons-discovery -->
    <dependency>
      <groupId>commons-discovery</groupId>
      <artifactId>commons-discovery</artifactId>
      <version>0.2</version>
    </dependency>

訪問項目:http://localhost:8080/services

 

 前面的是自帶的,最下面的是我自己的,多余的暴露接口也可以刪除,然后點擊我們接口進去后跟上面的一樣

 然后保存好這個wsdl,下面會用到

二、使用wsdl編寫客戶端

其實webService客戶端調用直接main方法就可以調用,不用啟服務,所以上面的項目不用關閉,另外啟動項目進行調用。jar包以及引入好了。

注意不要有用中文,之前的中文只是測試使用,這里需要規范屬性名稱

 

這里生產客戶端

 

 

 

生成結構如下:

 

 

調用main方法如下:

package example.other;

import cn.wanghao.server.test.HelloWordWebServieServiceLocator;

import javax.xml.rpc.ServiceException;
import java.rmi.RemoteException;

public class HelloCallWebServiceTest {

    public static void main(String[] args) throws ServiceException, RemoteException {


        HelloWordWebServieServiceLocator locator = new HelloWordWebServieServiceLocator();
        // 設置webService調用地址,可以寫在生成類里面
//        locator.setHelloWordWebServiePortEndpointAddress("http://localhost:8080/services/HelloWordWebServiePort?wsdl");
        String result = locator.getHelloWordWebServiePort().say("測試參數", 1);
        System.out.println("HelloCallWebServiceTest 返回參數為:"+result);
    }
}

執行后返回,與我們的的webServicce 實現對應

 

這里就不測試第一種方法了,以上就是spring集成webService並互相調用,有問題可以留言討論。 

 

 

參考文章:

https://blog.csdn.net/fhliuzhihu/article/details/78115828

https://blog.csdn.net/zty1317313805/article/details/80254751

http://cxf.apache.org/docs/writing-a-service-with-spring.html

https://blog.csdn.net/zhuo889/article/details/80575493


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM