最近接手一个项目,web service用的是axis,简单地做了一个Demo来熟悉。中间碰到了不少麻烦,现在把整个过程记录下来备忘。
开发环境:Eclipse JEE
1.新建Dynamic Web Project。
2.下载axis 1.4,解压,将lib内的文件拷贝到项目的WEB-INF/lib中。
3.下载activation.jar和mail.jar,同样拷贝到项目的WEB-INF/lib中。这两个jar不是运行必需,但是在由deploy.wsdd生成server-config.wsdd过程中要用到。我是从axis2 1.6的lib中直接提取。
4.修改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>/servlet/AxisServlet</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping>
部署项目到服务器中,访问${app-path}/servlet/AxisServlet。
到现在,基本的框架已经可以使用。目前项目的目录结构是:
├─src └─WebContent └─WEB-INF │ web.xml │ └─lib activation-1.1.jar axis-ant.jar axis.jar commons-discovery-0.2.jar commons-logging-1.0.4.jar jaxrpc.jar log4j-1.2.8.jar log4j.properties mail-1.4.jar saaj.jar wsdl4j-1.5.1.jar
5.编写服务代码及deploy.wsdd、undeploy.wsdd。
package test; public class TestService { public String welcome(String name) { return "Welcome, " + name + "!"; } }
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> <service name="TestService" provider="java:RPC"> <parameter name="className" value="test.TestService" /> <parameter name="allowedMethods" value="*" /> </service> </deployment>
<undeployment xmlns="http://xml.apache.org/axis/wsdd/"> <service name="TestService" /> </undeployment>
6.生成server-config.wsdd。
启动服务器,进入WEB-INF下执行
java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient -lhttp://localhost:8080/axis/services/TestService deploy.wsdd
为了方便可以使用ant脚本。
<?xml version="1.0" ?> <project name="wsdd-deploy" default="deploy"> <target name="deploy"> <java classname="org.apache.axis.client.AdminClient" fork="true"> <jvmarg value="-Djava.ext.dirs=lib" /> <arg value="-lhttp://localhost:8080/axis/services/TestService" /> <arg value="deploy.wsdd" /> </java> </target> <target name="undeploy"> <java classname="org.apache.axis.client.AdminClient" fork="true"> <jvmarg value="-Djava.ext.dirs=lib" /> <arg value="undeploy.wsdd" /> </java> </target> </project>
访问${app-path}/servlet/AxisServlet。
7.编写客户端代码测试。
package test; import javax.xml.namespace.QName; import javax.xml.rpc.Call; import org.apache.axis.client.Service; public class TestClient { public static void main(String[] args) throws Exception { String endpoint = "http://localhost:8080/axis/services/TestService"; Service service = new Service(); Call call = service.createCall(); call.setTargetEndpointAddress(endpoint); call.setOperationName(new QName(endpoint, "welcome")); Object result = call.invoke(new Object[] { "baby" }); System.out.println(result); } }
输出:
Welcome, baby!
最终目录结构:
├─src │ └─test │ TestClient.java │ TestService.java │ └─WebContent └─WEB-INF │ deploy.wsdd │ undeploy.wsdd │ web.xml │ wsdd-build.xml │ └─lib activation-1.1.jar axis-ant.jar axis.jar commons-discovery-0.2.jar commons-logging-1.0.4.jar jaxrpc.jar log4j-1.2.8.jar log4j.properties mail-1.4.jar saaj.jar wsdl4j-1.5.1.jar