欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

webservice實現(xiàn)springboot項目間接口調(diào)用與對象傳遞示例

 更新時間:2022年07月20日 09:16:19   作者:哪 吒  
本文主要介紹了webservice實現(xiàn)springboot項目間接口調(diào)用與對象傳遞示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

一、百度百科

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

Web Service技術(shù), 能使得運行在不同機器上的不同應(yīng)用無須借助附加的、專門的第三方軟件或硬件, 就可相互交換數(shù)據(jù)或集成。依據(jù)Web Service規(guī)范實施的應(yīng)用之間, 無論它們所使用的語言、 平臺或內(nèi)部協(xié)議是什么, 都可以相互交換數(shù)據(jù)。Web Service是自描述、 自包含的可用網(wǎng)絡(luò)模塊, 可以執(zhí)行具體的業(yè)務(wù)功能。Web Service也很容易部署, 因為它們基于一些常規(guī)的產(chǎn)業(yè)標準以及已有的一些技術(shù),諸如標準通用標記語言下的子集XML、HTTP。Web Service減少了應(yīng)用接口的花費。Web Service為整個企業(yè)甚至多個組織之間的業(yè)務(wù)流程的集成提供了一個通用機制。

二、webservice的技術(shù)支持

Web Service平臺需要一套協(xié)議來實現(xiàn)分布式應(yīng)用程序的創(chuàng)建。任何平臺都有它的數(shù)據(jù)表示方法和類型系統(tǒng)。要實現(xiàn)互操作性,Web Service平臺必須提供一套標準的類型系統(tǒng),用于溝通不同平臺、編程語言和組件模型中的不同類型系統(tǒng)。這些協(xié)議有:

1、XML和XSD

XML是一種用于標記電子文件使其具有結(jié)構(gòu)性的標記語言,是Web Service平臺中表示數(shù)據(jù)的基本格式。除了易于建立和易于分析外,XML主要的優(yōu)點在于它既與平臺無關(guān),又與廠商無關(guān)。XML遵循 W3C 規(guī)范的語法要求,形式與內(nèi)容分離,具有良好的自描述性,同時易于擴展,擁有豐富的第三方開發(fā)庫,非常適合在不同架構(gòu)的系統(tǒng)之間進行信息傳輸使用。隨著XML的應(yīng)用越來越廣泛,在眾多應(yīng)用場景下,XML憑借其優(yōu)點已經(jīng)成為事實上的數(shù)據(jù)交換標準。 XML是由萬維網(wǎng)協(xié)會(W3C)創(chuàng)建,W3C制定的XML SchemaXSD定義了一套標準的數(shù)據(jù)類型,并給出了一種語言來擴展這套數(shù)據(jù)類型。
Web Service平臺是用XSD來作為數(shù)據(jù)類型系統(tǒng)的。當你用某種語言如VB. NET或C# 來構(gòu)造一個Web Service時,為了符合Web Service標準,所有你使用的數(shù)據(jù)類型都必須被轉(zhuǎn)換為XSD類型。如想讓它使用在不同平臺和不同軟件的不同組織間傳遞,還需要用某種東西將它包裝起來。這種東西就是一種協(xié)議,如 SOAP。

2、SOAP

SOAP即簡單對象訪問協(xié)議(Simple Object Access Protocol),它是用于交換XML(標準通用標記語言下的一個子集)編碼信息的輕量級協(xié)議,能夠在不同信息系統(tǒng)之間交換結(jié)構(gòu)化數(shù)據(jù),是Web Service的一種主流實現(xiàn)形式 。它有三個主要方面:XML-envelope為描述信息內(nèi)容和如何處理內(nèi)容定義了框架,將程序?qū)ο缶幋a成為XML對象的規(guī)則,執(zhí)行遠程過程調(diào)用(RPC)的約定。SOAP可以運行在任何其他傳輸協(xié)議上。

SOAP基于HTTP協(xié)議定義了一個框架,描述消息中的內(nèi)容是什么、是誰發(fā)送的、誰應(yīng)當接受并處理它以及如何處理它們。它通過定義SOAP信封(Envelop)實現(xiàn)數(shù)據(jù)格式的標準化,將XML數(shù)據(jù)封裝于信封之中進行信息交互,使得異構(gòu)的系統(tǒng)間能夠進行互操作。
Web Service 希望實現(xiàn)不同的系統(tǒng)之間能夠用“軟件-軟件對話”的方式相互調(diào)用,打破了軟件應(yīng)用、網(wǎng)站和各種設(shè)備之間的格格不入的狀態(tài),實現(xiàn)“基于Web無縫集成”的目標。

3、WSDL

Web Service描述語言WSDL 就是用機器能閱讀的方式提供的一個正式描述文檔而基于XML(標準通用標記語言下的一個子集)的語言,用于描述Web Service及其函數(shù)、參數(shù)和返回值。因為是基于XML的,所以WSDL既是機器可閱讀的,又是人可閱讀的。

4、UDDI

UDDI 的目的是為電子商務(wù)建立標準;UDDI是一套基于Web的、分布式的、為Web Service提供的、信息注冊中心的實現(xiàn)標準規(guī)范,同時也包含一組使企業(yè)能將自身提供的Web Service注冊,以使別的企業(yè)能夠發(fā)現(xiàn)的訪問協(xié)議的實現(xiàn)標準。

5、調(diào)用RPC與消息傳遞

Web Service本身其實是在實現(xiàn)應(yīng)用程序間的通信。我們有兩種應(yīng)用程序通信的方法:RPC遠程過程調(diào)用 和消息傳遞。使用RPC的時候,客戶端的概念是調(diào)用服務(wù)器上的遠程過程,通常方式為實例化一個遠程對象并調(diào)用其方法和屬性。RPC系統(tǒng)試圖達到一種位置上的透明性:服務(wù)器暴露出遠程對象的接口,而客戶端就好像在本地使用的這些對象的接口一樣,這樣就隱藏了底層的信息,客戶端也就根本不需要知道對象是在哪臺機器上。

三、webservice的應(yīng)用場景和弊端

1、webservice的應(yīng)用場景

長項1:跨防火墻的通信
如果應(yīng)用程序有成千上萬的用戶,而且分布在世界各地,那么客戶端和服務(wù)器之間的通信將是一個棘手的問題。因為客戶端和服務(wù)器之間通常會有防火墻或者代理服務(wù)器。在這種情況下,使用DCOM就不是那么簡單,通常也不便于把客戶端程序發(fā)布到數(shù)量如此龐大的每一個用戶手中。傳統(tǒng)的做法是,選擇用瀏覽器作為客戶端,寫下一大堆ASP頁面,把應(yīng)用程序的中間層暴露給最終用戶。這樣做的結(jié)果是開發(fā)難度大,程序很難維護。

如果中間層組件換成WebService的話,就可以從用戶界面直接調(diào)用中間層組件,從而省掉建立ASP頁面的那一步。要調(diào)用WebService,可以直接使用MicrosoftSOAPToolkit或.NET這樣的SOAP客戶端,也可以使用自己開發(fā)的SOAP客戶端,然后把它和應(yīng)用程序連接起來。不僅縮短了開發(fā)周期,還減少了代碼復(fù)雜度,并能夠增強應(yīng)用程序的可維護性。同時,應(yīng)用程序也不再需要在每次調(diào)用中間層組件時,都跳轉(zhuǎn)到相應(yīng)的“結(jié)果頁”。

企業(yè)級的應(yīng)用程序開發(fā)者都知道,企業(yè)里經(jīng)常都要把用不同語言寫成的、在不同平臺上運行的各種程序集成起來,而這種集成將花費很大的開發(fā)力量。應(yīng)用程序經(jīng)常需要從運行在IBM主機上的程序中獲取數(shù)據(jù);或者把數(shù)據(jù)發(fā)送到主機或UNIX應(yīng)用程序中去。即使在同一個平臺上,不同軟件廠商生產(chǎn)的各種軟件也常常需要集成起來。通過WebService,應(yīng)用程序可以用標準的方法把功能和數(shù)據(jù)“暴露”出來,供其它應(yīng)用程序使用。

長項2:應(yīng)用程序集成
企業(yè)級的應(yīng)用程序開發(fā)者都知道,企業(yè)里經(jīng)常都要把用不同語言寫成的、在不同平臺上運行的各種程序集成起來,而這種集成將花費很大的開發(fā)力量。應(yīng)用程序經(jīng)常需要從運行在IBM主機上的程序中獲取數(shù)據(jù);或者把數(shù)據(jù)發(fā)送到主機或UNIX應(yīng)用程序中去。即使在同一個平臺上,不同軟件廠商生產(chǎn)的各種軟件也常常需要集成起來。通過WebService,應(yīng)用程序可以用標準的方法把功能和數(shù)據(jù)“暴露”出來,供其它應(yīng)用程序使用。

例如,有一個訂單登錄程序,用于登錄從客戶來的新訂單,包括客戶信息、發(fā)貨地址、數(shù)量、價格和付款方式等內(nèi)容;還有一個訂單執(zhí)行程序,用于實際貨物發(fā)送的管理。這兩個程序來自不同軟件廠商。一份新訂單進來之后,訂單登錄程序需要通知訂單執(zhí)行程序發(fā)送貨物。通過在訂單執(zhí)行程序上面增加一層WebService,訂單執(zhí)行程序可以把“AddOrder”函數(shù)“暴露”出來。這樣,每當有新訂單到來時,訂單登錄程序就可以調(diào)用這個函數(shù)來發(fā)送貨物了。

長項3:B2B的集成
用WebService集成應(yīng)用程序,可以使公司內(nèi)部的商務(wù)處理更加自動化。但當交易跨越供應(yīng)商和客戶、突破公司的界限時會怎么樣呢?跨公司的商務(wù)交易集成通常叫做B2B集成。

WebService是B2B集成成功的關(guān)鍵。通過WebService,公司可以把關(guān)鍵的商務(wù)應(yīng)用“暴露”給指定的供應(yīng)商和客戶。例如,把電子下單系統(tǒng)和電子發(fā)票系統(tǒng)“暴露”出來,客戶就可以以電子的方式發(fā)送訂單,供應(yīng)商則可以以電子的方式發(fā)送原料采購發(fā)票。當然,這并不是一個新的概念,EDI(電子文檔交換)早就是這樣了。但是,WebService的實現(xiàn)要比EDI簡單得多,而且WebService運行在Internet上,在世界任何地方都可輕易實現(xiàn),其運行成本就相對較低。不過,WebService并不像EDI那樣,是文檔交換或B2B集成的完整解決方案。WebService只是B2B集成的一個關(guān)鍵部分,還需要許多其它的部分才能實現(xiàn)集成。

用WebService來實現(xiàn)B2B集成的最大好處在于可以輕易實現(xiàn)互操作性。只要把商務(wù)邏輯“暴露”出來,成為WebService,就可以讓任何指定的合作伙伴調(diào)用這些商務(wù)邏輯,而不管他們的系統(tǒng)在什么平臺上運行,使用什么開發(fā)語言。這樣就大大減少了花在B2B集成上的時間和成本,讓許多原本無法承受EDI的中小企業(yè)也能實現(xiàn)B2B集成。
軟件和數(shù)據(jù)重用

軟件重用是一個很大的主題,重用的形式很多,重用的程度有大有小。最基本的形式是源代碼模塊或者類一級的重用,另一種形式是二進制形式的組件重用。

當前,像表格控件或用戶界面控件這樣的可重用軟件組件,在市場上都占有很大的份額。但這類軟件的重用有一個很大的限制,就是重用僅限于代碼,數(shù)據(jù)不能重用。原因在于,發(fā)布組件甚至源代碼都比較容易,但要發(fā)布數(shù)據(jù)就沒那么容易,除非是不會經(jīng)常變化的靜態(tài)數(shù)據(jù)。

webService在允許重用代碼的同時,可以重用代碼背后的數(shù)據(jù)。使用WebService,再也不必像以前那樣,要先從第三方購買、安裝軟件組件,再從應(yīng)用程序中調(diào)用這些組件;只需要直接調(diào)用遠端的WebService就可以了。舉個例子,要在應(yīng)用程序中確認用戶輸入的地址,只需把這個地址直接發(fā)送給相應(yīng)的WebService,這個WebService就會幫你查閱街道地址、城市、省區(qū)和郵政編碼等信息,確認這個地址是否在相應(yīng)的郵政編碼區(qū)域。WebService的提供商可以按時間或使用次數(shù)來對這項服務(wù)進行收費。這樣的服務(wù)要通過組件重用來實現(xiàn)是不可能的,那樣的話你必須下載并安裝好包含街道地址、城市、省區(qū)和郵政編碼等信息的數(shù)據(jù)庫,而且這個數(shù)據(jù)庫還是不能實時更新的。

另一種軟件重用的情況是,把好幾個應(yīng)用程序的功能集成起來。例如,要建立一個局域網(wǎng)上的門戶站點應(yīng)用,讓用戶既可以查詢聯(lián)邦快遞包裹,查看股市行情,又可以管理自己的日程安排,還可以在線購買電影票?,F(xiàn)在Web上有很多應(yīng)用程序供應(yīng)商,都在其應(yīng)用中實現(xiàn)了這些功能。一旦他們把這些功能都通過WebService“暴露”出來,就可以非常容易地把所有這些功能都集成到你的門戶站點中,為用戶提供一個統(tǒng)一的、友好的界面。

將來,許多應(yīng)用程序都會利用WebService,把當前基于組件的應(yīng)用程序結(jié)構(gòu)擴展為組件/WebService的混合結(jié)構(gòu),可以在應(yīng)用程序中使用第三方的WebService提供的功能,也可以把自己的應(yīng)用程序功能通過WebService提供給別人。兩種情況下,都可以重用代碼和代碼背后的數(shù)據(jù)。

2、webservice的弊端

短處1:單機應(yīng)用程序

目前,企業(yè)和個人還使用著很多桌面應(yīng)用程序。其中一些只需要與本機上的其它程序通信。在這種情況下,最好就不要用WebService,只要用本地的API就可以了。COM非常適合于在這種情況下工作,因為它既小又快。運行在同一臺服務(wù)器上的服務(wù)器軟件也是這樣。最好直接用COM或其它本地的API來進行應(yīng)用程序間的調(diào)用。當然WebService也能用在這些場合,但那樣不僅消耗太大,而且不會帶來任何好處。

短處2:局域網(wǎng)的同構(gòu)應(yīng)用程序
在許多應(yīng)用中,所有的程序都是用VB或VC開發(fā)的,都在windows平臺下使用COM,都運行在同一個局域網(wǎng)上。例如,有兩個服務(wù)器應(yīng)用程序需要相互通信,或者有一個Win32或WinForm的客戶程序要連接局域網(wǎng)上另一個服務(wù)器的程序。在這些程序里,使用DCOM會比SOAP/http有效得多。與此相類似,如果一個.NET程序要連接到局域網(wǎng)上的另一個.NET程序,應(yīng)該使用.NETremoting。有趣的是,在.NETremoting中,也可以指定使用SOAP/http來進行WebService調(diào)用。不過最好還是直接通過TCP進行RPC調(diào)用,那樣會有效得多。

總之,只要從應(yīng)用程序結(jié)構(gòu)的角度看,有別的方法比WebService更有效、更可行,那就不要用WebService。

四、webservice代碼實例

實現(xiàn)不同項目間接口調(diào)動,并通過webservice傳遞對象數(shù)據(jù)~

服務(wù)端項目代碼

1、pom

<!--webservice-->
<dependency>
? ? ?<groupId>org.springframework.boot</groupId>
? ? ?<artifactId>spring-boot-starter-web-services</artifactId>
?</dependency>
?<dependency>
? ? ?<groupId>org.apache.cxf</groupId>
? ? ?<artifactId>cxf-rt-frontend-jaxws</artifactId>
? ? ?<version>3.1.12</version>
?</dependency>
?<dependency>
? ? ?<groupId>org.apache.cxf</groupId>
? ? ?<artifactId>cxf-rt-transports-http</artifactId>
? ? ?<version>3.1.12</version>
?</dependency>

2、config配置類

package com.guor.config;

import com.guor.service;
import com.guor.service.implImpl;
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 createServletRegistrationBean() {
? ? ? ? return new ServletRegistrationBean(new CXFServlet(), "/WebService/*");
? ? }

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

? ? @Bean
? ? public WebService myService() {
? ? ? ? return new WebServiceImpl();
? ? }

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

}

3、接口

package com.guor.service;

import com.guor.entity.dto.User;

import javax.jws;

@WebService(name = "WebService", // 暴露服務(wù)名稱
? ? ? ? targetNamespace = "http://service.guor.com"http:// 命名空間,一般是接口的包名倒序
)
public interface WebService {

? ? User sendInfo(User user);
}
package com.guor.service.impl;

import com.guor.entity.dto.User;
import com.guor.service;
import org.springframework.stereotype.Service;

import javax.jws;


@WebService(serviceName = "WebService", // 與接口中指定的服務(wù)name一致
? ? ? ? targetNamespace = "http://service.guor.com", // 與接口中的命名空間一致,一般是接口的包名倒
? ? ? ? endpointInterface = "com.guor.service"http:// 接口地址
)
@Service
public class WebServiceImpl implements WebService {

? ? @Override
? ? public User sendInfo(User user) {
? ? ? ? return user;
? ? }
}

 客戶端項目代碼:

1、創(chuàng)建一個一模一樣的接口

package com.guor.service;

import com.guor.entity.dto.User;

import javax.jws;

@WebService(name = "WebService", // 暴露服務(wù)名稱
? ? ? ? targetNamespace = "http://service.guor.com"http:// 命名空間,一般是接口的包名倒序
)
public interface WebService {

? ? User sendInfo(User user);
}

2、webservice工具類

?/**
? ? ?* webservice接口地址
? ? ?*/
? ? private static String address = "http://10.4.66.7:9992/MyProject/WebService/api?wsdl";

? ? /**
? ? ?* 通過webservice發(fā)送EC企業(yè)信息
? ? ?* @param User
? ? ?* @return
? ? ?*/
? ? public static User sendInfo(User user) {
? ? ? ? try {
? ? ? ? ? ? // 代理工廠
? ? ? ? ? ? JaxWsProxyFactoryBean jaxWsProxyFactoryBean = new JaxWsProxyFactoryBean();
? ? ? ? ? ? // 設(shè)置代理地址
? ? ? ? ? ? jaxWsProxyFactoryBean.setAddress(address);
? ? ? ? ? ? //添加用戶名密碼攔截器
? ? ? ? ? ? //jaxWsProxyFactoryBean.getOutInterceptors().add(new LoginInterceptor("root","admin"));;
? ? ? ? ? ? // 設(shè)置接口類型
? ? ? ? ? ? jaxWsProxyFactoryBean.setServiceClass(class);
? ? ? ? ? ? // 創(chuàng)建一個代理接口實現(xiàn)
? ? ? ? ? ? WebService service = (WebService) jaxWsProxyFactoryBean.create();

? ? ? ? ? ? return service.sendInfo(user);
? ? ? ? } catch (Exception e) {
? ? ? ? ? ? return null;
? ? ? ? }
? ? }

到此這篇關(guān)于webservice實現(xiàn)springboot項目間接口調(diào)用與對象傳遞示例的文章就介紹到這了,更多相關(guān)springboot間接口調(diào)用與對象傳遞內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java實戰(zhàn)之制作在線音樂網(wǎng)站

    Java實戰(zhàn)之制作在線音樂網(wǎng)站

    這篇文章主要介紹了如何通過Java實現(xiàn)一個精美風的在線音樂網(wǎng)站,文章采用到了JSP、JQuery、Ajax等技術(shù),感興趣的小伙伴可以了解一下
    2022-02-02
  • RedisTemplate常用方法總結(jié)

    RedisTemplate常用方法總結(jié)

    本文主要介紹了RedisTemplate常用方法總結(jié),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • SpringBoot項目的多文件兼多線程上傳下載

    SpringBoot項目的多文件兼多線程上傳下載

    本文主要介紹了SpringBoot項目的多文件兼多線程上傳下載,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04
  • ssm框架Springmvc文件上傳實現(xiàn)代碼詳解

    ssm框架Springmvc文件上傳實現(xiàn)代碼詳解

    這篇文章主要介紹了ssm框架Springmvc文件上傳實現(xiàn)代碼詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • Spring?AOP原理及動態(tài)代理

    Spring?AOP原理及動態(tài)代理

    這篇文章主要介紹了Spring?AOP原理及動態(tài)代理,文章通過圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09
  • Eclipse手動導入DTD文件實現(xiàn)方法解析

    Eclipse手動導入DTD文件實現(xiàn)方法解析

    這篇文章主要介紹了Eclipse手動導入DTD文件實現(xiàn)方法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-10-10
  • java、android可用的rtp封包解包h264案例

    java、android可用的rtp封包解包h264案例

    這篇文章主要介紹了java、android可用的rtp封包解包h264案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • Spring Boot 集成 Mybatis Plus 自動填充字段的實例詳解

    Spring Boot 集成 Mybatis Plus 自動填充字段的實例詳解

    這篇文章主要介紹了Spring Boot 集成 Mybatis Plus 自動填充字段,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • Java之SM4加密解密的實現(xiàn)

    Java之SM4加密解密的實現(xiàn)

    這篇文章主要介紹了Java之SM4加密解密的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • java中串行流和并行流區(qū)別小結(jié)

    java中串行流和并行流區(qū)別小結(jié)

    串行流和并行流是兩種處理流操作的方式,串行流適用于小數(shù)據(jù)量且簡單的數(shù)據(jù)處理,并行流則適用于大規(guī)模數(shù)據(jù)處理和需要并行計算的場景,能夠利用多線程并行處理,選擇使用哪種流取決于數(shù)據(jù)量大小、處理復(fù)雜度和是否需要并行計算,下面就來具體介紹一下兩者的區(qū)別
    2024-09-09

最新評論