国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Web Service 筆記-fkjava

2019-11-15 00:57:17
字體:
來源:轉載
供稿:網友
Web Service 筆記-fkjava========================第一講=======================WebService概述=====================================================Web Service 不是框架,更甚至不是一種技術,而是一種跨平臺,跨語言的規范。Web Service實際用途:1.同一公司的新,舊系統的整合。2.不同公司的業務整合。3.內容聚合。CXFAxis(Apache) --> Axis2(Apache)XFire --> CXF(XFire + Celtrix)XFire (Web Service框架)Celtrix (ESB框架)SOA(面向服務的架構)--所有組件都是即插即用1.各種提供服務的組件。(Web Service)2.企業服務總線(EnterPRise Service Bus ,ESB)CXF號稱SOA框架CXF 內置了一個Jetty Web服務器======================第二講/第三講======================使用CXF開發WebService服務器端和客戶端=========================================================用CXF開發Web Service 服務器端:/****************每個WebService組件需要兩個組件:接口和實現類****************/1)開發一個Web Service 業務接口,接口用@WebService修飾2)開發一個Web Service 實現類,接口用@WebService修飾@WebService(endpointInterface="com.lr.HelloWorld",ServiceName="MyServiceName")3)發布WebService--------------------------------------------用CXF開發Web Service客戶端:1)用CXF提供的wsdl2java工具,根據WSDL文檔生成相應的java代碼WSDL-Web Service Definition Language任何語言實現了Web Service ,都需要提供并暴露WSDL文檔wsdl2java http://192.168.10.254/fkjava?wsdl2)找到wsdl2java所生成類中,一個繼承了Service的類。該類的實例可當成工廠類使用。3)調用Service子類的實例的getXXXPort方法,返回遠程Web Service的代理()。=========================第四講===========================使用CXF處理JavaBean式復合類型和List集合類型的形參和返回值==========================================================形參/返回值1)當形參/返回值的類型是String、基本數據類型時,可以輕松處理;2)當形參/返回值類型是javabean式的復合類、List集合、數組等時;在實際的項目中,Web Service組件并不會自己實現業務功能,他只是調用業務邏輯組件的方法來暴露Web Servicewsdl2java生成的javabean沒有含參數的構造器,javabean 應該實現equals方法以便在List中查找========================第五講/第六講=======================WebService核心============================================================/********************************xml里的兩個屬性:targetNamespace - 相當于java中的package不同的命名空間在不同的文件中xmlns- 相當于java中的importxmlns="targetNamespace"xmlns:p = "targetNamespace" p是代號可以隨便寫,以便使用********************************/Web Service 三大基礎1.WSDL : Web Service Defination Language Web Service 定義語言)通俗地說,WSDL文檔描述了WebService如下3個方面:-WHAT:該WebService包含什么操作-HOW:該WebService的操作應該怎么調用-WHERE:該WebService的服務地址/*******************************只要得到Web Service的WSDL文檔,接下來程序就可以調用Web Service*******************************/WSDL結構.png-------------------------------------------Web Service 接口-types(標準的Schema)-message(2N個)-portType(N個Operation)Web Service實現-binding (N個更詳細的operation)-service (指定Web Service的服務器名稱/地址)-------------------------------------------一次WebService的調用--其實并不是方法調用,而是發送SOAP消息(即XML片段);調用一次Web Service 的本質:1.客戶端把調用方法參數,轉化為XML文檔片段(SOAP消息)--該文檔片段必須符合WSDL定義的格式;2.通過網絡把XML文檔片段傳給服務器;3.服務器接收到XML文檔片段;4.服務器解析XML文檔片段,提取其中的數據,并把數據轉換成調用Web Service所需的參數值;5.服務器端執行方法;6.把執行方法得到的返回值再次轉換生成XML文檔片段(SOAP消息)--該文檔片段必須符合WSDL定義的格式;7.通過網絡把XML文檔片段傳給客戶端;8.客戶端接收到XML文檔片段;9.客戶端解析XML文檔片段,提取其中的數據,并把數據轉換調用Web Service的返回值;從上面調用本質來看,要一個語言支持Web Service,唯一的要求是:該語言支持XML文檔解析、生成,支持網絡傳輸。2.SAOP:Simple Object access Protocol(簡單對象訪問協議)=========================第七講=============================處理Map等CXF無法自動轉換的復合數據類型的形參和返回值==========================================================在CXF開發中,如果遇到系統無法自動處理的類型,就需要這樣處理思路:提供一個轉換器(繼承XmlAdapter),負責把CXF無法自動處理的類型,轉換為可以處理的類型。1.使用@XmlJavaTypeAdapter注釋修飾CXF無法自動處理的類型;使用該Annotation處理的時候,需要指定一個轉換器2.實現自己的轉換器,需要開發一個CXF可以處理的類型;==========================第八講/第十講========================CXF攔截器===========================================================Web Service 急需解決的問題:如何進行權限控制?攔截器.png思路:服務器端要求input消息攜帶用戶名密碼信息,否則拒絕調用。如果不用CXF等框架,SOAP消息的生成、解析都是由程序員負責的,因此無論是添加用戶名密碼信息,還是提取用戶名密碼信息,都可以由程序員的代碼完成。如果用CXF等框架,SOAP消息的生成、解析都是由CXF等框架來完成的。為了讓程序員能訪問、修改CXF框架所生成的XML(SOAP消息),CXF提供了攔截器。**服務器端添加攔截器1.獲取Endpoint的publish方法返回值;2.調用該方法返回值的getInInterceptors()、getOutInterceptors()方法獲取In、Out攔截器列表,添加攔截器;
  1. //調用Endpoint的publish方法發布Web Service
  2. EndpointImpl ep =EndPoint.publish("http://10.1.14.6");
  3. //添加In攔截器
  4. ep.getInInterceptors().add(e);
  5. //添加Out攔截器
  6. ep.getOutInterceptors().add(e);
**客戶端添加攔截器 1.調用ClientProxy的getClient方法,調用該方法以遠程WebService的代理為參數; 2.調用Client對象的getInInterceptors()、getOutInterceptors()方法獲取In、Out攔截器列表,添加攔截器;
  1. HelloWorldWs factory =newHelloWorldWs();
  2. //此處返回的是遠程WebService的代理
  3. HelloWorld hw = factory.getHelloWorldPort();
  4. Client client =ClientProxy.getClient(hw);
  5. client.getInInterceptors().add(e);
  6. client.getOutInterceptors().add(e);
**自定義攔截器: 需要實現Interceptor接口,實際上,一般會繼承AbstractPhaseInterceptor CXF已經實現了一些攔截器但是API文檔中未提及;
  1. // 服務器添加校驗Header攔截器
  2. //通過PhaseInterceport,可以指定攔截器在哪個階段起作用
  3. publicclassAuthInterceptorextendsAbstractPhaseInterceptor<SoapMessage>{
  4. publicAuthInterceptor(){
  5. //該攔截器會在“調用之前”攔截;Phase是階段常量
  6. super(Phase.PRE_INVOKE);
  7. }
  8. //實現自己的攔截器時,需要實現handleMessage方法
  9. //handleMessage方法中的形參就是被攔截到的SOAP消息
  10. //一旦程序獲取到SOAP消息,就可以解析或修改SOAP消息
  11. @Override
  12. publicvoid handleMessage(SoapMessage msg)throwFault{
  13. //得到SOAP消息的所有Header
  14. List<Header> headers = msg.getHeaders();
  15. }
  16. }
  17. //客戶端添加Header消息攔截器
  18. publicclassAddHeaderInterceptorextendsAbstractPhaseInterceptor<SoapMessage>{
  19. privateString userId;
  20. privateString userPass;
  21. publicAddHeaderInterceptor(String userId,String userPass){
  22. super(Phase.PREPAR_SEND);//準備發送時調用
  23. this.userId = userId;
  24. this.userPass = userPass;
  25. }
  26. @Override
  27. publicvoid handleMessage(SoapMessage msg)throwsFault{
  28. List<Header> headers = msg.getHeaders();
  29. //把ele元素包裝成Header,并添加到SOAP消息的Header列表
  30. headers.add(newHeader(newQName("fkjava"),ele));
  31. }
  32. }
====================第九講/第十講/第十一講=====================Web Service核心之SOAP協議詳解========================================================在服務器端添加In/Out日志攔截器,從日志分析; SOAP Header 可選的,有程序員控制添加; Body Body元素總是默認的,Body元素里可有兩種情況 -當Web Service交互正確時,Body元素里的內容由WSDL控制; -當Web Service交互出錯時,Body元素內容是Fault===========================第十二講/第十三講========================CXF與Spring整合==============================================================可以在傳統的Java EE應用的基礎上添加一層Web Service。我們的Java EE應用就可以對外暴露成Web Service,這樣就允許任何平臺任何語言編寫的程序來調用這個Java EE應用。在傳統SSH項目基礎上增加WebService的步驟1.復制CXF的Jar包;(最核心6個)2.在web.xml配置CXF的核心控制器:CXFServlet;3.在Spring配置文件中倒入CXF提供Schema,XML配置文件;4.在Spring配置文件中使用jaxws:endpoint元素暴露WebService;5.如果要添加攔截器,在jaxws:endpoint元素里添加inInterceptors,outInterceptors子元素;**implementor指定WebService的服務提供者。支持兩種方式:a.直接給定服務器提供者的類名(不推薦);<javws:endpoint implementor="org.lr.cxf.ws.impl.HelloWorldWs" address="/lrservice"></javws:endpoint>b.設置為容器中一個bean.<bean id="helloWorldWs" class="org.lr.cxf.ws.impl.HelloWorldWs" p:us-ref="userService"/><!-- id前要加# --><javws:endpoint implementor="#helloWorldWs" address="/lrservice"></javws:endpoint>===========================第十四講=============================CXF與Spring整合的第二種方式_讓JavaEE應用依賴第三方WebService--就是調用WebService==============================================================1.復制CXF的Jar包;(最核心6個)2.在web.xml配置CXF的核心控制器:CXFServlet;3.在Spring配置文件中倒入CXF提供Schema,XML配置文件;4.在Spring配置文件中使用jaxws:client元素調用WebService;5.如果要添加攔截器,在jaxws:client元素里添加inInterceptors,outInterceptors子元素;**為了保證該Web Service代理對象可以自動裝配給Action,應該保證該id屬性值與Action中setter方法名有對應關系<jaxws:client id="hw" serviceClass="org.lr.cxf.ws.HelloWorld" address="http://192.168.10.254:9999/lrservice"></jaxws:client>

來自為知筆記(Wiz)

附件列表
  • WSDL結構.png
  • 攔截器.png


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 云阳县| 从化市| 天祝| 闽清县| 石门县| 大连市| 上虞市| 嵊州市| 迭部县| 宝坻区| 安岳县| 揭西县| 河东区| 河南省| 南阳市| 昌都县| 威海市| 明溪县| 邢台市| 卫辉市| 株洲市| 南江县| 桃江县| 西乡县| 齐齐哈尔市| 塘沽区| 睢宁县| 平南县| 通州区| 紫金县| 临洮县| 宣化县| 高清| 万山特区| 乡宁县| 遂平县| 浦城县| 淮南市| 荔波县| 旌德县| 普定县|