Axis通过wsdd部署Web Service

axis网上的教程很多,不过搜来搜去,总是只有那么几篇。仔细看了一下那几篇文章,都感觉到不是自己想要的,所以自己整理了一篇分享一下

本文介绍axis应用的一个小例子,没有麻烦的命令行操作,只需照下面的步骤做就可以了。以下是详细的操作步骤。(注:本实例用的是axis,非axis2)

 

1.       环境准备

l  MyEclipse 6.5

l  Tomcat 6

l  JDK 1.5

l  axis(axis2)

 

2.       新建web工程

新建一web工程,工程名称为axistest。新建完成后,导入下图所示的axis相关的jar包。

Axis通过wsdd部署Web Service_第1张图片

 

3.       web.xml中添加axis相关的配置信息

<servlet> <display-name>Apache-Axis Servlet</display-name> <servlet-name>AxisServlet</servlet-name> <servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class> </servlet> <servlet> <display-name>Axis Admin Servlet</display-name> <servlet-name>AdminServlet</servlet-name> <servlet-class>org.apache.axis.transport.http.AdminServlet</servlet-class> <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>AdminServlet</servlet-name> <url-pattern>/servlet/AdminServlet</url-pattern> </servlet-mapping>

 

4.       新建提供服务的Java

src下新建com包,在com包下新建HelloWorld类,HelloWorld的内容如下:

package com; public class HelloWorld { public String sayHello(String msg){ if(null==msg || "".equals(msg)){ return "您好!"; }else{ return "您好" + msg + "!"; } } public int sayAge(){ return 28; } }  

5.       配置server-config.wsdd

WEB-INF下新建server-config.wsdd文件,内容如下:

<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> <!-- 处理器 --> <handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper" /> <!-- 一个服务 --> <!-- provider="java:RPC" webservice是以javabean的形式提供的--> <service name="helloWorldService" provider="java:RPC"> <!-- 指定类名 --> <parameter name="className" value="com.HelloWorld" /> <!-- 类中允许访问的方法 --> <parameter name="allowedMethod" value="*"></parameter> </service> <!-- 指定处理器 --> <transport name="http"> <requestFlow> <handler type="URLMapper"/><!-- 引用上边的 --> </requestFlow> </transport> </deployment>

wsdd文件标签节点说明:

deployment:表明这是一个axis部署描述文件;

serviceaxis提供的一个web service服务。service标签中parameter allowedMethod用于指定一个以空格分隔的方法名,只有这些方法可以通过web service访问。也可以将这个值指定为“*”表示所有的方法都可以访问。

provider:服务类型,共有四种,分别是RPC,Document,WrappedMessage。详见org.apache.axis.providers包的API文档;

parameter:用来设置Axis的各种属性;

requestFlow:局的请求Handlers,在调用实际的服务之前调用;

transport:定义了服务器端的传输方式

 

至此web service相关的东西已经配置好,此时工程的目录结构如下

 

Axis通过wsdd部署Web Service_第2张图片

6.       部署到Tomcat测试

将工程发布到Tomcat,在浏览器里访问http://127.0.0.1:9999/axistest/services,如果出现如下页面,则表示web service部署成功

Axis通过wsdd部署Web Service_第3张图片

 

点击上面的wsdl链接,进入下图所示页面

Axis通过wsdd部署Web Service_第4张图片

注意上面的红圈的namespace,下面测试QName有用到。

 

7.       客户端测试

com包下新建测试类,名称为ClientTest,内容如下:

package com; import java.net.MalformedURLException; import java.rmi.RemoteException; import javax.xml.namespace.QName; import javax.xml.rpc.ServiceException; import org.apache.axis.client.Call; import org.apache.axis.client.Service; /** * @author 花非花雾非雾 * @date 2010-12-24 */ public class ClientTest { public static void main(String[] args) throws MalformedURLException, RemoteException { Service service = new Service(); try { Call call = (Call) service.createCall(); //设置地址 call.setTargetEndpointAddress(new java.net.URL("http://127.0.0.1:9999/axistest/services/helloWorldService?wsdl")); //设置要执行的方法 call.setOperationName(new QName("http://com","sayHello")); //设置要传入参数,如果没有要传入的参数,则不要写这个 call.addParameter("msg", org.apache.axis.Constants.XSD_STRING,javax.xml.rpc.ParameterMode.IN); //设置返回的类型 call.setReturnType(org.apache.axis.Constants.XSD_STRING); String name = "花非花雾非雾"; //执行,调用webservice String result = (String) call.invoke(new Object[]{name}); System.out.println("返回的结果是:"+result); } catch (ServiceException e) { e.printStackTrace(); } } }   

如果一切正常,运行结果如下:

返回的结果是:您好花非花雾非雾!

 

参考资料:

1.       axis 的官方资料

 

你可能感兴趣的:(Web,String,webservice,MyEclipse,service,Deployment)