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);
}
二、在另一个项目中调用部署在服务器上的接口(实际上部署的是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 );
三、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
接口里面的方法有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
相关文章推荐
- [Java]用递归与非递归的形式输出给定目录的所有文件名
- JVM中类的卸载机制
- Java虚拟机的类加载机制
- JVM中java类的加载时机
- JVM中java类的加载时机
- Java项目性能监控和调优工具-Javamelody
- JAVA面向对象特征详解
- 跟我学Java多线程——线程池与阻塞队列
- Java 性能优化系列之1[设计与程序优化]
- Java使用DOM方式读写XML
- Java开发调试技巧及Eclipse快捷键使用方法
- 在eclipse下配置maven
- JAVA笔记之数组
- 学习Java的同学如何使自己个人电脑拥有良好的Java运行环境
- 杭电ACM2036java做法
- 交换排序(java)
- Java内部类——局部内部类
- java设计模式学习之工厂模式学习
- 05 JAVA 异常
- 转 java实现位图索引