webservice开发axis

WebService Axis 快速开发

一、开发环境
•Myeclipse8.0
•Tomcat6.0
•Axis1.4
•Jdk1.6
Axis下载:
Google:”Axis”,很容易找到Apache Axis的链接地址:http://ws.apache.org/axis/,下载最新的1.4Final。
(好了准备工作做好了,现在我们来开发WebService!)

二、用Java 开发 WebService Axis简单实例
Axis支持三种WebService 的部署和开发,分别为:
1、Dynamic Invocation Interface(DII)方式
2、Dynamic Proxy方式
3、Stubs方式
Stubs方式是最通用的做法,又因其灵活的特点,所以我建议使用这种方式。下面,我主要讲述这种方式的开发。
1)创建Web工程
1、在Myeclipse上创建web工程,名为Test;
2、将jar包拷贝到WEB-INF/lib目录下;
2)编写wsdd发布web服务
1、在src目录下创建服务端程序HelloDateServer.java,包名为:
src/mypackage.server/HelloDateServer.java

Java代码 复制代码 收藏代码spinner.gif
  1. package mypackage.server;
  2. import java.util.Date;
  3. //WebService服务端类
  4. public class HelloDateServer {
  5. /**
  6. * 服务方法
  7. * @param yourName
  8. * @return
  9. */
  10. public String helloDate(String yourName){
  11. String rtStr = "Hello ,"+yourName+" ,it's: " + new Date();
  12. return rtStr;
  13. }
  14. //Add method here......
  15. }
package mypackage.server;
	
import java.util.Date;
	
//WebService服务端类
public class HelloDateServer {
   /**
    * 服务方法
     * @param yourName
    * @return
    */
    public String helloDate(String yourName){
        String rtStr = "Hello ,"+yourName+" ,it's: " + new Date();
        return rtStr;
    }

    //Add method here......

}

bd6061bb-3f77-3c1d-adac-d85ce50616e9.png
在Tomact环境发布一个WebService 只需要写两个配置文件:
web.xml 、 server-config.wsdd
web.xml文件是用来声明Webserver的,即声明server-config.wsdd文件(我个人的理解)。
server-config.wsdd是Web服务的发布配置文件

web.xml文件很容易配置,拷贝axis包里面的WebService示例的web.xml配置到我们的工程中的web.xml中就可以了。


Xml代码 复制代码 收藏代码spinner.gif
  1. WEB-INF/web.xml
  2. <?xml version="1.0" encoding="UTF-8"?>
  3. <web-app version="2.5"
  4. xmlns="http://java.sun.com/xml/ns/javaee"
  5. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  6. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
  7. http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  8. <welcome-file-list>
  9. <welcome-file>index.jsp</welcome-file>
  10. </welcome-file-list>
  11. <!-- =============== Axis Webservice =============-->
  12. <servlet>
  13. <servlet-name>AxisServlet</servlet-name>
  14. <servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>
  15. </servlet>
  16. <servlet>
  17. <servlet-name>AdminServlet</servlet-name>
  18. <servlet-class>org.apache.axis.transport.http.AdminServlet</servlet-class>
  19. <load-on-startup>100</load-on-startup>
  20. </servlet>
  21. <servlet>
  22. <servlet-name>SOAPMonitorService</servlet-name>
  23. <servlet-class>org.apache.axis.monitor.SOAPMonitorService</servlet-class>
  24. <init-param>
  25. <param-name>SOAPMonitorPort</param-name>
  26. <param-value>5001</param-value>
  27. </init-param>
  28. <load-on-startup>100</load-on-startup>
  29. </servlet>
  30. <servlet-mapping>
  31. <servlet-name>AxisServlet</servlet-name>
  32. <url-pattern>/servlet/AxisServlet</url-pattern>
  33. </servlet-mapping>
  34. <servlet-mapping>
  35. <servlet-name>AxisServlet</servlet-name>
  36. <url-pattern>*.jws</url-pattern>
  37. </servlet-mapping>
  38. <servlet-mapping>
  39. <servlet-name>AxisServlet</servlet-name>
  40. <url-pattern>/services/*</url-pattern>
  41. </servlet-mapping>
  42. <servlet-mapping>
  43. <servlet-name>SOAPMonitorService</servlet-name>
  44. <url-pattern>/SOAPMonitor</url-pattern>
  45. </servlet-mapping>
  46. <mime-mapping>
  47. <extension>wsdl</extension>
  48. <mime-type>text/xml</mime-type>
  49. </mime-mapping>
  50. <mime-mapping>
  51. <extension>xsd</extension>
  52. <mime-type>text/xml</mime-type>
  53. </mime-mapping>
  54. </web-app>
WEB-INF/web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  
  	<!-- =============== Axis Webservice =============-->
	<servlet>
		<servlet-name>AxisServlet</servlet-name>
		<servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>
	</servlet>
	<servlet>
		<servlet-name>AdminServlet</servlet-name>
		<servlet-class>org.apache.axis.transport.http.AdminServlet</servlet-class>
		<load-on-startup>100</load-on-startup>
	</servlet>
	<servlet>
		<servlet-name>SOAPMonitorService</servlet-name>
		<servlet-class>org.apache.axis.monitor.SOAPMonitorService</servlet-class>
		<init-param>
			<param-name>SOAPMonitorPort</param-name>
			<param-value>5001</param-value>
		</init-param>
		<load-on-startup>100</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>AxisServlet</servlet-name>
		<url-pattern>/servlet/AxisServlet</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>AxisServlet</servlet-name>
		<url-pattern>*.jws</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>AxisServlet</servlet-name>
		<url-pattern>/services/*</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>SOAPMonitorService</servlet-name>
		<url-pattern>/SOAPMonitor</url-pattern>
	</servlet-mapping>
	<mime-mapping>
		<extension>wsdl</extension>
		<mime-type>text/xml</mime-type>
	</mime-mapping>
	<mime-mapping>
		<extension>xsd</extension>
		<mime-type>text/xml</mime-type>
	</mime-mapping>
  
</web-app>


server-config.wsdd 文件是WebService的核心配置文件。Web服务能否发布,很大程度上取决于次文件的配置。可以说有了此文件,就有了Web服务。
有两种方式可以配置此文件:
1、手写;
2、用Axis工具生成。
我采用Axis工具生成(偷懒是其次,主要原因是不容易出错,也很容易开发)
用Axis的工具,我们必须为Axis搭建一个环境,因为刚才我们下载下来的都是jar包,在windows下要想应用这下jar包,必须将其添加到系统的CLASSPATH中。否则系统无法找到这些功能。

将所有的jar包都添加到CLASSPATH;
创建环境变量,设置AXIS的环境变量.


Java代码 复制代码 收藏代码spinner.gif
  1. 变量名:AXIS_LIB
  2. 变量值:C:\axis-1_4\lib[color=red](我是直接将下载下来的包解压到C盘)[/color]
  3. 将以下变量值加入CLASSPATH
  4. %AXIS_LIB%\axis.jar;
  5. %AXIS_LIB%\axis-ant.jar;
  6. %AXIS_LIB%\commons-discovery-0.2.jar;
  7. %AXIS_LIB%\commons-logging-1.0.4.jar;
  8. %AXIS_LIB%\jaxrpc.jar;
  9. %AXIS_LIB%\log4j-1.2.8.jar;
  10. %AXIS_LIB%\saaj.jar;
  11. %AXIS_LIB%\wsdl4j-1.5.1.jar;
变量名:AXIS_LIB
变量值:C:\axis-1_4\lib[color=red](我是直接将下载下来的包解压到C盘)[/color]
将以下变量值加入CLASSPATH
%AXIS_LIB%\axis.jar;
%AXIS_LIB%\axis-ant.jar;
%AXIS_LIB%\commons-discovery-0.2.jar;
%AXIS_LIB%\commons-logging-1.0.4.jar;
%AXIS_LIB%\jaxrpc.jar;
%AXIS_LIB%\log4j-1.2.8.jar;
%AXIS_LIB%\saaj.jar;
%AXIS_LIB%\wsdl4j-1.5.1.jar;


编写deploy.wsdd文件
在任意路径下创建。我是在myeclipse工程中WEB-INF下创建的。部署时便于生成server-config.wsdd同时也便于工程修改时,修改此文件。

Xml代码 复制代码 收藏代码spinner.gif
  1. <deployment xmlns="http://xml.apache.org/axis/wsdd/"
  2. xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
  3. <!-- 这里的stubs为wsdd描述符中的ServiceNamespace -->
  4. <service name="stubs" provider="java:RPC">
  5. <!-- 这里的ClassName就是我的服务类了,
  6. 这个服务主要功能就是传递一个自定义的对象 -->
  7. <parameter name="className" alue="mypackage.server.HelloDateServer " />
  8. <!-- 这里描术的意思是,此服务类中的方法全部享出来. value值为*号
  9. 如果你只想让你的客户端只能调用其中一个方法时,value值改为方法名就可以了. -->
  10. <parameter name="allowedMethods" value="*" />
  11. </service>
  12. </deployment>
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
	xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
	<!-- 这里的stubs为wsdd描述符中的ServiceNamespace  -->
	<service name="stubs" provider="java:RPC">
		<!-- 这里的ClassName就是我的服务类了,
		这个服务主要功能就是传递一个自定义的对象  -->
		<parameter name="className" alue="mypackage.server.HelloDateServer " />
		<!-- 这里描术的意思是,此服务类中的方法全部享出来. value值为*号
		如果你只想让你的客户端只能调用其中一个方法时,value值改为方法名就可以了. -->
		<parameter name="allowedMethods" value="*" />
	</service>
</deployment>

(简单吧!)
接下来就是生成server-config.wsdd文件!
生成server-config.wsdd配置文件
第一步:用Myeclipse部署Test工程并运行Tomcat

319c3439-4aec-3586-b175-c36047562704.png
第二步:(关键的一步)打开命令与提示符,进入Test工程目录的WebRoot/WEB-INF目录下。
C:\>cd C:\apache-tomcat-6.0.20\webapps\Test\WEB-INF (我的Tomcat直接解压到c盘)
>java org.apache.axis.client.AdminClient –l http://localhost:8080/Test/services/stubs deploy.wsdd (这句话就是生成server-config.wsdd文件的命令,记住,保持Tomact是运行的,不然会报错!)
运行结果:
Java代码 复制代码 收藏代码spinner.gif
  1. - Unable to find required classes (javax.activation.DataHandler and javax.mail.i
  2. nternet.MimeMultipart). Attachment support is disabled.
  3. Processing file deploy.wsdd
  4. <Admin>Done processing</Admin>
- Unable to find required classes (javax.activation.DataHandler and javax.mail.i
nternet.MimeMultipart). Attachment support is disabled.
Processing file deploy.wsdd
<Admin>Done processing</Admin>

(Activation.jar 和 mail.jar这两个包我们没有加入到CLASSPATH中,但是不影响我们的开发。)在此路径下就生成了server-config.wsdd文件了。(哈,这就是我们想要的文件)
将其拷贝到我们的eclipse工程中,以便我们以后部署。
好了大功告成!WebService发布了。重启Tomcat
我们来测试一下,发布是否成功。
Myeclipse给我们提供了Soap工具。打开SOAP Web Services Explorer
45a66d9a-cec6-3eec-a252-063108e61dd9.png
然后点击WSDL Page
cbfa24e3-823c-3b50-a2eb-f5a1b6aa4b08.png
点击WSDL Main
输入URL:http://localhost:8080/Test/services/stubs?wsdl
接下来就可以测试了! 我按照刚刚写的代码,没有问题。

3)生成客户端client stub文件打开浏览器,输入http://localhost:8080/Test/services/stubs?wsdl点击文件->另存为。存到任何目录。我是存在C:\apache-tomcat-6.0.20\webapps\Test\WEB-INF 这样,我的命令提示符就不用换路径了。

stubs.xml重命名为stubs.wsdl

在命令提示符输入如下命令:
Java代码 复制代码 收藏代码spinner.gif
  1. java org.apache.axis.wsdl.WSDL2Java –o ./ -p mypackage.client stubs.wsdl
java org.apache.axis.wsdl.WSDL2Java –o ./ -p mypackage.client stubs.wsdl
解释一下此命令:
Java代码 复制代码 收藏代码spinner.gif
  1. java org.apache.axis.wsdl.WSDL2Java –o %Output_Path% -p %Package% stubs.wsdl
java org.apache.axis.wsdl.WSDL2Java –o %Output_Path% -p %Package% stubs.wsdl

%Output_Path%是客户端文件输出路径,%Package%是包名。

将生成的client文件拷贝到myeclipse中。

facd29b1-4249-325f-a25d-c3400fb2a985.png

接下来,在mypackage.client中添加客户端测试代码。

Java代码 复制代码 收藏代码spinner.gif
  1. src/mypackage/StubsClient.java
  2. package mypackage.client;
  3. import java.net.URL;
  4. public class StubsClient {
  5. /**
  6. * @param args
  7. */
  8. public static void main(String[] args) {
  9. // TODO Auto-generated method stub
  10. // 定义的service和stub
  11. HelloDateServerService service = null;
  12. HelloDateServer stub = null;
  13. try {
  14. System.out.println("connect......");
  15. String StrPortAddress = "http://localhost:8080/Test/services/stubs";
  16. URL portAddress = new URL(StrPortAddress);
  17. // 得到客户端服务
  18. service = new HelloDateServerServiceLocator();
  19. // 得到客户端stub
  20. stub = service.getstubs(portAddress);
  21. // 测试服务方法
  22. String resultStr = stub.helloDate("Google");
  23. System.out.println(resultStr);
  24. } catch (Exception e) {
  25. e.printStackTrace();
  26. } finally {
  27. System.out.println("End.");
  28. }
  29. }
  30. }
src/mypackage/StubsClient.java

package mypackage.client;

import java.net.URL;

public class StubsClient {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// 定义的service和stub
		HelloDateServerService service = null;
		HelloDateServer stub = null;
		try {
			System.out.println("connect......");
			String StrPortAddress = "http://localhost:8080/Test/services/stubs";
			URL portAddress = new URL(StrPortAddress);
			// 得到客户端服务
			service = new HelloDateServerServiceLocator();
			// 得到客户端stub
			stub = service.getstubs(portAddress);
			// 测试服务方法
			String resultStr = stub.helloDate("Google");
			System.out.println(resultStr);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			System.out.println("End.");
		}
	}
}


现在所有的都做完了。试试看吧。一定成功!

用Axis发布Web服务就这么简单。
我这个简单的Web服务的服务类方法的参数是简单的String类型。如果你的工程要求服务类方法传递自定义参数比如UserInfo等等,就需要你研究一下怎么传递自定义类型参数。其实也不难。可以参考http://blog.csdn.net/kay5804/archive/2008/05/04/2382428.aspx。这个人写的很不错!

刚打球回来,又做电脑旁边这么久,脖子疼,感觉自己得颈椎病了。

我要讲的就这么多,旨在,帮助大家快速入手Web Service。如果有什么问题,可以给我留言,有什么错误请指出。谢谢!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值