1.首先建一个web工程,在buildpath里加入axis的相关包。(笔者推荐spring-framework-2.0.8-with-dependencies.zip里面几乎包含了java开发所能用到的所有的包。)
2.写一个最简单的java类,其中sayHello就是要发布的方法。
public class WebServiceTest {
public String sayHello(String name) {
return "Hello "+name+"!,this is an axis service.";
}
}
3.编写server-config.wsdd文件描述要发布的方法,放在web-inf目录下。
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<handler type="java:org.apache.axis.handlers.http.URLMapper"
name="URLMapper" />
<service name="SayHello" provider="java:RPC">
<parameter name="className"
value="qw.webservice.WebServiceTest" />
<parameter name="allowedMethods" value="sayHello" />
</service>
<transport name="http">
<requestFlow>
<handler type="URLMapper" />
</requestFlow>
</transport>
</deployment>
4.配置web.xml文件,只需要添加如下内容,使项目能够相应客户端的请求。
<servlet>
<servlet-name>AxisServlet</servlet-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>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>*.jws</url-pattern>
</servlet-mapping>
5.用eclipse将工程部署到tomcat下,启动,如果报类没有定义那就是缺包,添加即可。
6.测试一下服务是否发布成功。在浏览器地址栏输入http://localhost:8080/WebService/services,其中 WebService是我的工程的名字,根据需要修改。页面应该显示我们发布的服务如下,点击wsdl链接还能显示自动生成的wsdl文件的内容。
And now... Some Services
- SayHello (wsdl)
- sayHello
7.写客户端程序验证服务是否运行正常。
import java.net.MalformedURLException;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import org.apache.axis.client.Service;
import org.apache.axis.client.Call;
public class Test {
public static void main(String[] args) throws ServiceException, MalformedURLException, RemoteException {
String endpoint = "http://localhost:8080/WebService/services/SayHello";
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(new java.net.URL (endpoint));
call.setOperationName("sayHello");
String res=(String)call.invoke(new Object[]{"qw"});
System.out.print(res);
}
}
如果打印出Hello qw!那么恭喜你,你的第一个webservice发布成功了。
8.实际使用时,根据wsdl文件使用ant或axis提供的工具自动生成客户端类,然后使用,而不是用上面的方式,好处是采用上面的方式使用有时在序列化时会产生bug。