[Java 基礎]--呼叫webservice介面的方法
通常訪問webservice有三種方法
- 測試時使用
- Call訪問
- 直接Client訪問
第二種和第三種最常用的,獻上程式碼:
介面裡面的方法有2個:
1、public Student addStudent(Student stu)throws Exception;
2、public Student removeStu(int id)throws Exception;
一、在webservice專案中測試使用
package test;
import org.codehaus.xfire.XFireFactory;
import org.codehaus.xfire.client.XFireProxyFactory;
import org.codehaus.xfire.service.Service;
import org.codehaus.xfire.service.binding.ObjectServiceFactory;
import service.interfaces.MyService;
import bean.Student;
public class TestClient {
/**
* @函式功能說明 :測試訪問是否成功!
* @修改者名字:yang
* @修改日期 : 2015-7-28
* @修改內容 :
* @引數: @param args
* @return void
* @throws
*/
public static void main(String[] args) {
//這裡是建立一個service,需要傳入一個介面類,因為我們後面必須呼叫相應的介面方法
Service srcModel = new ObjectServiceFactory().create(MdServer.class);
//建立代理工廠,這裡是為了後面建立相應的介面類
XFireProxyFactory factory = new XFireProxyFactory(XFireFactory.newInstance().getXFire());
//webservice地址,不需要加wsdl,只是部署在tomcat上以後,通過位址列訪問時,可以新增?wsdl
//比如:http://localhost:8080/MyService/services/MyService?wsdl
String RectServiceUrl = "http://localhost:8080/MyService/services/MyService";//設定訪問路徑,固定結構
/http://ip地址/專案名/services/專案名
try {
//利用工廠返回相應的介面類
MyService ms = (MyService)factory.create(srcModel,RectServiceUrl);
//呼叫介面裡面的方法
//新增一個學生物件
Student st=new Student(null,"張三","北京海淀區",0);//預設為0,新增成功或者刪除成功後,修改為1
Student result=ms.addStudent(st);
System.out.println("接收新增後的學生物件:"+result);//實際是webService介面的返回值
//刪除一個學生物件
Student result2=ms.removeStu(22);
System.out.println("接收刪除後的學生物件:"+result2);
} catch (Exception e) {
e.printStackTrace();
}
}
}
二、在另一個專案中呼叫部署在伺服器上的介面(實際上部署的是war包)
記得匯入架包:
axis-1_4 http://download.csdn.net/download/xiaoyong8823/4391971
package test;
import javax.servlet.http.HttpServletResponse;
import javax.xml.rpc.ParameterMode;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
import org.junit.Test;
import bean.Student;
/**
* @函式功能說明 :測試訪問是否成功!
* @修改者名字:yang
* @修改日期 : 2015-7-28
* @修改內容 :
* @引數: @param args
* @return void
* @throws
*/
public class TestCall {
@Test
//測試新增一個學生物件
public String xslsAdd(){
String str="";
try{
//webservice介面地址,一般是別人提供
String endPoint="http://localhost:8080/MyService/services/MyService";
//建立服務物件
Service service=new Service();
Call call=(Call)service.createCall();
call.setTargetEndpointAddress(endPoint);
//呼叫介面名稱
call.setOperationName("addStudent");//測試新增一個學生物件的介面方法
call.addParameter("id", XMLType.XSD_INTEGER,ParameterMode.IN );
call.addParameter("name", XMLType.XSD_STRING,ParameterMode.IN );
call.addParameter("address",XMLType.XSD_STRING,ParameterMode.IN );
call.addParameter("status",XMLType.XSD_INT,ParameterMode.IN );
/**
* 設定返回值型別-由於返回一個代理類SendExResp-這個需要用ws工具生成,不然就要手動寫,
* 故這裡設定成org.w3c.dom.Element.class,不然會報org.xml.sax.SAXException:
* SimpleDeserializer encountered a child element, which is NOT expected錯誤。
* 注:具體的返回型別,根據對方提供的ws進行設定即可,如:call.setReturnClass(String[].class);
*/
call.setReturnClass(org.w3c.dom.Element.class);
//設定引數,在實際中,通過接受頁面傳遞的引數
Integer id=null;
String name="張三";
String address="北京海淀區";
String status=0;
// 此處是為了解決錯誤:伺服器未能識別 HTTP 頭 SOAPAction 的值 而重新設定介面方法(可要可不要)
call.setUseSOAPAction(true);
//設定返回值型別是String型別,如果是物件型別,那麼需要使用w3cl的規範
call.setReturnClass(String.class);
call.setSOAPActionURI("addStudent");
// 呼叫ws方法
//如果想得到webService方法返回的結果:需要寫一個配置檔案,生成類,放到工程下面(我的例子中,暫時未講)
Student result=(Student)call.invoke("addStudent",new Object[]{id,name,address,status});
System.out.println("學生物件新增結果,輸出是否成功:"+result);//輸出為空,原因是,工程中未新增相應配置檔案
str="addSuccess";
}catch(Exception e){
e.printStackTrace();
return "addError";
}
return str;
}
三、Client訪問方式
1、新建一個java project專案
2、新增架包Xfire 1.2 Core Libraries和XFire 1.2 HTTP Client Libraries
3、建立測試類
package com.testStudentServer;
import java.net.URL;
import org.codehaus.xfire.client.Client;
import org.junit.Test;
import org.w3c.dom.Document;
public class TestClient {
@Test
public void testAddXsls() throws Exception{
Client client =new Client(new URL("http://localhost:8080/MyService/services/MyService?wsdl"));
Object[] results=client.invoke("addStudent", new Object[]{null,"張三","北京海淀區",0});
System.out.println("新增結果:"+results[0]);
//處理返回結果
Document d=(Document)results[0];
System.out.println(d.getFirstChild().getFirstChild().getNodeValue());
/* 檢視返回的結果處理方法
System.out.println("結果2:===="+d.getFirstChild());
NodeList n1=d.getElementsByTagName("addStudent");
NodeList n2=n1.item(0).getChildNodes();
System.out.println("長度:"+n2.getLength());
for(int i=0;i<n2.getLength();i++){
System.out.println(n2.item(i).getNodeName()+"==="+n2.item(i).getTextContent());
}
*/
}
}
以上三段程式碼都經過測試,可以正常使用!如有疑問,請留言指正!
相關文章
- Java基礎——方法的呼叫Java
- js 呼叫 WebService 方法JSWeb
- java動態呼叫webserviceJavaWeb
- java webService 零基礎學習JavaWeb
- php呼叫webservice的幾種方法PHPWeb
- Java-Spring-WebService最基礎的配置示例JavaSpringWeb
- 【Java基礎】方法Java
- Java基礎 --- 方法Java
- webservice介面呼叫Web
- java基礎介紹(轉)Java
- php 呼叫dll 裡面的方法PHP
- [Kotlin基礎] Java 呼叫 Kotlin(一)KotlinJava
- VB中呼叫WebService上的函式的方法Web函式
- java8介面的靜態方法和預設方法Java
- Ajax呼叫WebService(一)Web
- C#呼叫webserviceC#Web
- webservice中呼叫structWebStruct
- java使用axis 呼叫WCF webservice問題請教JavaWeb
- 呼叫java介面的方式有哪些?Java
- Java基礎--FileDescriptor sync方法Java
- java基礎toString()方法Java
- Java基礎10 介面的繼承與抽象類Java繼承抽象
- Java基礎知識篇——Java基本介紹Java
- 新增webservice呼叫日誌Web
- Axis2呼叫WebServiceWeb
- PHP呼叫Webservice例項PHPWeb
- webapi建立和呼叫WebServiceWebAPI
- webservice簡介Web
- Java基礎之泛型方法Java泛型
- Java基礎知識七——方法Java
- Java基礎-工廠方法模式Java模式
- java基礎:Object的equals方法JavaObject
- js和vue方法的相互呼叫(iframe父子頁面的方法相互呼叫)。JSVue
- Java基礎:Java簡介及安裝配置(1)Java
- [java基礎]之JDK目錄介紹JavaJDK
- JAVA基礎之六-Stream(流)簡介Java
- 騰訊WebService Api 跨域呼叫WebAPI跨域
- C#動態呼叫webserviceC#Web