最近接手一个项目,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
来源:oschina
链接:https://my.oschina.net/u/116768/blog/71234