最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用java對(duì)接WebService接口實(shí)現(xiàn)過程

 更新時(shí)間:2026年04月01日 09:45:49   作者:大手你不懂  
文章介紹了WebService的概念、應(yīng)用場景和對(duì)接方式,特別強(qiáng)調(diào)了Java中對(duì)接WebService的方法,包括JAX-WS、第三方庫和Spring的WebServiceTemplate,還分享了使用Hutool工具的方法,并通過實(shí)例展示了服務(wù)端和客戶端的實(shí)現(xiàn),以及使用SoapUI進(jìn)行驗(yàn)證和測試的過程

1、什么是WebService?

WebService是一個(gè)平臺(tái) 獨(dú)立的,低耦合的,自包含的、基于可編程的web的應(yīng)用程序,可使用開放的XML(標(biāo)準(zhǔn)通用標(biāo)記語言下的一個(gè)子集)標(biāo)準(zhǔn)來描述、發(fā)布、發(fā)現(xiàn)、協(xié)調(diào)和配置這些應(yīng)用程序,用于開發(fā)分布式的交互操作的應(yīng)用程序。

Web Service技術(shù), 能使得運(yùn)行在不同機(jī)器上的不同應(yīng)用無須借助附加的、專門的第三方軟件或硬件, 就可相互交換數(shù)據(jù)或集成。依據(jù)Web Service規(guī)范實(shí)施的應(yīng)用之間, 無論它們所使用的語言、 平臺(tái)或內(nèi)部協(xié)議是什么, 都可以相互交換數(shù)據(jù)。

Web Service是自描述、 自包含的可用網(wǎng)絡(luò)模塊, 可以執(zhí)行具體的業(yè)務(wù)功能。

Web Service也很容易部署, 因?yàn)樗鼈兓谝恍┏R?guī)的產(chǎn)業(yè)標(biāo)準(zhǔn)以及已有的一些技術(shù),諸如標(biāo)準(zhǔn)通用標(biāo)記語言下的子集XML、HTTP。

Web Service減少了應(yīng)用接口的花費(fèi)。

Web Service為整個(gè)企業(yè)甚至多個(gè)組織之間的業(yè)務(wù)流程的集成提供了一個(gè)通用機(jī)制。

2、WebService應(yīng)用場景?

(1)異構(gòu)系統(tǒng)(不同的開發(fā)語言)的整合:例如,在一個(gè)企業(yè)內(nèi)部,可能有多個(gè)部門使用不同的系統(tǒng)和編程語言。通過使用Webservice,這些系統(tǒng)可以互相通信并共享數(shù)據(jù)。

(2)不同客戶端的整合:例如,一個(gè)網(wǎng)站可能需要同時(shí)支持瀏覽器、手機(jī)端(Android/iOS)、微信等不同平臺(tái)的訪問。通過使用Webservice,可以在后端實(shí)現(xiàn)統(tǒng)一的數(shù)據(jù)處理和業(yè)務(wù)邏輯,并為不同客戶端提供接口調(diào)用。

(3)軟件集成和復(fù)用:例如,氣 象 局可以通過Webservice向天氣查詢網(wǎng)站提供實(shí)時(shí)天氣數(shù)據(jù)。這種情況下,氣 象 局作為服務(wù)端,提供數(shù)據(jù)服務(wù);天氣查詢網(wǎng)站作為客戶端,通過調(diào)用Webservice來獲取數(shù)據(jù)。

3、java怎么對(duì)接WebService呢?

在Java中,我們可以使用不同的方式來對(duì)接外部系統(tǒng)提供的Web服務(wù)接口。以下是幾種常見的方法:

(1)使用JAX-WS(Java API for XML Web Services):JAX-WS是Java EE的一部分,它提供了一種簡單但強(qiáng)大的方式來開發(fā)基于SOAP的Web服務(wù)。您可以使用wsimport工具來生成客戶端代理代碼,該代碼可用于調(diào)用外部Web服務(wù)的方法。下面是一個(gè)簡單的示例:

wsimport -s src -d build -p com.example http://www.example.com/YourService?wsdl

上述命令將根據(jù)WSDL文件生成客戶端代碼,并包含在指定的包中。一旦代碼生成完成,您可以像在本地調(diào)用本地方法一樣調(diào)用外部Web服務(wù)的方法。

(2)使用第三方庫(例如CXF、Axis等):除了JAX-WS之外,還有許多第三方的Java Web服務(wù)庫可以幫助您對(duì)接外部系統(tǒng)提供的Web服務(wù)接口。比如Apache CXF和Apache Axis都提供了強(qiáng)大的Web服務(wù)客戶端和服務(wù)端庫。您可以根據(jù)自己的喜好和需求選擇合適的庫進(jìn)行開發(fā)。

在實(shí)際應(yīng)用中,您需要考慮以下幾點(diǎn):

  • 安全性:外部Web服務(wù)接口可能需要認(rèn)證,您需要了解如何在Java中處理認(rèn)證信息,如用戶名/密碼、密鑰等。
  • 異常處理:調(diào)用外部Web服務(wù)時(shí)可能會(huì)出現(xiàn)各種異常情況,例如網(wǎng)絡(luò)中斷、超時(shí)等。您需要了解如何在客戶端代碼中處理這些異常。
  • 數(shù)據(jù)傳輸格式:Web服務(wù)接口通常支持多種數(shù)據(jù)傳輸格式,如XML、JSON等。您需要了解如何在Java中處理這些數(shù)據(jù)格式。

(3)使用Spring框架提供的WebServiceTemplate類。WebServiceTemplate類提供了一種簡單而靈活的方式來調(diào)用Web服務(wù),并且集成了許多常見的Web服務(wù)調(diào)用需求,如消息處理、異常處理等。

import org.springframework.ws.client.core.WebServiceTemplate;
import org.springframework.oxm.jaxb.Jaxb2Marshaller;

public class WebServiceClient {

    public static void main(String[] args) {
        WebServiceTemplate webServiceTemplate = new WebServiceTemplate();

        // 設(shè)置Web服務(wù)地址
        webServiceTemplate.setDefaultUri("http://www.example.com/YourService");

        // 設(shè)置編組器和解組器
        Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
        marshaller.setContextPath("com.example.yourpackage"); // 設(shè)置上下文路徑,用于識(shí)別要編組/解組的類
        webServiceTemplate.setMarshaller(marshaller);
        webServiceTemplate.setUnmarshaller(marshaller);

        // 構(gòu)造請求數(shù)據(jù)
        YourRequestObject request = new YourRequestObject();

        // 調(diào)用外部Web服務(wù)接口
        YourResponseObject response = (YourResponseObject) webServiceTemplate.marshalSendAndReceive(request);

        // 處理響應(yīng)數(shù)據(jù)
        // ...
    }
}

在上述示例中,我們使用了Jaxb2Marshaller作為編組器和解組器,并設(shè)置了要編組/解組的目標(biāo)類的上下文路徑。您需要將"com.example.yourpackage"替換為實(shí)際的包路徑,以便編組/解組器能夠識(shí)別請求和響應(yīng)對(duì)象。這個(gè)上下文路徑通常是您生成的Web服務(wù)客戶端代碼的包路徑。

但經(jīng)過查找資料,并進(jìn)行測試與嘗試。我最終選擇的是使用hutool工具包所提供的方法,我也推薦此方法。

3.1 自己編寫一個(gè)WebService服務(wù)端

我這里方便測試,所以編寫了一個(gè)服務(wù)端

3.1.1 代碼

package com.webservice.server;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @Author ZhaoShuHao
 * @Date 2023/11/15 16:16
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User
{
    //姓名
    private String name;
    //性別
    private String sex;
    //年齡
    private int age;
}

package com.webservice.server;

/**
 * @Author ZhaoShuHao
 * @Date 2023/11/15 16:16
 */
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;

@WebService(targetNamespace = "http://service.cn.com/")
public interface UserService
{

    /**
     * 1.在類上添加@WebService注解,代表發(fā)布一個(gè)WebService服務(wù)。
     * 2.給類添加上@WebService注解后,類中所有的非靜態(tài)方法都將會(huì)對(duì)外公布。
     * 3.如果希望某個(gè)方法不對(duì)外公開,可以在方法上添加@WebMethod(exclude=true),阻止對(duì)外公開。
     * 4.如果一個(gè)類上,被添加了@WebService注解,則必須此類至少有一個(gè)可以公開的方法,否則將會(huì)啟動(dòng)失敗。
     *   protected、private、final、static方法不能對(duì)外公開。
     * 5.@targetNamespace 設(shè)置命名空間,默認(rèn)包名,取反
     */

    @WebMethod
    public User getUserInfo(@WebParam(name = "name", targetNamespace = "http://service.cn.com/") String name,
                            @WebParam(name = "sex", targetNamespace = "http://service.cn.com/") String sex,
                            @WebParam(name = "age", targetNamespace = "http://service.cn.com/") int age);

}
package com.webservice.server;

/**
 * @Author ZhaoShuHao
 * @Date 2023/11/15 16:17
 */
public class UserServiceImpl implements UserService
{
    @Override
    public User getUserInfo(String name,String sex,int age)
    {
        User user = new User(name,sex,age);
        return user;
    }
}

package com.webservice.server;
import org.apache.cxf.jaxws.JaxWsServerFactoryBean;

/**
 * @Author ZhaoShuHao
 * @Date 2023/11/15 16:18
 */
public class ServerTest
{
    public static void main(String[] args)
    {
        //發(fā)布服務(wù)的工廠
        JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();
        //設(shè)置服務(wù)的地址
        factory.setAddress("http://127.0.0.1:9999/test");
        //設(shè)置服務(wù)類
        factory.setServiceBean(new UserServiceImpl());
        //發(fā)布服務(wù)
        factory.create();
        System.out.println(("發(fā)布服務(wù)成功,wsdl地址是:http://127.0.0.1:9999/test?wsdl"));
    }

}

3.1.2 運(yùn)行結(jié)果

wsdl文件格式如下:

<wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://server.webservice.com/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:ns2="http://schemas.xmlsoap.org/soap/http" xmlns:ns1="http://service.cn.com/" name="UserServiceImplService" targetNamespace="http://server.webservice.com/">
<wsdl:import location="http://127.0.0.1:9999/test?wsdl=UserService.wsdl" namespace="http://service.cn.com/"> </wsdl:import>
<wsdl:binding name="UserServiceImplServiceSoapBinding" type="ns1:UserService">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="getUserInfo">
<soap:operation soapAction="" style="document"/>
<wsdl:input name="getUserInfo">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="getUserInfoResponse">
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="UserServiceImplService">
<wsdl:port binding="tns:UserServiceImplServiceSoapBinding" name="UserServiceImplPort">
<soap:address location="http://127.0.0.1:9999/test"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>

3.2 編寫客戶端

3.2.1代碼

package com.webservice.client;

import cn.hutool.core.util.XmlUtil;
import cn.hutool.http.webservice.SoapClient;
import org.w3c.dom.Document;

import javax.xml.xpath.XPathConstants;

/**
 * @Author ZhaoShuHao
 * @Date 2023/11/15 16:20
 */
public class ClientTest
{
    public static void main(String[] args)
    {
        //設(shè)置webservice服務(wù)地址
        SoapClient client = SoapClient.create("http://127.0.0.1:9999/test?wsdl")
                // 設(shè)置要請求的方法,傳入對(duì)應(yīng)的命名空間
                .setMethod("getUserInfo", "http://service.cn.com/")
                // 設(shè)置參數(shù)
                .setParam("name", "張三")
                .setParam("sex", "男")
                .setParam("age", 23);
        // 發(fā)送請求,參數(shù)true表示返回一個(gè)格式化后的XML內(nèi)容
        String result = client.send(true);
        System.out.println(result);
        System.out.println("----------------------------");
        // 返回內(nèi)容為XML字符串,可以配合XmlUtil解析這個(gè)響應(yīng)
        Document docResult = XmlUtil.readXML(result);
        Object name = XmlUtil.getByXPath("http://return//name", docResult, XPathConstants.STRING);
        Object sex = XmlUtil.getByXPath("http://return//sex", docResult, XPathConstants.STRING);
        Object age = XmlUtil.getByXPath("http://return//age", docResult, XPathConstants.STRING);
        System.out.println("name = " + name);
        System.out.println("sex = " + sex);
        System.out.println("age = " + age);
    }
}

3.2.2 運(yùn)行結(jié)果

3.3 使用圖形化工具SoapUI進(jìn)行測試

下載地址:The World’s Most Popular API Testing Tool | SoapUI

3.3.1 使用該工具的原因是什么?

我在開發(fā)過程中,遇到了用戶提供的WebService接口是內(nèi)網(wǎng)這種情況,而且只能是內(nèi)網(wǎng)。所以用戶只能提供堡壘機(jī)得形式,讓我調(diào)用。那怎么驗(yàn)證我寫的接口沒問題呢?怎么快速確定用戶的返回?cái)?shù)據(jù)是什么呢?所以我先在本地模擬了一下WebService的客戶端與服務(wù)端。并且在堡壘機(jī)上安裝了SoapUI進(jìn)行測試。確保用戶和我的接口均沒問題。

3.3.2 安裝與使用

1、安裝:沒什么好說的,直接下一步即可

2、使用

(1)安裝完成,頁面大概是這樣的

(2)我們直接開始調(diào)用WebService接口

點(diǎn)擊SOAP菜單,輸入一個(gè)名稱(名稱隨意取)。輸入wsdl的地址。點(diǎn)擊ok。

左側(cè)菜單出現(xiàn)一個(gè)文件夾,打開,雙擊最后一個(gè)

點(diǎn)擊運(yùn)行,在右側(cè)還可以選擇格式進(jìn)行展示

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 關(guān)于Intellij IDEA中的Version Control問題

    關(guān)于Intellij IDEA中的Version Control問題

    這篇文章主要介紹了Intellij IDEA中的Version Control問題,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-11-11
  • 如何使用JaCoCo分析java單元測試覆蓋率

    如何使用JaCoCo分析java單元測試覆蓋率

    在做單元測試時(shí),代碼覆蓋率常常被拿來作為衡量測試好壞的指標(biāo),甚至,用代碼覆蓋率來考核測試任務(wù)完成情況,比如,代碼覆蓋率必須達(dá)到80%或 90%。于是乎,測試人員費(fèi)盡心思設(shè)計(jì)案例覆蓋代碼。下面我們來學(xué)習(xí)一下吧
    2019-06-06
  • Java遍歷json字符串取值的實(shí)例

    Java遍歷json字符串取值的實(shí)例

    下面小編就為大家分享一篇Java遍歷json字符串取值的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • SpringBoot集成Nacos實(shí)現(xiàn)注冊中心與配置中心流程詳解

    SpringBoot集成Nacos實(shí)現(xiàn)注冊中心與配置中心流程詳解

    這篇文章主要介紹了SpringBoot集成Nacos實(shí)現(xiàn)注冊中心與配置中心流程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-02-02
  • Java elasticSearch-api的具體操作步驟講解

    Java elasticSearch-api的具體操作步驟講解

    這篇文章主要介紹了elasticSearch-api的具體操作步驟講解,本文通過詳細(xì)的步驟介紹和圖文代碼展示講解了該項(xiàng)技術(shù),需要的朋友可以參考下
    2021-06-06
  • 聊聊Java中的Native修飾符

    聊聊Java中的Native修飾符

    這篇文章主要介紹了Java中的Native修飾符使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java中的三種代理模式詳解

    Java中的三種代理模式詳解

    這篇文章主要介紹了Java中的三種代理模式詳解,代理模式的關(guān)鍵點(diǎn)是:代理對(duì)象與目標(biāo)對(duì)象.代理對(duì)象是對(duì)目標(biāo)對(duì)象的擴(kuò)展,并會(huì)調(diào)用目標(biāo)對(duì)象,文中提供了部分代碼,需要的朋友可以參考下
    2023-08-08
  • IDEA插件之Mybatis Log plugin 破解及安裝方法

    IDEA插件之Mybatis Log plugin 破解及安裝方法

    這篇文章主要介紹了IDEA插件之Mybatis Log plugin 破解方法及安裝方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Java同步函數(shù)代碼詳解

    Java同步函數(shù)代碼詳解

    這篇文章主要介紹了Java線程中的同步函數(shù)的相關(guān)內(nèi)容,涉及了實(shí)例代碼,需要的朋友,可以參考下。
    2017-10-10
  • Java接口名稱沖突問題的講解

    Java接口名稱沖突問題的講解

    今天小編就為大家分享一篇關(guān)于Java接口名稱沖突問題的講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-04-04

最新評(píng)論

遵化市| 德阳市| 盐边县| 宝兴县| 连城县| 武汉市| 耒阳市| 康乐县| 科技| 莫力| 香格里拉县| 分宜县| 和平县| 东阿县| 金华市| 都兰县| 黄梅县| 盐城市| 梁山县| 磐石市| 廉江市| 宣化县| 卓尼县| 桐柏县| 公主岭市| 绩溪县| 介休市| 张家界市| 马山县| 依安县| 册亨县| 两当县| 木兰县| 全州县| 蒲城县| 岳阳县| 扶绥县| 南溪县| 南江县| 富顺县| 镇安县|