国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

SpringBoot項(xiàng)目使用CXF框架開發(fā)Soap通信接口

這篇具有很好參考價(jià)值的文章主要介紹了SpringBoot項(xiàng)目使用CXF框架開發(fā)Soap通信接口。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

SpringBoot項(xiàng)目使用CXF框架開發(fā)Soap通信接口

物料準(zhǔn)備:

1.引入cxf官方提供的SpringBootStarter依賴

2.定義需要暴雷給外部調(diào)用的java接口以及接口的實(shí)現(xiàn)類

3.配置CxfConfig類,把你定義的java接口注冊為webservice的Endpoint

引入cxf-spring-boot-starter-jaxws依賴

這里因?yàn)槲矣玫膕pringboot版本是2.4.2的,所以這里選擇引入的是3.2.4版本的cxf框架,不建議引入更高的版本。

<!-- CXF webservice -->
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-spring-boot-starter-jaxws</artifactId>
            <version>3.2.4</version>
        </dependency>

定義需要暴雷給外部調(diào)用的java接口以及接口的實(shí)現(xiàn)類

接口類

package cn.ath.knowwikibackend.cxf;


import cn.ath.knowwikibackend.cxf.bean.UserInfo;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import java.util.List;
//聲明這個(gè)接口是一個(gè)WebService接口,必須指定targetNamespace命名空間
@WebService(targetNamespace = "http://cxf.knowwikibackend.ath.cn/")
public interface UserService {
    //WebMethod注解配置的是接口的方法名
    //如果方法有參數(shù),必須配置WebParam注解里的name參數(shù)名和targetNamespace命名空間
    @WebMethod(operationName = "getHello")
    String getHello(@WebParam(name = "name",targetNamespace = "http://cxf.knowwikibackend.ath.cn/") String name);

    @WebMethod(operationName = "get123")
    List<String> get123();

    @WebMethod(operationName = "getUserInfo")
    UserInfo getUserInfo();

    @WebMethod(operationName = "getUserList")
    List<UserInfo> getUserList();

    @WebMethod(operationName = "execTest1")
    void execTest1();

    @WebMethod(operationName = "execTest2")
    void execTest2(@WebParam(name = "action",targetNamespace = "http://cxf.knowwikibackend.ath.cn/") String action);
    
}

實(shí)現(xiàn)類

package cn.ath.knowwikibackend.cxf;

import cn.ath.knowwikibackend.cxf.bean.UserInfo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;
@Slf4j
@Service
public class UserServiceImpl implements UserService{
    @Override
    public String getHello(String name) {
        return "hello "+name;
    }

    @Override
    public List<String> get123() {
        List<String> aee = new ArrayList<>();
        aee.add("wer21r");
        aee.add("regft23tf");
        aee.add("retg23t");
        return aee;
    }

    @Override
    public UserInfo getUserInfo() {
        UserInfo userInfo = new UserInfo();
        userInfo.setAge(24);
        userInfo.setName("tear23ewr");
        userInfo.setUid(10003L);
        return userInfo;
    }

    @Override
    public List<UserInfo> getUserList() {
        List<UserInfo> list = new ArrayList<>();

        UserInfo userInfo = new UserInfo();
        userInfo.setAge(24);
        userInfo.setName("tear23ewr");
        userInfo.setUid(10003L);
        list.add(userInfo);

        UserInfo user2 = new UserInfo();
        user2.setAge(27);
        user2.setName("grfw34tgf");
        user2.setUid(10002L);
        list.add(user2);

        return list;
    }

    @Override
    public void execTest1() {
        log.info("execTest1 is exec ok !");
    }

    @Override
    public void execTest2(String action) {
        log.info("action:{} is exec ok !",action);
    }
}

配置CxfConfig類

package cn.ath.knowwikibackend.cxf;

import org.apache.cxf.Bus;
import org.apache.cxf.jaxws.EndpointImpl;
import org.apache.cxf.transport.servlet.CXFServlet;
import org.springframework.beans.factory.annotation.Autowired;
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 {
    @Autowired
    private Bus bus;
    @Autowired
    private UserService userService;

    @Bean
    public ServletRegistrationBean servletRegistrationBean(){
        return new ServletRegistrationBean(
                new CXFServlet(),
                "/soap/*"
        );
    }
    
    @Bean
    public Endpoint userEndpoint(){
        EndpointImpl endpoint = new EndpointImpl(bus,userService);
        endpoint.publish("/user");
        return endpoint;
    }
}

測試訪問webService效果

瀏覽器訪問暴露出的soap接口

查看你的springboot項(xiàng)目暴露出的soap 接口清單,可以用瀏覽器訪問

http://ip:port/webContext/soap/

webContext是你的項(xiàng)目的 server.servlet.context-path

/soap/ 是你在CxfConfig里配置的soap 接口的前綴

cxfconfig,SpringBoot技術(shù)筆記,JavaWeb筆記,spring boot,java,cxf,soap,webService

cxfconfig,SpringBoot技術(shù)筆記,JavaWeb筆記,spring boot,java,cxf,soap,webService

cxfconfig,SpringBoot技術(shù)筆記,JavaWeb筆記,spring boot,java,cxf,soap,webService

直接用瀏覽器訪問

http://ip:port/webContext/soap/user?wsdl

也可以看到 user端點(diǎn)(Endpoint)的wsdl信息,如上圖所示。

這個(gè)URL里的/user 是你在CxfConfig里配置的soap接口的Endpoint端點(diǎn)

使用hutool里提供的SoapClient調(diào)用這些soap接口

import cn.hutool.core.lang.Console;
import cn.hutool.http.webservice.SoapClient;   

@Test
    void test23607(){
        SoapClient client1 = SoapClient.create("http://localhost:8080/kwb/soap/user?wsdl");

        // soap xml請求報(bào)文 --- 請求 getHello方法
        Console.log(client1.setMethod("web:getHello","http://cxf.knowwikibackend.ath.cn/")
                .setParam("name","zhangsan")
                .getMsgStr(true));
        //soap  xml響應(yīng)報(bào)文
        Console.log(client1.send(true));


        //重置 SoapClient
        client1.reset();

        // soap xml請求報(bào)文 --- 請求 get123方法
        Console.log(client1.setMethod("web:get123","http://cxf.knowwikibackend.ath.cn/")
                .getMsgStr(true));
        //soap  xml響應(yīng)報(bào)文
        Console.log(client1.send(true));

        //重置 SoapClient
        client1.reset();
        Console.log(client1.setMethod("web:getUserInfo","http://cxf.knowwikibackend.ath.cn/")
                .getMsgStr(true));
        Console.log(client1.send(true));


        client1.reset();
        Console.log(client1.setMethod("web:getUserList","http://cxf.knowwikibackend.ath.cn/")
                .getMsgStr(true));
        Console.log(client1.send(true));

        client1.reset();
        Console.log(client1.setMethod("web:execTest1","http://cxf.knowwikibackend.ath.cn/")
                .getMsgStr(true));
        Console.log(client1.send(true));
    }

soap接口通信的xml日志如下

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
  <SOAP-ENV:Header/>
  <SOAP-ENV:Body>
    <web:getHello xmlns:web="http://cxf.knowwikibackend.ath.cn/">
      <web:name>zhangsan</web:name>
    </web:getHello>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <ns2:getHelloResponse xmlns:ns2="http://cxf.knowwikibackend.ath.cn/">
      <return>hello zhangsan</return>
    </ns2:getHelloResponse>
  </soap:Body>
</soap:Envelope>

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
  <SOAP-ENV:Header/>
  <SOAP-ENV:Body>
    <web:get123 xmlns:web="http://cxf.knowwikibackend.ath.cn/"/>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <ns2:get123Response xmlns:ns2="http://cxf.knowwikibackend.ath.cn/">
      <return>wer21r</return>
      <return>regft23tf</return>
      <return>retg23t</return>
    </ns2:get123Response>
  </soap:Body>
</soap:Envelope>

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
  <SOAP-ENV:Header/>
  <SOAP-ENV:Body>
    <web:getUserInfo xmlns:web="http://cxf.knowwikibackend.ath.cn/"/>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <ns2:getUserInfoResponse xmlns:ns2="http://cxf.knowwikibackend.ath.cn/">
      <return>
        <age>24</age>
        <name>tear23ewr</name>
        <uid>10003</uid>
      </return>
    </ns2:getUserInfoResponse>
  </soap:Body>
</soap:Envelope>

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
  <SOAP-ENV:Header/>
  <SOAP-ENV:Body>
    <web:getUserList xmlns:web="http://cxf.knowwikibackend.ath.cn/"/>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <ns2:getUserListResponse xmlns:ns2="http://cxf.knowwikibackend.ath.cn/">
      <return>
        <age>24</age>
        <name>tear23ewr</name>
        <uid>10003</uid>
      </return>
      <return>
        <age>27</age>
        <name>grfw34tgf</name>
        <uid>10002</uid>
      </return>
    </ns2:getUserListResponse>
  </soap:Body>
</soap:Envelope>

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
  <SOAP-ENV:Header/>
  <SOAP-ENV:Body>
    <web:execTest1 xmlns:web="http://cxf.knowwikibackend.ath.cn/"/>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <ns2:execTest1Response xmlns:ns2="http://cxf.knowwikibackend.ath.cn/"/>
  </soap:Body>
</soap:Envelope>

使用Postman測試工具來測試soap接口

cxfconfig,SpringBoot技術(shù)筆記,JavaWeb筆記,spring boot,java,cxf,soap,webService

使用cxf自帶的工具請求webservice接口

    @Test
    void test232323(){
        String address = "http://localhost:8080/kwb/soap/user?wsdl";
        JaxWsProxyFactoryBean jaxWsProxyFactoryBean = new JaxWsProxyFactoryBean();
        jaxWsProxyFactoryBean.setAddress(address);
        jaxWsProxyFactoryBean.setServiceClass(UserService.class);
        UserService userService = (UserService) jaxWsProxyFactoryBean.create();
        String name = "lisi";
        String res =  userService.getHello(name);
        System.err.println(res);

        List<UserInfo> userList = userService.getUserList();
        System.err.println(userList);

        userService.execTest1();
        userService.execTest2("bak-sql");
    }

執(zhí)行效果如下文章來源地址http://www.zghlxwxcb.cn/news/detail-691521.html

消費(fèi)者端打印日志
hello lisi
[UserInfo(uid=10003, name=tear23ewr, age=24), UserInfo(uid=10002, name=grfw34tgf, age=27)]

//生產(chǎn)者端打印日志
2023-06-07 19:53:21,038  INFO [http-nio-8080-exec-1] [] c.a.k.c.UserServiceImpl [UserServiceImpl.java : 14] getHello--req name:lisi

2023-06-07 19:53:21,182  INFO [http-nio-8080-exec-2] [] c.a.k.c.UserServiceImpl [UserServiceImpl.java : 39] 訪問了getUserList方法

2023-06-07 19:54:01,253  INFO [http-nio-8080-exec-4] [] c.a.k.c.UserServiceImpl [UserServiceImpl.java : 57] execTest1 is exec ok !

2023-06-07 19:54:01,264  INFO [http-nio-8080-exec-5] [] c.a.k.c.UserServiceImpl [UserServiceImpl.java : 63] action:bak-sql is exec ok !

到了這里,關(guān)于SpringBoot項(xiàng)目使用CXF框架開發(fā)Soap通信接口的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • [webservice] springboot整合cxf

    2.1 pom.xml 中添加依賴 springboot整合Apache cxf 2.3 service發(fā)布(cxf配置) 發(fā)布完成后啟動(dòng)web服務(wù),可以通過: http://127.0.0.1:8080/ws 訪問已經(jīng)發(fā)布的服務(wù)。 在這里分享一個(gè)天氣預(yù)報(bào)的webservice服務(wù): http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl 3.1 使用wsdl2java生成webservice客戶端代碼

    2024年04月25日
    瀏覽(9)
  • 【開源】SpringBoot框架開發(fā)企業(yè)項(xiàng)目合同信息系統(tǒng)

    【開源】SpringBoot框架開發(fā)企業(yè)項(xiàng)目合同信息系統(tǒng)

    基于JAVA+Vue+SpringBoot+MySQL的企業(yè)項(xiàng)目合同信息系統(tǒng),包含了合同審批模塊、合同簽訂模塊、合同預(yù)定模塊和合同數(shù)據(jù)可視化模塊,還包含系統(tǒng)自帶的用戶管理、部門管理、角色管理、菜單管理、日志管理、數(shù)據(jù)字典管理、文件管理、圖表展示等基礎(chǔ)模塊,企業(yè)項(xiàng)目合同信息系統(tǒng)

    2024年02月20日
    瀏覽(26)
  • 【開發(fā)細(xì)節(jié)】SpringBoot項(xiàng)目將接口從HTTP換為HTTPS

    【開發(fā)細(xì)節(jié)】SpringBoot項(xiàng)目將接口從HTTP換為HTTPS

    首先需要生成一個(gè) SSL 證書,可以使用 OpenSSL 工具或者自己的 CA 頒發(fā)機(jī)構(gòu)來生成證書 ,這里就不贅述了。如果是 測試階段,也可以使用 self-signed certificate 。 直接使用 jdk的keytool生成 ,具體操作方法如下: 使用管理員身份運(yùn)行命令提示符 使用命令進(jìn)入到j(luò)dk安裝路徑的bin文件

    2024年02月13日
    瀏覽(22)
  • 【項(xiàng)目源碼】一套基于springboot+Uniapp框架開發(fā)的智慧醫(yī)院3D人體導(dǎo)診系統(tǒng)源碼

    【項(xiàng)目源碼】一套基于springboot+Uniapp框架開發(fā)的智慧醫(yī)院3D人體導(dǎo)診系統(tǒng)源碼

    智慧醫(yī)院3D人體導(dǎo)診系統(tǒng)源碼 開發(fā)語言:java 開發(fā)工具:IDEA 前端框架:Uniapp? 后端框架:springboot?? 數(shù) 據(jù) 庫:mysql? 移 動(dòng) 端:微信小程序、H5 “智慧導(dǎo)診”以人工智能手段為依托,為人們提供智能分診、問病信息等服務(wù),在一定程度上滿足了人們自我健康管理、精準(zhǔn)掛號等

    2024年02月10日
    瀏覽(20)
  • 使用SpringBoot開發(fā)一個(gè)POST接口

    SpringBoot框架項(xiàng)目一般分為五層: View層:向用戶展示頁面 Controller層:前后端交互層,接收前端請求,調(diào)用Service層中的方法,接收Service層返回的數(shù)據(jù)并將其返回到前端。 Service層:存放業(yè)務(wù)處理的邏輯,以及一些操作數(shù)據(jù)庫的接口 Mapper層:也可以成為DAO層,是數(shù)據(jù)庫CRUD的接

    2024年02月08日
    瀏覽(12)
  • .NetCore調(diào)用Soap接口

    添加服務(wù)引用的方式無法滿足我請求Soap接口,所以寫了個(gè)Soap幫助類,使用HttpClient的方式請求接口。 提示:以下是本篇文章正文內(nèi)容,下面案例可供參考 一條 SOAP 消息就是一個(gè)普通的 XML 文檔,包含下列元素: 必需的 Envelope 元素,可把此 XML 文檔標(biāo)識為一條 SOAP 消息 可選的

    2024年02月04日
    瀏覽(15)
  • Java 調(diào)用 WebService 、java調(diào)用Soap請求、Java對接soap接口

    工作第一次遇到對接soap接口,覺得有必要記錄一下,畢竟踩了不少坑,網(wǎng)上帖子很多但大都不全,也不可能完全滿足自己的需求,于是就有了下面的代碼: 除了只是借鑒, 注意事項(xiàng): 1.http://ip:port/xxx/xxx/soap?wsdl有些soap接口,對面是不需要穿?wsdl對接時(shí)要問出清 2. httpPost.set

    2024年02月05日
    瀏覽(17)
  • SpringBoot 項(xiàng)目使用 Redis 對用戶 IP 進(jìn)行接口限流

    SpringBoot 項(xiàng)目使用 Redis 對用戶 IP 進(jìn)行接口限流

    使用接口限流的主要目的在于提高系統(tǒng)的穩(wěn)定性,防止接口被惡意打擊(短時(shí)間內(nèi)大量請求)。 比如要求某接口在1分鐘內(nèi)請求次數(shù)不超過1000次,那么應(yīng)該如何設(shè)計(jì)代碼呢? 下面講兩種思路,如果想看代碼可直接翻到后面的代碼部分。 1.1 固定時(shí)間段(舊思路) 1.1.1 思路描述

    2024年02月15日
    瀏覽(15)
  • SpringBoot 項(xiàng)目使用 Redis 對用戶IP進(jìn)行接口限流

    SpringBoot 項(xiàng)目使用 Redis 對用戶IP進(jìn)行接口限流

    本文主要參考了該篇文章:https://www.zhihu.com/question/586213782/answer/3038040317?utm_id=0 使用接口限流的主要目的在于提高系統(tǒng)的穩(wěn)定性,防止接口被惡意打擊(短時(shí)間內(nèi)大量請求)。 比如要求 某接口 在 1分鐘 內(nèi)請求次數(shù)不超過 1000次 ,那么應(yīng)該如何設(shè)計(jì)代碼呢? 下面講兩種思路,

    2024年02月16日
    瀏覽(14)
  • 【security】java springboot項(xiàng)目中使用springSecurity安全框架

    springboot項(xiàng)目如果導(dǎo)入security依賴后會(huì)自動(dòng)托管整個(gè)項(xiàng)目,前端在訪問項(xiàng)目的任何路徑時(shí)會(huì)被攔截并跳轉(zhuǎn)到security默認(rèn)的登錄頁面,登錄用戶名為user,密碼為控制臺啟動(dòng)項(xiàng)目時(shí)生成的隨機(jī)密碼 一、自定義設(shè)置用戶的認(rèn)證:創(chuàng)建一個(gè)配置類(類上加@Configuration),讓該類繼承Web

    2024年02月15日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包