1. <nobr id="easjo"><address id="easjo"></address></nobr>

      <track id="easjo"><source id="easjo"></source></track>
      1. 
        

      2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
      3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>
          貴州做網站公司
          貴州做網站公司~專業!靠譜!
          10年網站模板開發經驗,熟悉國內外開源網站程序,包括DEDECMS,WordPress,ZBlog,Discuz! 等網站程序,可為您提供網站建設,網站克隆,仿站,網頁設計,網站制作,網站推廣優化等服務。我們專注高端營銷型網站,企業官網,集團官網,自適應網站,手機網站,網絡營銷,網站優化,網站服務器環境搭建以及托管運維等。為客戶提供一站式網站解決方案?。?!

          webservice的幾種調用方式

          來源:互聯網轉載 時間:2023-09-08 10:02:00

          1、基本概念

          1.1什么是Web Services?

          ????? 舉個例子,如果我們要在自己的程序里面展示天氣預報,那怎么弄?正確的做法是我們發送一個請求到一個系統,他會給我們返回來天氣情況。這個就是一個webservice

          webService定義:即Web服務,它是一種跨編程語言和跨操作系統平臺的遠程調用技術

          1.2.Web Services 平臺元素

          SOAP:簡易對象訪問協議,soap用來描述傳遞信息的格式?;镜?Web services 平臺是 XML + HTTP
          WSDL:是基于 XML 的用于描述 Web Services 以及如何訪問 Web Services 的語言
          UDDI:通用描述、發現及整合,用來管理、分發、查詢webService。

          2、JAVA中如何調用別人發布的WebService

          2.1獲取webservice的wsdl文檔

          2.11、什么是wsdl文檔

          wsdl跟java一樣,也是一種語言,是通過xml的形式說明該webservice如何調用

          2.12、如何獲取wsdl文檔

          通過在webservice的URL后面加上?wsdl的方式。比如天氣預報的的就是http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl

          2.13、WSDL解析

          wsdl文檔從下往上讀
          Types - 數據類型定義的容器,它使用某種類型系統(一般地使用XML Schema中的類型系統)、(入參和出參的數據類型)。
          Message - 通信消息的數據結構的抽象類型化定義,使用Types所定義的類型來定義整個消息的數據結構(入參和出參)。
          Operation - 對服務中所支持的操作的抽象描述,一般單個Operation描述了一個訪問入口的請求/響應消息對(方法)。
          PortType - 對于某個訪問入口點類型所支持的操作的抽象集合,這些操作可以由一個或多個服務訪問點來支持(服務類)。
          Binding - 特定服務訪問點與具體服務類的綁定(不看內容,看關系)。
          Port - 定義為webservice單個服務訪問點。
          Service- 相關服務訪問點的集合。

          2.2、通過wsdl文檔生成客戶端調用代碼

          2.21使用jdk自帶的命令生成

          配置java環境變量后在命令窗口中輸入wsimport –s . http://xxxx.xx.xx/xxx?wsdl即可生成java代碼
          注意:-s不能分開,-s后面有個小點,用于指定源代碼生成的目錄。點即當前目錄。如果使用了-s參數則會在目錄下生成兩份代碼,一份為.class代碼。一份為.java代碼。.class代碼,可以經過打包以后使用。.java代碼可以直接Copy到我們的項目中運行


          2.3生成代碼后如何調用

          先把生成的代碼復制到項目中,然后通過讀wsdl文檔來調用

          //wsdl文檔中service的name
          SayHelloIntefaceService ss = new SayHelloIntefaceService();
          //wsdl文檔中portType的name
          SayHelloInteface shf=ss.getSayHelloIntefacePort();
          //wdl文檔中complexType的name
          String str=shf.sayhellow("lisi");
          //str即為webservice的服務端返回的信息
          System.out.println(str);

          3、如何發布一個webservice

          Endpoint.publish("http://127.0.0.1:8080/sayHello", new SayHellowIntefaceImpl());

          主要類有:

          (1)@WebService - 它是一個注解,用在類上指定將此類發布成一個webservice服務

          (2)Endpoint – 此類為端點服務類,它的方法publish用于將一個已經添加了@WebService注解對象綁定到一個地址的端口上。Endpoint是jdk提供的一個專門用于發布服務的類,它的publish方法接收兩個參數,一個是本地的服務地址,二是提供服務的類。它位于javax.xml.ws.*包中

          static Endpoint.publish(String address, Object implementor) //在給定地址處針對指定的實現者對象創建并發布端點。

          //stop方法用于停止服務

          其他注意事項:

          • 給類添加上@WebService注解后,類中所有的非靜態方法都將會對外公布。不支持靜態方法,final方法。
          • 如果希望某個方法(非static,非final)不對外公開,可以在方法上添加@WebMethod(exclude=true),阻止對外公開。
          • 如果一個類上,被添加了@WebService注解,則必須此類至少有一個可以公開的方法,否則將會啟動失敗。
          • 服務類中不能沒有方法
          • @WebMethod(exclude=true)是屏蔽方法
            ?

          4、其他調用webservice的方式

          4.11使用ajax調用

          var xhr; function invoke(){
          ? if(window.ActiveXObject){
          ? xhr = new ActiveXObject("Microsoft.XMLHTTP");
          }else{
          ??? xhr = new XMLHttpRequest();
          }

          //指定請求地址
          ?var url = "http://127.0.0.1:7777/hello?wsdl";
          ?//定義請求類型和地址和異步
          ? xhr.open("POST", url, true);
          ? //設置Content-Type
          ? xhr.setRequestHeader("Content-Type", "text/xml;charset=UTF-8");
          ? //指定回調方法
          ? xhr.onreadystatechange = back;

          ?? var textVal = document.getElementById("mytext").value;
          ??? //組裝消息體的數據
          ?var data = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:
          ? +'<soapenv:Body>'
          ? +'<q0:sayHello>'
          ? +'<arg0>'+textVal+'</arg0>'
          ? +'</q0:sayHello>'
          ? +'</soapenv:Body>'
          ? +'</soapenv:Envelope>';
          ? xhr.send(data);

          }
          function back(){
          ?if(xhr.readyState == 4){
          ? if(xhr.status == 200){
          ?? var doc = xhr.responseXML;
          ?? alert(doc);
          ?? alert(xhr.responseText);
          ?? var tag = doc.getElementsByTagName("return")[0];
          ?? alert(tag)
          ?? }
          ? }
          ?}

          4.12通過URLConnection調用

          4.12、通過URLConnection調用

          //創建url地址
          URL url = new URL("http://192.168.1.104:8080/hello");
          //打開連接
          URLConnection conn = url.openConnection();
          //轉換成HttpURL
          HttpURLConnection httpConn = (HttpURLConnection) conn;
          //打開輸入輸出的開關
          httpConn.setDoInput(true);
          httpConn.setDoOutput(true);
          //設置請求方式
          httpConn.setRequestMethod("POST");
          //設置請求的頭信息
          httpConn.setrequestproperty("Content-type", "text/xml;charset=UTF-8");
          //拼接請求消息
          String data = "<soapenv:Envelope xmlns:soapenv=" +
          ??????? "\"http://schemas.xmlsoap.org/soap/envelope/\" " +
          ??????? "xmlns:q0=\"http://server.rl.com/\" " +
          ??????? "xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" " +
          ??????? "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">"
          ??????? +"<soapenv:Body>"
          ??????? +"<q0:sayHello>"
          ??????? +"<arg0>renliang</arg0> "
          ????? +"</q0:sayHello>"
          ????? +"</soapenv:Body>"
          ????? +"</soapenv:Envelope>";
          //獲得輸出流
          OutputStream out = httpConn.getOutputStream();
          //發送數據
          out.write(data.getBytes());
          //判斷請求成功
          if(httpConn.getResponseCode() == 200){
          ??? //獲得輸入流
          ??? InputStream in = httpConn.getInputStream();
          ??? //使用輸入流的緩沖區
          ??? BufferedReader reader = new BufferedReader(new InputStreamReader(in));
          ??? StringBuffer sb = new StringBuffer();
          ??? String line = null;
          ??? //讀取輸入流
          ??? while((line = reader.readLine()) != null){
          ??????? sb.append(line);
          ??? }
          ??? //創建sax的讀取器
          ??? SAXReader saxReader = new SAXReader();
          ??? //創建文檔對象
          ??? Document doc = saxReader.read(new StringReader(sb.toString()));
          ??? //獲得請求響應return元素
          ??? List<Element> eles = doc.selectNodes("//return");
          ??? for(Element ele : eles){
          ??????? System.out.println(ele.getText());
          ??? }
          }

          4.13、使用jquery調用cxf

          $(function(){
          ??????? $("#mybutton").click(function(){
          ??????????? var data = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:q0="http://server.web.cxf.rl.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">'
          ????????????????? +'<soapenv:Body>'
          ????????????????? +'<q0:sayHello>'
          ????????????????? +'?? <arg0>sss</arg0>'
          ????????????????? +' </q0:sayHello>'
          ????????????????? +'</soapenv:Body>'
          ????????????????? +'</soapenv:Envelope>';

          ??????????????? $.ajax({
          ??????????????????? url:'http://localhost:8080/cxf-web-server/services/hello',
          ??????????????????? type:'post',
          ??????????????????? dataType:'xml',
          ??????????????????? contentType:'text/xml;charset=UTF-8',
          ??????????????????? data:data,
          ??????????????????? success:function(responseText){
          ??????????????????????? alert($(responseText).find('return').text());
          ??????????????????? },
          ??????????????????? error:function(){
          ??????????????????????? alert("error");
          ??????????????????? }
          ??????????????? })
          ??????? })
          ??? })

          ?

          Web Service 元數據注釋(JSR 181)

          @WebService

          1、serviceName: 對外發布的服務名,指定 Web Service 的服務名稱:wsdl:service。缺省值為 Java 類的簡單名稱+Service。(字符串)
          2、endpointInterface: 服務接口全路徑, 指定做SEI(Service EndPoint Interface)服務端點接口
          3、name:此屬性的值包含XML Web Service的名稱。在默認情況下,該值是實現XML Web Service的類的名稱,wsdl:portType 的名稱。缺省值為 Java 類或接口的非限定名稱。(字符串)
          4、portName: ?wsdl:portName。缺省值為 WebService.name+Port。
          5、targetNamespace:指定你想要的名稱空間,是使用接口實現類的包名的反綴
          6、wsdlLocation:指定用于定義 Web Service 的 WSDL 文檔的 Web 地址。Web 地址可以是相對路徑或絕對路徑。(字符串)
          注意:實現類上可以不添加Webservice注解 ?

          @WebMethod?

          注釋表示作為一項 Web Service 操作的方法,將此注釋應用于客戶機或服務器服務端點接口(SEI)上的方法,或者應用于 JavaBeans 端點的服務器端點實現類。
          要點:
          僅支持在使用 @WebService 注釋來注釋的類上使用 @WebMethod 注釋
          1、operationName:指定與此方法相匹配的wsdl:operation 的名稱。缺省值為 Java 方法的名稱。(字符串)
          2、action:定義此操作的行為。對于 SOAP 綁定,此值將確定 SOAPAction 頭的值。缺省值為 Java 方法的名稱。(字符串)
          3、exclude:指定是否從 Web Service 中排除某一方法。缺省值為 false。(布爾值) ?

          @Oneway?

          注釋將一個方法表示為只有輸入消息而沒有輸出消息的 Web Service 單向操作。
          將此注釋應用于客戶機或服務器服務端點接口(SEI)上的方法,或者應用于 JavaBeans 端點的服務器端點實現類 ?

          @WebParam?

          注釋用于定制從單個參數至 Web Service 消息部件和 XML 元素的映射。
          將此注釋應用于客戶機或服務器服務端點接口(SEI)上的方法,或者應用于 JavaBeans 端點的服務器端點實現類。
          1、name :參數的名稱。如果操作是遠程過程調用(RPC)類型并且未指定partName 屬性,那么這是用于表示參數的 wsdl:part 屬性的名稱。
          如果操作是文檔類型或者參數映射至某個頭,那么 -name 是用于表示該參數的 XML 元素的局部名稱。如果操作是文檔類型、
          參數類型為 BARE 并且方式為 OUT 或 INOUT,那么必須指定此屬性。(字符串) ??
          2、partName:定義用于表示此參數的 wsdl:part屬性的名稱。僅當操作類型為 RPC 或者操作是文檔類型并且參數類型為BARE 時才使用此參數。(字符串)
          3、targetNamespace:指定參數的 XML 元素的 XML 名稱空間。當屬性映射至 XML 元素時,僅應用于文檔綁定。缺省值為 Web Service 的 targetNamespace。(字符串)
          4、mode:此值表示此方法的參數流的方向。有效值為 IN、INOUT 和 OUT。(字符串)
          5、header:指定參數是在消息頭還是消息體中。缺省值為 false。(布爾值)

          @WebResult?

          注釋用于定制從返回值至 WSDL 部件或 XML 元素的映射。將此注釋應用于客戶機或服務器服務端點接口(SEI)上的方法,或者應用于 JavaBeans 端點的服務器端點實現類。
          1、name:當返回值列示在 WSDL 文件中并且在連接上的消息中找到該返回值時,指定該返回值的名稱。對于 RPC 綁定,這是用于表示返回值的 wsdl:part屬性的名稱。對于文檔綁定,-name參數是用于表示返回值的 XML 元素的局部名。對于 RPC 和?DOCUMENT/WRAPPED 綁定,缺省值為 return。對于 DOCUMENT/BARE 綁定,缺省值為方法名 + Response。(字符串)
          2、targetNamespace:指定返回值的 XML 名稱空間。僅當操作類型為 RPC 或者操作是文檔類型并且參數類型為 BARE 時才使用此參數。(字符串)
          3、header:指定頭中是否附帶結果。缺省值為false。(布爾值)
          4、partName:指定 RPC 或 DOCUMENT/BARE 操作的結果的部件名稱。缺省值為@WebResult.name。(字符串)

          @HandlerChain?

          注釋用于使 Web Service 與外部定義的處理程序鏈相關聯。只能通過對 SEI 或實現類使用 @HandlerChain 注釋來配置服務器端的處理程序。
          但是可以使用多種方法來配置客戶端的處理程序??梢酝ㄟ^對生成的服務類或者 SEI 使用 @HandlerChain 注釋來配置客戶端的處理程序。此外,可以按程序在服務上注冊您自己的 HandlerResolver 接口實現,或者按程序在綁定對象上設置處理程序鏈。
          1、file:指定處理程序鏈文件所在的位置。文件位置可以是采用外部格式的絕對 java.net.URL,也可以是類文件中的相對路徑。(字符串)
          2、name:指定配置文件中處理程序鏈的名稱。

          ?

          ?

          網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...

          在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...

          在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...

          紅鉆過期后Q秀就沒了?紅鉆服務關閉后,所有秀物品將恢復到期時間,服務期限仍從購買之日起計算,服務期限為6個月。如果商品購買時間超過6個月,商品會在紅鉆關閉后放入破布中;將保存一個月供用戶購買。同時會有提示通知用戶續費。如果超過一個月,該項目將從我的秀中刪除。怎樣打開已過期的郵件?在面板中打開郵箱。02點擊 "文件傳輸站和。03如果有過期的郵件,會保存在這里。你可以選擇那些過期的郵件,點擊右上角的上...

          如何用office publisher編輯小冊子?Office publisher可用于制作小冊子或其他原創出版物。Publisher內置了許多模板,使得制作手冊更容易。首先,啟動軟件,打開宣傳冊模板,或在線下載適當的模板。在頁面中打開模板后,您將看到占位符的文本和圖像,第一個頁面包含占位符的業務信息,您將立即更新這些信息。把這些信息改成你需要的,把圖片改成適合你需要的。你可以保存指紋。Publi...

          CC英語CC是什么意思?TO: to.(寫信給某某)CC:抄送,意思是給寫信給某人的人送一份,主要是給,但因為其他人也需要了解情況,所以抄送給抄送的人。為什么很多女生網名叫cc?我覺得女生網名cc的意思是純潔的意思。每個女孩都希望自己永遠保持年輕純潔,不被世俗化,能保持生命之初擁有的優秀品質。女生的網名cc就有上面的意思,所以很多女生都愿意給自己的網名取名cc。為什么很多女生網名叫cc?可能性如是...

          TOP
          国产初高中生视频在线观看|亚洲一区中文|久久亚洲欧美国产精品|黄色网站入口免费进人
          1. <nobr id="easjo"><address id="easjo"></address></nobr>

              <track id="easjo"><source id="easjo"></source></track>
              1. 
                

              2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
              3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>