文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

如何使用axis开发webservice

2023-06-17 12:32

关注

小编给大家分享一下如何使用axis开发webservice,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

preparation:

说明:相关的可能要了解SOAP(简单对象访问协议)、WSDL(web服务描述语言)、XML(可扩展标记语言)、axis(阿帕奇可扩展交互系统)等相关知识。

下载axis的jar包,请到apache官网或者在百度自行下载,然后导入jar包,不清楚的话导入所有的jar包就好了。(本人用的是axis1的版本,因为项目中用的是axis1的版本)

webservice客户端生成工具genclient.bat(后面会对这个工具做一个简单的说明)

之前介绍没有说明本机的环境,现在把本机环境罗列一下:

系统:XP  myeclipse:6.5  tomcat:5.X  JDK:1.5

生成webservice的方式有XFire、Jax-WS、axis等,使用axis调用webservi有三种方式:动态调用接口、使用动态代理Dynamic Proxy、使用从WSDL生成的存根generated Stubs from Service WSDL description,由于本人工作中使用的是axis,调用webservice的方式用到的有动态调用接口、使用从WSDL生成的存根generated Stubs from Service WSDL description,故本节只介绍用axis调用webservice的这两种方式。后续的拓展部分根据需要再说。

start:

***步:服务器端的开发

(1)开发java文件

代码如下:

接口文件:IBbossGroupInfoService.java

package com.asiainfo.b2p.soap.interfaces;     import java.rmi.RemoteException;  public interface IBbossGroupInfoService {        // 根据集团编号查询集团基本信息            public abstract String groupInfo(long groupNo) throws Exception,              RemoteException;       // 根据集团编号查询集团订购历史      public abstract String groupSubHistoryInfo(long groupNo) throws Exception;  }

实现类:IBbossGroupInfoServiceImpl.java

package com.asiainfo.b2p.soap.impl;  import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import com.asiainfo.b2p.soap.interfaces.IBbossGroupInfoService;   public class IBbossGroupInfoServiceImpl implements IBbossGroupInfoService {     private static transient Log log = LogFactory             .getLog(IBbossGroupInfoServiceImpl.class);       // 根据集团编号查询集团基本信息     public String groupInfo(long groupNo) throws Exception, RemoteException {         log.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>集团编号=" + groupNo);         //方法体我省略了,为了测试我仅加入一句打印语句         System.out.println("我是一个公共的方法,作用是根据集团编号查询集团基本信息");         String xml="<message>public_groupInfo</message>";//为了测试,返回的信息我也是随便写的一个字符串         return xml;     }      // 根据集团编号查询集团订购历史     public String groupSubHistoryInfo(long groupNo) throws Exception {          log.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>集团编号=" + groupNo);         //方法体我省略了,为了测试我仅加入一句打印语句         System.out.println("我是一个公共的方法,作用是根据集团编号查询集团订购历史");         String xml="<message>public_groupSubHistoryInfo</message>";//为了测试,返回的信息我也是随便写的一个字符串         return xml;     } }

说明:为了更加的接近实际的开发,这个是本机上运行的程序,实现的功能是通过一个编号查询相关信息拼成一个字符串,方法体的部分我删除了,你需要用这个代码的话,直接拷贝修改包名称就可以直接用了。

(2)wsdd文件

wsdd文件只需加入一列几行(前提是你之前已经有wsdd文件了,没有的话可以在下载的apache的demo中拷贝一个):

<service name="GroupInfoService" type=""  provider="java:RPC"> <parameter name="className" value="com.asiainfo.b2p.soap.impl.IBbossGroupInfoServiceImpl" ></parameter> <parameter name="allowedMethods" value="*"/> </service>

这个文件放在项目的WEB-INF下面。<service>标签的name属性是发布的webservice的名称,可以自己命名,***个<parameter>标签的value属性指定实现类的完整路径,包括类名。其他的地方默认就好。
(3)配置web.xml文件

<servlet>   <servlet-name>AxisServlet</servlet-name>   <display-name>Apache-Axis Servlet</display-name>   <servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class> </servlet> <servlet-mapping>   <servlet-name>AxisServlet</servlet-name>   <url-pattern>/services     public static void test1() {         try {             // 1.创建service对象,通过axis自带的类创建             org.apache.axis.client.Service service = new org.apache.axis.client.Service();              // 2.创建url对象             String wsdlUrl = "http://10.10.146.82:8080/esop_dev/services/GroupInfoService?wsdl";//请求服务的URL             URL url = new URL(wsdlUrl);//通过URL类的构造方法传入wsdlUrl地址创建URL对象  // 2.创建服务方法的调用者对象call,设置call对象的属性             Call call = (Call) service.createCall();             call.setTargetEndpointAddress(url);//给call对象设置请求的URL属性             String serviceName = "groupInfo";             call.setOperationName(serviceName);//给call对象设置调用方法名属性             call.addParameter("groupNo", XMLType.XSD_LONG, ParameterMode.IN);// 给call对象设置方法的参数名、参数类型、参数模式             call.setReturnType(XMLType.SOAP_STRING);// 设置调用方法的返回值类型  //4.通过invoke方法调用webservice             long groupNo = 2100000014L;             String res = (String) call.invoke(new Object[] { groupNo });//调用服务方法             System.out.println(res);         } catch (MalformedURLException e) {             e.printStackTrace();         } catch (ServiceException e) {             e.printStackTrace();         } catch (RemoteException e) {             e.printStackTrace();         }     }      public static void main(String[] args) {         test1();     } }

代码中的注释很详细,我就不介绍了。

(2).使用从WSDL生成的存根generated Stubs from Service WSDL description

***步:配置genclient.bat文件

右键单击“编辑”打开bat文件如下(为了便于说明,每行的意思我就直接写在后面了):

set Axis_Lib=E:\esop\lib -----指定工程的lib目录set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib% -----默认set Output_Path=E:\esop\src -----指定工程的src目录set Package=com.asiainfo.maks.webservices.pbosswebclient -----指定生成的四个文件的存放位置%Java_Cmd% org.apache.axis.wsdl.WSDL2Java -o%Output_Path% -p%Package% ----- 默认http://10.10.146.82:8080/esop_dev/services/GroupInfoService?wsdl -----指定wsdl文件的路径

用genclient.bat生成四个客户端类

双击编译好的bat文件,执行后生成的四个java类如下:

如何使用axis开发webservice

写测试类调用webservice

package test.webserviceclient;  import java.net.MalformedURLException; import java.net.URL; import java.rmi.RemoteException; import javax.xml.rpc.ParameterMode; import javax.xml.rpc.ServiceException; import org.apache.axis.client.Call; import org.apache.axis.encoding.XMLType;  public class Test {          public static void test1() {         // 1.创建一个service对象         IBbossGroupInfoServiceImplService service = new IBbossGroupInfoServiceImplServiceLocator();          try {             // 2.创建一个URL对象,传入wsdl的地址够过URL的构造方法创建             String wsdlUrl = "http://10.10.146.82:8080/esop_dev/services/GroupInfoService?wsdl";             URL url = new URL(wsdlUrl);              // 3创建一个client对象             IBbossGroupInfoServiceImpl client = service                     .getGroupInfoService(url);              // 4调用webservice的方法             long groupNo = 2100000014L;             String res = client.groupInfo(groupNo);              System.out.println(res);          } catch (MalformedURLException e) {             e.printStackTrace();         } catch (ServiceException e) {             e.printStackTrace();         } catch (RemoteException e) {             e.printStackTrace();         }      }      public static void main(String[] args) {         test1();     } }

以上是“如何使用axis开发webservice”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯