記一次SpringBoot集成WebService使用Postman進行的測試


首先需要引入包

<dependency>
      <groupId>org.apache.cxf</groupId>
      <artifactId>cxf-rt-frontend-jaxws</artifactId>
      <version>3.1.6</version>
</dependency>
<dependency>
      <groupId>org.apache.cxf</groupId>
      <artifactId>cxf-rt-transports-http</artifactId>
      <version>3.1.6</version>
</dependency>
<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web-services</artifactId>
</dependency>
<!--讀寫XML--> <dependency> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId> <version>1.6.1</version> </dependency>
<!--在jdom中使用xpath需要導入jaxen.jar包--> <dependency> <groupId>jaxen</groupId> <artifactId>jaxen</artifactId> <version>1.1.6</version> </dependency>

然后就需要寫一個接口

package com.qiao.aopdemo.webservice;

import org.dom4j.DocumentException;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import java.io.UnsupportedEncodingException;

@WebService(name = "ITSMService", //暴露服務名稱
            targetNamespace = "http://webService.service.interact.com/"  //目標命名空間 一般是接口包名的倒敘
)
public interface ITSMService {

    @WebMethod public String createWorkOrder(@WebParam(name = "xmlStr") String xmlStr) throws UnsupportedEncodingException, DocumentException;
}

接口實現類

package com.qiao.aopdemo.webservice;

import com.qiao.aopdemo.util.WebServiceUtil;
import org.dom4j.Document;
import org.dom4j.DocumentException;

import javax.jws.WebParam;
import javax.jws.WebService;
import java.io.UnsupportedEncodingException;


@WebService(
        endpointInterface = "com.qiao.aopdemo.webservice.ITSMService",
        targetNamespace = "http://webService.service.interact.com/"
)
public class ITSMServiceImpl implements ITSMService {

    @Override
    public String createWorkOrder(@WebParam(name = "xmlStr") String xmlStr) throws UnsupportedEncodingException, DocumentException {
    return xmlStr;
 } }

配置類

package com.qiao.aopdemo.webservice;

import org.apache.cxf.Bus;
import org.apache.cxf.bus.spring.SpringBus;
import org.apache.cxf.jaxws.EndpointImpl;
import org.apache.cxf.transport.servlet.CXFServlet;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.xml.ws.Endpoint;

@Configuration
public class CxfConfig {
    @Bean
    public ServletRegistrationBean dispatcherCXFServlet() {
        return new ServletRegistrationBean(new CXFServlet(),"/webService/*");
    }

    @Bean(name = Bus.DEFAULT_BUS_ID)
    public SpringBus springBus() {
        return new SpringBus();
    }


    @Bean
    public Endpoint endpoint() {
        EndpointImpl endpoint = new EndpointImpl(springBus(), new ITSMServiceImpl());
        endpoint.publish("/itsmService"); return endpoint;
    }
}

工具類

package com.qiao.aopdemo.util;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.io.*;

public class WebServiceUtil {
    public static Document getDocument(String returnXmlData) throws UnsupportedEncodingException, DocumentException {
        SAXReader reader = new SAXReader();
        return  reader.read(new ByteArrayInputStream(returnXmlData.getBytes("UTF-8")));
    }
    public static String getSingleElementText(Document documen,String xpath) {
        Element ele=(Element)documen.selectSingleNode(xpath);
        if(ele==null){
            return null;
        }else {
            return ele.getText();
        }
    }
}

啟動SpringBoot項目,訪問 http://localhost:8080/webService/itsmService?wsdl   會得到以下結果,內容有點多就不截全了,仔細看看,基本上方法,接口名都在以下內容中了

 

 

 

接下來就可以進行測試了,我使用的是Postman

第一步:

 

 第二步:

 

 具體代碼:

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:test="http://webService.service.interact.com/">
   <soapenv:Body> <test:createWorkOrder> <xmlStr><![CDATA[測試]]> </xmlStr> </test:createWorkOrder> </soapenv:Body>
</soapenv:Envelope>

返回結果:圖片中有個標紅的寫錯了,不是targeSpaceName 而是tagetNameSpace

 還在繼續研究,先暫時做個記錄。

使用客戶端測試代碼,如下:測試可以使用Test,也可以直接使用main方法,參考鏈接:https://blog.csdn.net/sujin_/article/details/83865124

   @Test
    public void testSend1(){

        // 創建動態客戶端
        JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
        //Client client = dcf.createClient("http://localhost:8080/webService/itsmService?wsdl");
        Client client = dcf.createClient("http://localhost:8080/webservice/itsmService?wsdl");

        // 需要密碼的情況需要加上用戶名和密碼
        // client.getOutInterceptors().add(new ClientLoginInterceptor(USER_NAME,PASS_WORD));
        Object[] objects = new Object[0];
        try {
            String param = "你想要傳遞的內容,也可以是xml";
            // invoke("方法名",參數1,參數2,參數3....);
            objects = client.invoke("createWorkOrder", param);
            System.out.println("返回數據:" + objects[0]);
        } catch (java.lang.Exception e) {
            e.printStackTrace();
        }
    }


免責聲明!

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



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