一、JWS方法发布WebService

1、在官方网站下载axis的工程(这个等下就有用的)和源码、jar包等,下载地址是:

http://www.apache.org/dyn/closer.cgi/ws/axis/1_4 选择一个地址即可

http://mirror.bit.edu.cn/apache/axis/axis/java/1.4/axis-bin-1_4.tar.gz

2、解压下载的工程或源码(两个中任意一个都可以),解压axis-bin-1.4可以看到大致目录是这样的:

打开webapps目录就可以看到一个axis的文件夹,这个文件夹里面有WEB-INF文件夹和一些页面,将axis复制到你的tomcat的webapps目录下。然后启动tomcat服务,访问http://localhost:8080/axis/,看到下面的解码就说明部署成功了:

3、创建webService类文件,代码如下:

  1. public class HelloWorldService {
  2.  
  3. public String sayHello(String name) {
  4.  
  5. return name + ",hello world! ";
  6.  
  7. }
  8.  
  9. }

4、复制HelloWorldService.java到我们刚才复制的axis文件夹下即可;也就是tomcat下的webapps下的axis下即可,并重命名为HelloWorldService.jws;

上面的工作完成后,启动tomcat服务器,访问http://localhost:8080/axis/HelloWorldService.jws

你会看到:

并且你会发现webapps\axis\WEB-INF\jwsClasses多了HelloWorldService.class

如果你和我看到的是一样的,就证明你已经成功的部署了一个axis1.x的webService。然后我们点击下就可以看到wsdl的xml文件了,内容如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <wsdl:definitions targetNamespace="http://localhost:8080/axis/HelloWorldService.jws" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://localhost:8080/axis/HelloWorldService.jws" xmlns:intf="http://localhost:8080/axis/HelloWorldService.jws" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  3. <!--WSDL created by Apache Axis version: 1.4
  4. Built on Apr 22, 2006 (06:55:48 PDT)-->
  5.  
  6. <wsdl:message name="sayHelloResponse">
  7.  
  8. <wsdl:part name="sayHelloReturn" type="xsd:string"/>
  9.  
  10. </wsdl:message>
  11.  
  12. <wsdl:message name="sayHelloRequest">
  13.  
  14. <wsdl:part name="name" type="xsd:string"/>
  15.  
  16. </wsdl:message>
  17.  
  18. <wsdl:portType name="HelloWorldService">
  19.  
  20. <wsdl:operation name="sayHello" parameterOrder="name">
  21.  
  22. <wsdl:input message="impl:sayHelloRequest" name="sayHelloRequest"/>
  23.  
  24. <wsdl:output message="impl:sayHelloResponse" name="sayHelloResponse"/>
  25.  
  26. </wsdl:operation>
  27.  
  28. </wsdl:portType>
  29.  
  30. <wsdl:binding name="HelloWorldServiceSoapBinding" type="impl:HelloWorldService">
  31.  
  32. <wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
  33.  
  34. <wsdl:operation name="sayHello">
  35.  
  36. <wsdlsoap:operation soapAction=""/>
  37.  
  38. <wsdl:input name="sayHelloRequest">
  39.  
  40. <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://DefaultNamespace" use="encoded"/>
  41.  
  42. </wsdl:input>
  43.  
  44. <wsdl:output name="sayHelloResponse">
  45.  
  46. <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://localhost:8080/axis/HelloWorldService.jws" use="encoded"/>
  47.  
  48. </wsdl:output>
  49.  
  50. </wsdl:operation>
  51.  
  52. </wsdl:binding>
  53.  
  54. <wsdl:service name="HelloWorldServiceService">
  55.  
  56. <wsdl:port binding="impl:HelloWorldServiceSoapBinding" name="HelloWorldService">
  57.  
  58. <wsdlsoap:address location="http://localhost:8080/axis/HelloWorldService.jws"/>
  59.  
  60. </wsdl:port>
  61.  
  62. </wsdl:service>
  63.  
  64. </wsdl:definitions>

说明: 复制java文件并将后缀名改为.jws,要去掉前面的package….如果带包名的话,请求后编译的class将会在包路径下,这样我们在请求当前jws的时候就会出现找不到class,详细的你可以到发布在tomcat下的工程看看WEB-INF目录下的jwsClass就一目了然了。

5、下面编写客户端代码

代码如下:

  1. import java.rmi.RemoteException;
  2. import javax.xml.namespace.QName;
  3. import javax.xml.rpc.ServiceException;
  4. import org.apache.axis.client.Call;
  5. import org.apache.axis.client.Service;
  6.  
  7. public class HelloWorldClient {
  8.  
  9. public static void main(String[] args) throws ServiceException,
  10. RemoteException {
  11. // webService访问地址
  12. String url = "http://localhost:8080/axis/HelloWorldService.jws";
  13. // 创建服务
  14. Service service = new Service();
  15. // 创建调用句柄
  16. Call call = (Call) service.createCall();
  17. // 设置请求地址
  18. call.setTargetEndpointAddress(url);
  19. /**
  20. * 设置调用的方法和方法的命名空间; 因为这里是手动发布到webroot目录下的,所以命名空间和请求地址一致
  21. * 当然null也可以,因为本身它就没有设置命名空间,一般方法的命名空间是
  22. * 包名倒写组成,如com.hoo.service,ns=http://service.hoo.com
  23. */
  24. call.setOperationName(new QName(null, "sayHello"));
  25. /**
  26. * 用call调用sayHello方法,设置请求的参数,返回的就是返回值了
  27. */
  28. String result = (String) call.invoke(new Object[] { "axis" });
  29. System.out.println(result);
  30. }
  31. }

分析上面的代码

url是根据xml文件中的wsdlsoap:address location的信息得到的,

运行代码,控制台输出:

axis,hello world!

至此第一个Web WebService发布调用成功。下面我们搭建我们自己的web工程。

二、搭建自己的Axis Web工程

新建 Web工程AxisWebService;创建好工程后,将刚才解压的axis-bin中的lib的jar包copy到当前工程的lib中;

axis-ant.jar

axis.jar

commons-discovery-0.2.jar

commons-logging-1.0.4.jar

jaxrpc.jar

log4j-1.2.8.jar

saaj.jar

wsdl4j-1.5.1.jar

activation-1.1.jar

mail-1.4.jar

2、copy了lib下的jar包后,现在要copy下web.xml中的内容,去掉里面的AdminServlet这个配置,其他的都可保留。

3、像刚才一样,将HelloWorldService.java复制到AxisWebService的webroot目录下,去掉包名,并且修改后缀为 HelloWorldService.jws即可。最后发布当前web工程,访问http://localhost:8080/AxisWebService/HelloWorldService.jws,如果看到和刚才一样的界面,点击链接能看到wsdl的xml就成功了。

三、用wsdd方式发布WebService

Wsdd(Web Services Deployment Descriptor)方法比JWS方法要稍微复杂些,但一定程度上比jws发布的方法要灵活。

1、首先在AxisWebService工程创建一个java类,里面写简单的2个方法getName、getAge,代码如下:

  1. package com.xqzt.client;
  2.  
  3. public class HelloWorldWSDD {
  4.  
  5. public String getName(String name) {
  6. return "your name : " + name;
  7. }
  8.  
  9. public int getAge(int age) {
  10. return age + 10;
  11. }
  12. }

2、如果用wsdd方法首先需要定制我们的wsdd xml文件,这里命名为deploy.wsdd,创建在当前web工程的WEB-INF目录下,代码如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2.  
  3. <deployment xmlns="http://xml.apache.org/axis/wsdd/"
  4.  
  5. xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
  6.  
  7. <service name="HelloWorldWSDD" provider="java:RPC">
  8.  
  9. <parameter name="className" value="com.xqzt.service.HelloWorldWSDD" />
  10.  
  11. <!-- * 代表所有的方法都暴露 -->
  12.  
  13. <parameter name="allowedMethods" value="*" />
  14.  
  15. <parameter name="scope" value="request" />
  16.  
  17. </service>
  18.  
  19. </deployment>

service标签代表一个WebService服务,HelloWorldWSDD就是当前WebService的名称;provider是 java的WebService类型,分别有: RPC、Document、Wrapped、Message、EJB、RMI;有兴趣的可以看看 org.apache.axis.providers.java包下面的WebService的实现类或是文档;

parameter的参数className代表当前WebService的class类路径;

allowedMethods代表暴露的方法,那些方法在客户端可以调用;

<parameter name="scope" value="request" />,这个是当前WebService的作用域,它有3个值,分别是:request、session、application。

request代表为每个WebService SOAP的请求都产生一个服务对象,和Spring的scope很像,在服务请求频繁的话会消耗很多资源。

session 是给每个调用当前WebService的客户端创建一个服务对象

application 是个当前所有的请求创建一个服务对象

3、写完配置后,就需要用axis提供的AdminClient工具类帮我们发布WebService,直到生成server- config.wsdd,步骤如下:运行cmd命令,然后进入当前工程发布的目录,即%tomcat_home%/webapps/project /WEB-INF>

我的是:E:\apache-tomcat-6.0.44\webapps\AxisWebService\WEB-INF>

然后输入命令:

  1. java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient deploy.wsdd

这里的deploy.wsdd是我们刚才定制的wsdd文件,java当然是jvm的命令,-Djava.ext.dirs=lib设置当前命令的依赖包,AdminClient是axis提供的工具类,这个类本来是可以在官方的工程中admin可以直接运行的(这里不可以,下载下来的少了 AdminServlet,有兴趣的可以研究下,就是前面说的官方的示例);

如果运行命令后,看到:

Processing file deploy.wsdd

<Admin>Done processing</Admin>

就代表快成功了,why?快!看看deploy.wsdd同级目录有没有生成server-config.wsdd如果有这个文件就成功了,没有就 失败了。如果失败了还有解决办法,首先你得启动tomcat,将我们的工程发布出去。然后在重复上面的命令,不行就换命令行代码如下:

  1. java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient -lhttp://localhost:8080/AxisWebService/services/AdminService deploy.wsdd

执行结果

-lhttp://localhost:8080/AxisWebService/services/AdminService是因为你的端口可能被axis占用了,我们将指定AdminService来完成转换,运行上面命令就没有问题了。

4、在WebBrowser的地址栏输入:

http://localhost:8080/AxisWebService/servlet/AxisServlet

你就可以看到如下效果:

刚才在deploy.wsdd中指定的WebService就在上面出现了,还有暴露出来的方法。点击wsdl就可以看到刚才一样熟悉的wsdl的xml文档。

5、下面我们编写客户端代码调用上面的WebService,代码块和上面的jws几乎一样,只是参数,方法名称不同。

  1. package com.xqzt.client;
  2.  
  3. import java.rmi.RemoteException;
  4. import javax.xml.namespace.QName;
  5. import javax.xml.rpc.ServiceException;
  6. import org.apache.axis.client.Call;
  7. import org.apache.axis.client.Service;
  8.  
  9. public class HelloWorldWSDDClient {
  10.  
  11. public static void main(String[] args) throws ServiceException, RemoteException {
  12. //webService访问地址
  13. String url = "http://localhost:8080/AxisWebService/services/HelloWorldWSDD";
  14. //创建服务
  15. Service service = new Service();
  16. //创建调用句柄
  17. Call call = (Call) service.createCall();
  18. //设置请求地址
  19. call.setTargetEndpointAddress(url);
  20. /**
  21. * 设置调用的方法和方法的命名空间;
  22. * 当然null也可以,因为本身它就没有设置命名空间,一般方法的命名空间是
  23. * 包名倒写组成,如com.hoo.service,ns=http://service.hoo.com
  24. */
  25. call.setOperationName(new QName("http://service.hoo.com", "getName"));
  26.  
  27. /**
  28. * 用call调用getName方法,设置请求的参数,返回的就是返回值了
  29. */
  30. String result = (String) call.invoke(new Object[] { "jack" });
  31. System.out.println(result);
  32.  
  33. call.setOperationName(new QName("http://service.hoo.com", "getAge"));
  34.  
  35. /**
  36. * 用call调用getAge方法,设置请求的参数,返回的就是返回值了
  37. */
  38. int resultAge = Integer.parseInt(call.invoke(new Object[] { 89 }).toString());
  39. //服务器端+10
  40. System.out.println(resultAge);
  41. }
  42. }

四、取消一个发布成功的Web服务

首先,取消发布也需要定制wsdd文件,undeploy.wsdd具体格式如下:

  1. <undeployment xmlns="http://xml.apache.org/axis/wsdd/">
  2. <service name="HelloWorldWSDD"/>
  3. </undeployment>

同样,像上面发布WebService一样,用命令完成。

命令如下:

  1. java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient -lhttp://localhost:8080/AxisWebService/services/AdminService undeploy.wsdd

键入命令后,回车看到:

Processing file undeploy.wsdd

<Admin>Done processing</Admin>

就代表你取消服务成功了,那样别人就不能访问你的服务了。再在浏览器地址栏输入:

http://localhost:8080/AxisWebService/servlet/AxisServlet

看看是不是刚才发布的服务被成功取消了!

参考文档:

一、搭建简单的axis web服务

二、用wsdd(Web Services Deployment Descriptor)方式发布WebService

三、取消发布的WebService(删除一个发布成功的Web服务)

Axis 发布、调用WebService(转)的更多相关文章

  1. mule发布调用webservice

    mule发布webservice 使用mule esb消息总线发布和调用webservice都非常精简,mule包装了所有操作,你只需要拖控件配置就可以,下面讲解mule发布: 1.下面是flow,h ...

  2. Java利用Axis远程调用WebService接口

    准备工作: 主要依赖的包: 1.axis.jar 官网:http://axis.apache.org/axis/ 2.jaxrpc.jar 下载地址:http://www.java2s.com/Cod ...

  3. java中使用axis发布和调用webService及dom4j解析xml字符串

    工作中需要调用webService服务,这里记录一下如何在java中发布和调用webService. 需要的jar包: webService服务端: import javax.jws.WebMetho ...

  4. AXIS2远程调用WebService示例(Eclipse+AXIS)

    转自:http://www.cnblogs.com/lanxuezaipiao/archive/2013/05/10/3071584.html 我们将Web Service发布在Tomcat或者其他应 ...

  5. Java调用IIS发布的WebService

    之前的一篇博客说了一个实例,就是用VS2005在IIS上发布WebService.今天我们来实现在Eclipse上用Java来调用昨天发布的WebService. 首先咋在浏览器中输入http://1 ...

  6. Java调用webservice接口方法(SOAP message、xfire、axis)

    webservice的 发布一般都是使用WSDL(web service descriptive language)文件的样式来发布的,在WSDL文件里面,包含这个webservice暴露在外面可供使 ...

  7. 使用vs2010创建、发布、部署、调用 WebService

    原文地址:使用vs2010创建.发布.部署.调用 WebService作者:吴超 一 使用vs2010创建 WebService 1 打开VS2010,菜单    文件->新建->项目2 ...

  8. 【知识积累】服务器端获取客户端的IP地址(当客户端调用由Axis开发的WebService)

    一.前言 由于项目中一个小的模块需要获取客户端的IP地址以保证安全调用webservice接口,项目中客户端使用C#编写,服务器端使用Java编写,服务器端与客户端采用Axis开发的WebServic ...

  9. 使用axis调用WebService服务端

    由于项目中要调用其他公司的接口,研究了下axis调用webService这种方式,现将代码贴出,以备以后查阅: package com.xbq; import javax.xml.namespace. ...

随机推荐

  1. Android之针对WebView的全屏播放

    转载请标明转载处:http://bbs.csdn.net/topics/390839259 本人刚学android,菜鸟一个,第一次写帖子,最近因为项目要用webview加载html5的视频,开始不能 ...

  2. Orchard模块开发全接触8:改造后台

    后台默认提供了 Content 的管理,但是,所有的内容类型揉杂在一起,而我们需要更深度的定制一些功能,比如,我们只想管理订单,又比如,我们需要对注册用户进行管理.本篇的内容包括: 1:自定义 adm ...

  3. 14 道 JavaScript 题?

    http://perfectionkills.com/javascript-quiz/ https://www.zhihu.com/question/34079683 著作权归作者所有.商业转载请联系 ...

  4. Asp.Net Core获取当前上下文对象

    HttpContext简介 .Net Core中的HttpContext上下文是个抽象类,命名空间为Microsoft.AspNetCore.Http 所在程序集 \netstandard2.0\Mi ...

  5. LaTeX技巧22:LaTeX文档中的参考文献初级

    用 LaTeX 处理文档, 经常就要书写参考文献, 本篇就是介绍如何在 LaTeX 中使用参考文献, 注意这里讲的是LaTeX默认的 thebibliography 环境, 如果要了解 LaTeX 中 ...

  6. Just-In-Time Debugging in Visual Studio 禁止VS在服务器上调试

    To disable Just-In-Time debugging by editing the registry On the Start menu, search for and run rege ...

  7. pthread_once重塑singleton模式

    单件模式是非线程安全的: // Single threaded version class Foo { private Helper helper = null; public Helper getH ...

  8. Windows Server 2008 R2 小技巧 (转)

    一些 Windows Server 2008 R2 的小技巧,包括启用「God Mode (上帝模式)」.添加「快速启动」工具栏.启用桌面「个性化」服务.停用「密碼複雜性」要求,对老程序员熟悉新版的 ...

  9. mybatis plus 主键生成 Twitter雪花算法 id 及修改id为字符型

    mybatis plus配置主键生成策略为2,就是 使用Twitter雪花算法 生成id spring boot中配置为: GlobalConfiguration conf = new GlobalC ...

  10. kaggle预测

    两个预测kaggle比赛 一 .https://www.kaggle.com/c/web-traffic-time-series-forecasting/overview Arthur Suilin• ...