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

java對(duì)接webservice接口的4種方式總結(jié)

 更新時(shí)間:2023年10月18日 09:49:56   作者:你好龍卷風(fēng)!??!  
因工作需要和一個(gè)Sap相關(guān)系統(tǒng)以WebService的方式進(jìn)行接口聯(lián)調(diào),之前僅聽(tīng)過(guò)這種技術(shù),但并沒(méi)有實(shí)操過(guò),所以將本次開(kāi)發(fā)進(jìn)行記錄,這篇文章主要給大家介紹了關(guān)于java對(duì)接webservice接口的4種方式,需要的朋友可以參考下

這兩天一直在做外系統(tǒng)對(duì)接,對(duì)方的接口是webservice的形式,調(diào)用起來(lái)有些蛋疼,于是在這里記錄一下我嘗試過(guò)的調(diào)用WebService的三種方式。

方式一:以HttpURLConnection的方式調(diào)用

			String url ="http://127.0.0.1/cwbase/Service/hndg/Hello.asmx?wsdl";
			URL realURL = new URL(url);
			HttpURLConnection connection = (HttpURLConnection) realURL.openConnection();
			connection.setDoOutput(true);
			connection.setDoInput(true);
			connection.setRequestProperty("Content-Type", "text/xml; charset=UTF-8");
			connection.setRequestProperty("content-length",String.valueOf(xmlData.length));
			connection.setRequestMethod("POST");
			DataOutputStream printOut = new DataOutputStream(connection.getOutputStream());
			printOut.write(xmlOutString.getBytes("UTF-8"));//xmlOutString是自己拼接的xml,這種方式就是通過(guò)xml請(qǐng)求接口
			printOut.flush();
			printOut.close();
			// 從連接的輸入流中取得回執(zhí)信息
			InputStream inputStream = connection.getInputStream(); 
			InputStreamReader isr = new InputStreamReader(inputStream,"UTF-8");
			BufferedReader bufreader = new BufferedReader(isr); 
			String xmlString = ""; 
			int c;
			while ((c = bufreader.read()) != -1) { 
				 xmlString += (char) c; } 
			isr.close();
			//處理返回的xml信息
			DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
			DocumentBuilder db = dbf.newDocumentBuilder();
			Document d = db.parse(new ByteArrayInputStream(xmlString.getBytes("UTF-8")));
			//從對(duì)方的節(jié)點(diǎn)中取的返回值(節(jié)點(diǎn)名由對(duì)方接口指定)
			String returnState = d.getElementsByTagName("ReturnStatus").item(0).getFirstChild().getNodeValue();

方式二:使用apache-cxf生成java類(lèi)調(diào)用

下載apache-cxf并配置環(huán)境變量(參照J(rèn)AVA環(huán)境變量配置),配置成功后cmd輸入wsdl2java -help即可驗(yàn)證是否成功。
接著在cmd中輸入wsdl2java -encoding utf-8 -d 生成路徑 接口地址,即可在指定路徑生成接口JAVA文件,生成后的JAVA類(lèi)如下圖:

生成以后調(diào)用起來(lái)就很簡(jiǎn)單了,例子如下:

		String result = "";
		NC65To63ProjectService service = new NC65To63ProjectService();
		NC65To63ProjectServicePortType servicePort =service.
				getNC65To63ProjectServiceSOAP11PortHttp(); 
		result = servicePort.receiptProject(json);

方式三:使用AXIS調(diào)用WebService

為了避免找不到對(duì)方包,所以我直接把包貼在頂上了。

import org.apache.axis.client.Service;
import org.apache.axis.client.Call;
import org.apache.axis.encoding.XMLType;

import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;

		String result = "";
		String url = "http://127.0.0.1/uapws/service/nc65to63projectsysplugin";//這是接口地址,注意去掉.wsdl,否則會(huì)報(bào)錯(cuò)
		Service service = new Service();
		Call call = (Call) service.createCall();
		call.setTargetEndpointAddress(url);
		String parametersName = "string";//設(shè)置參數(shù)名
		call.setOperationName("receiptProject");//設(shè)置方法名
		call.addParameter(parametersName, XMLType.XSD_STRING, ParameterMode.IN);//方法參數(shù),1參數(shù)名、2參數(shù)類(lèi)型、3.入?yún)?
		call.setReturnType(XMLType.XSD_STRING);//返回類(lèi)型
		String str = json;
		Object resultObject = call.invoke(new Object[] { str });//調(diào)用接口
		result = (String) resultObject;

方式四:試用httpclient

public static void main(String args[]) { 
// 第一種方法 ----------------------------------------------
JaxWsDynamicClientFactory factory = JaxWsDynamicClientFactory.newInstance();
		// 創(chuàng)建客戶(hù)端連接
		Client client = factory.createClient("http://127.0.0.1:8080/xx/service/userOrg?wsdl");
		Object[] res = null;
		try {
			QName operationName = new QName("http://impl.webservice.userorg.com/","findUser");//如果有命名空間需要加上這個(gè),第一個(gè)參數(shù)為命名空間名稱(chēng),調(diào)用的方法名稱(chēng)
			res = client.invoke(operationName, "admin");//后面為WebService請(qǐng)求參數(shù)數(shù)組
			System.out.println(res[0]);
		}catch (Exception e) {
			e.printStackTrace();
		}

 // 第二種方法 ----------------------------------------------
// 被<![CDATA[]]>這個(gè)標(biāo)記所包含的內(nèi)容將表示為純文本 
String xmlData = "<![CDATA[<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + 
"<accounts>" + 
"<account>" + 
"<accId>帳號(hào)ID(必填)</accId>" + 
"<userPasswordMD5>密碼</userPasswordMD5>" + 
"<userPasswordSHA1>密碼</userPasswordSHA1>" + 
"其中userPasswordSHA1標(biāo)簽代表SHA1加密后的密碼,userPasswordMD5標(biāo)簽代表MD5加密后的密碼" + 
"<name>姓名</name>" + 
"<sn>姓</sn>" + 
"<description>描述 </description>" + 
"<email>郵箱 </email>" + 
"<gender>性別</gender>" + 
"<telephoneNumber>電話號(hào)碼</telephoneNumber>" + 
"<mobile>移動(dòng)電話</mobile>" + 
"<startTime>用戶(hù)的開(kāi)始生效時(shí)間(YYYY-MM-DD HH:mm:SS)</startTime>" + 
"<endTime>用戶(hù)結(jié)束生效時(shí)間(YYYY-MM-DD HH:mm:SS) </endTime>" + 
"<idCardNumber>身份證號(hào)碼</idCardNumber>" + 
"<employeeNumber>工號(hào) </employeeNumber>" + 
"<o>用戶(hù)所屬的組織的編碼號(hào) </o>" + 
"<employeeType>用戶(hù)類(lèi)型</employeeType>" + 
"<supporterCorpName>所在公司名稱(chēng) </supporterCorpName>" + 
"</account>" + 
"</accounts>]]>";

//調(diào)用方法
String method = "sayHello";
   method = "getUserList";
   
String data="<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ser=\"http://impl.webservice.platform.hotent.com/\">"+
   "<soapenv:Body>"+
      "<ser:"+method+">"+
         "<arg0>"+ xmlData + "</arg0>"+
      "</ser:"+method+">"+
   "</soapenv:Body>"+
"</soapenv:Envelope>";
String httpUrl="http://127.0.0.1:8080/xx/service/helloWorld?wsdl";
   httpUrl="http://127.0.0.1:8080/xx/service/userOrg?wsdl";
try {
//第一步:創(chuàng)建服務(wù)地址  
   URL url = new URL(httpUrl);  
   //第二步:打開(kāi)一個(gè)通向服務(wù)地址的連接  
   HttpURLConnection connection = (HttpURLConnection) url.openConnection();  
   //第三步:設(shè)置參數(shù)  
   //3.1發(fā)送方式設(shè)置:POST必須大寫(xiě)  
   connection.setRequestMethod("POST");  
   //3.2設(shè)置數(shù)據(jù)格式:content-type  
   connection.setRequestProperty("content-type", "text/xml;charset=utf-8");  
   //3.3設(shè)置輸入輸出,因?yàn)槟J(rèn)新創(chuàng)建的connection沒(méi)有讀寫(xiě)權(quán)限,  
   connection.setDoInput(true);  
   connection.setDoOutput(true);  

   //第四步:組織SOAP數(shù)據(jù),發(fā)送請(qǐng)求  
   String soapXML = data;
   //將信息以流的方式發(fā)送出去
   // DataOutputStream.writeBytes將字符串中的16位的unicode字符以8位的字符形式寫(xiě)到流里面
   
   OutputStream os = connection.getOutputStream();  
   os.write(soapXML.getBytes());  
   //第五步:接收服務(wù)端響應(yīng),打印  
   int responseCode = connection.getResponseCode();  
   System.out.println("responseCode: "+responseCode);
   if(200 == responseCode){//表示服務(wù)端響應(yīng)成功  
   //獲取當(dāng)前連接請(qǐng)求返回的數(shù)據(jù)流
       InputStream is = connection.getInputStream();  
       InputStreamReader isr = new InputStreamReader(is);  
       BufferedReader br = new BufferedReader(isr);  
         
       StringBuilder sb = new StringBuilder();  
       String temp = null;  
       while(null != (temp = br.readLine())){  
           sb.append(temp);  
       }  
       
       is.close();  
       isr.close();  
       br.close(); 
       System.out.println(StringEscapeUtils.unescapeXml(sb.toString()));    //轉(zhuǎn)義
       System.out.println(sb.toString());  
       
    } else { //異常信息
   InputStream is = connection.getErrorStream();    //通過(guò)getErrorStream了解錯(cuò)誤的詳情,因?yàn)殄e(cuò)誤詳情也以XML格式返回,因此也可以用JDOM來(lái)獲取。  
   InputStreamReader isr = new InputStreamReader(is,"utf-8");  
   BufferedReader in = new BufferedReader(isr);  
   String inputLine;  
   BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(  
           new FileOutputStream("d:\\result.xml")));// 將結(jié)果存放的位置  
   while ((inputLine = in.readLine()) != null)   
   {  
       System.out.println(inputLine);  
       bw.write(inputLine);  
       bw.newLine();  
       bw.close();  
   }  
   in.close(); 
   }
   
   os.close(); 
} catch (Exception e) {
System.out.println(e.getMessage());
}
}

// 把xml轉(zhuǎn)義
public static String escapeXml(String xml) {
String newXml = xml.replaceAll("<", "&lt;").replaceAll(">", "&gt;").replaceAll(" ", " ").replaceAll("\"", "&quot;");
return newXml;
}

總結(jié)

第一種使用HttpURLConnection調(diào)用的方法,基本不用擔(dān)心什么兼容問(wèn)題,但是通過(guò)xml請(qǐng)求接口,需要自己手動(dòng)拼接xml(一般通過(guò)soapui生成,然后在程序中根據(jù)情況拼接),并且返回的數(shù)據(jù)也是xml,還要通過(guò)代碼解析,可以說(shuō)是極其麻煩了。

第二種apache-cxf生成java類(lèi)調(diào)用的方式,直接調(diào)用生成的類(lèi)即可訪問(wèn)接口,非常方便,但是apache-cxf和jdk有兼容問(wèn)題,如果關(guān)聯(lián)的某個(gè)jar包中的代碼有沖突,就會(huì)遇到痛苦的報(bào)錯(cuò)了。在我的嘗試中,就有一個(gè)Service沖突的問(wèn)題,網(wǎng)上說(shuō)需要更改某jar包中的class文件,但是由于項(xiàng)目太過(guò)龐大,擔(dān)心會(huì)觸發(fā)其他的問(wèn)題,所以我只能就此作罷。

重點(diǎn)來(lái)了,第三種AXIS的方式, 沒(méi)有啥兼容問(wèn)題的方式了,調(diào)用起來(lái)非常簡(jiǎn)便,不需要拼接xml,返回的也只能干凈的數(shù)據(jù),

第四種:

httpclient本人親測(cè)好用。不用引用cxf或AXIS一大堆jar包,比較方便

到此這篇關(guān)于java對(duì)接webservice接口的4種方式總結(jié)的文章就介紹到這了,更多相關(guān)java對(duì)接webservice接口內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java 集合----Map、Collection

    java 集合----Map、Collection

    HashSet 的 add() 方法添加集合元素時(shí)實(shí)際上轉(zhuǎn)變?yōu)檎{(diào)用 HashMap 的 put()方法來(lái)添加 key-value 對(duì)。HashMap 的 put() 方法.hashCode() 判斷返回值相等,如果返回值相等則再通過(guò) equals 比較也返回 true,最終認(rèn)為key對(duì)象是相等的已經(jīng)在HashMap中存在。
    2016-04-04
  • spring?boot集成redisson的最佳實(shí)踐示例

    spring?boot集成redisson的最佳實(shí)踐示例

    這篇文章主要為大家介紹了spring?boot集成redisson的最佳實(shí)踐示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-03-03
  • idea數(shù)據(jù)庫(kù)驅(qū)動(dòng)下載失敗的問(wèn)題及解決

    idea數(shù)據(jù)庫(kù)驅(qū)動(dòng)下載失敗的問(wèn)題及解決

    這篇文章主要介紹了idea數(shù)據(jù)庫(kù)驅(qū)動(dòng)下載失敗的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Java中Stream流去除List重復(fù)元素的方法

    Java中Stream流去除List重復(fù)元素的方法

    這篇文章主要為大家詳細(xì)介紹了Java中Stream流去除List重復(fù)元素的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • idea?與?maven?使用過(guò)程中遇到的問(wèn)題及解決方案

    idea?與?maven?使用過(guò)程中遇到的問(wèn)題及解決方案

    最近將IDEA 升級(jí)到 IntelliJ IDEA 2021.3.2,在將maven項(xiàng)目導(dǎo)入IDEA后,maven build時(shí)報(bào)異常,這個(gè)問(wèn)題是IntelliJ IDEA 2021.3.2 不兼容導(dǎo)致的,下面小編給大家?guī)?lái)了idea?與?maven?使用過(guò)程中遇到的問(wèn)題及解決方案,感興趣的朋友一起看看吧
    2022-05-05
  • Intellij IDEA導(dǎo)入eclipse web項(xiàng)目的操作步驟詳解

    Intellij IDEA導(dǎo)入eclipse web項(xiàng)目的操作步驟詳解

    Eclipse當(dāng)中的web項(xiàng)目都會(huì)有這兩個(gè)文件,但是idea當(dāng)中應(yīng)該是沒(méi)有的,所以導(dǎo)入會(huì)出現(xiàn)兼容問(wèn)題,但是本篇文章會(huì)教大家如何導(dǎo)入,并且導(dǎo)入過(guò)后還能使用tomcat運(yùn)行,需要的朋友可以參考下
    2023-08-08
  • Java基礎(chǔ)高級(jí)綜合練習(xí)題撲克牌的創(chuàng)建

    Java基礎(chǔ)高級(jí)綜合練習(xí)題撲克牌的創(chuàng)建

    今天小編就為大家分享一篇關(guān)于Java基礎(chǔ)高級(jí)綜合練習(xí)題撲克牌的創(chuàng)建,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-01-01
  • SpringBoot整合mybatis-plus實(shí)現(xiàn)分頁(yè)查詢(xún)功能

    SpringBoot整合mybatis-plus實(shí)現(xiàn)分頁(yè)查詢(xún)功能

    這篇文章主要介紹了SpringBoot整合mybatis-plus實(shí)現(xiàn)分頁(yè)查詢(xún)功能,pringBoot分頁(yè)查詢(xún)的兩種寫(xiě)法,一種是手動(dòng)實(shí)現(xiàn),另一種是使用框架實(shí)現(xiàn),現(xiàn)在我將具體的實(shí)現(xiàn)流程分享一下,需要的朋友可以參考下
    2023-11-11
  • 關(guān)于使用jpa聚合函數(shù)遇到的問(wèn)題

    關(guān)于使用jpa聚合函數(shù)遇到的問(wèn)題

    這篇文章主要介紹了關(guān)于使用jpa聚合函數(shù)遇到的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • SpringBoot常見(jiàn)錯(cuò)誤圖文總結(jié)

    SpringBoot常見(jiàn)錯(cuò)誤圖文總結(jié)

    最近在使用idea+Springboot開(kāi)發(fā)項(xiàng)目中遇到一些問(wèn)題,這篇文章主要給大家介紹了關(guān)于SpringBoot常見(jiàn)錯(cuò)誤總結(jié)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06

最新評(píng)論

时尚| 鄂伦春自治旗| 华坪县| 马尔康县| 右玉县| 砀山县| 信丰县| 通山县| 吴堡县| 沿河| 宜兰县| 长泰县| 吉木乃县| 东辽县| 会泽县| 连江县| 武强县| 宁德市| 濮阳县| 武清区| 龙岩市| 昌图县| 鄱阳县| 太湖县| 漳平市| 宝山区| 盖州市| 民丰县| 台江县| 承德县| 循化| 迭部县| 拜泉县| 枣阳市| 丹寨县| 舟山市| 织金县| 青川县| 西宁市| 屏南县| 黄龙县|