您的位置:首页 > 编程语言 > Java开发

java调用webservice接口的方法

2015-07-28 08:54 776 查看
通常访问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访问方式

新建一个java project项目—-》添加架包Xfire 1.2 Core Libraries和XFire 1.2 HTTP Client Libraries

—–>创建测试类

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: