【Java】Axis1.4 简单样例
原创
©著作权归作者所有:来自51CTO博客作者kida_yuan的原创作品,请联系作者获取转载授权,否则将追究法律责任
Axis1.4,都什么年代了还用这种技术吗?No,这只是将以前开发过程中遇到的关于Axis的使用样例搬过来而已(初发表2016年5月)
Axis安装
从Apache官网下载Axis项目,解压后将axis文件夹部署到Tomcat的webapps目录下,如下图:

PS:这个时候还在用tomcat6,这个东西有多旧可想而知。
进入${TOMCAT_HOME}\webapps\axis\WEB-INF\web.xml中可以看到的配置信息如下所示:
<listener>
<listener-class>org.apache.axis.transport.http.AxisHTTPSessionListener</listener-class>
</listener>
<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>
<servlet-name>AdminServlet</servlet-name>
<display-name>Axis Admin Servlet</display-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>
<display-name>SOAPMonitorService</display-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>
...
从配置得知,AxisServlet和SOAP监控服务都会在Tomcat启动后100ms后自动启动并且访问AxisServlet路径为“/servlet/AxisServlet”和“/services/*”,文件后缀为jws。而SOAP监控服务访问地址为“/SOAPMonitor”,访问端口5001。
编写WebService服务端
public class HelloWorldServer {
public HelloWorldServer(){
System.out.println("--这是我的HelloWorldServer的构造函数--");
}
public String outputSay(String msg){
return "Hello, " + msg + "!";
}
}
服务端代码编写完成后即可进行部署,部署有两种方式。
方法1(直接将文件放入Tomcat内部署)
直接将HelloWorldServer.java文件拷贝到${TOMCAT_HOME}\webapps\axis目录下,直接重命名为HelloWorldServer.jws
有以下两点需要注意:
1. HelloWorldServer.java不能放在package中;
2. 有部分版本需要将${JAVA_HOME}\lib\tools.jar拷贝到${TOMCAT_HOME}\webapps\axis\WEB-INF\lib目录下;
之后就可以通过浏览器输入路径访问
http://localhost:8088/axis/HelloWorldServer.jws?wsdl
如果真的要使用这种方法那最起码要写个脚本在部署时将Java文件拷贝到Tomcat对应目录下。
方式2(项目编码部署)
- 创建一个新项目,并将axis相关的jar包引入到项目里面,接着就可以将HelloWorldServer.java放到io.yzh.ws包中。
- 接着写一个deploy.wsdd文件,如下图所示:
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service name="HelloWorldServer" provider="java:RPC">
<parameter name="className" value="io.yzh.ws.HelloWorldServer" />
<parameter name="allowedMethods" value="*" />
<parameter name="scope" value="application" />
</service>
</deployment>
- 通过Axis提供的客户端工具org.apache.axis.client.AdminClient,可将HelloWorldServer部署到Tomcat。默认情况下Axis会寻址http://localhost:8080/axis,可以通过“-p” 参数指定其它端口。上面示例中webservice部署描述文件是deploy.wsdd,Tomcat端口是8088。运行后,可以看到${TOMCAT_HOME}\webapps\axis\WEB-INF目录下多了一个server-config.wsdd文件,打开后可以看到刚才写的deploy.wsdd的内容。
- 将编译后的HelloWorldServer.class部署到${TOMCAT_HOME}\webapps\axis\WEB-INF\classes目录。
- 在浏览器中输入:http://localhost:8088/axis/services/HelloWorldServer?wsdl即可访问。
编写WebService客户端
package io.yzh.ws;
import javax.xml.namespace.QName;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
public class HelloServerClient {
public static void main(String[] args) {
try {
String endpoint = "http://localhost:8088/axis/services/HelloWorldServer";
Service service = new Service();
Call call = (Call)service.createCall();
call.setTargetEndpointAddress(new java.net.URL(endpoint));
call.setOperationName(new QName("http://", "outputSay"));
String rtn = (String)call.invoke(new String[]{"yzh你知道么"});
System.out.println("Hello user, you send message to service and return '"+rtn+"'");
} catch (Exception e) {
e.printStackTrace();
}
}
}
执行输出 :
Hello user, you send message to service and return 'Hello, yzh你知道么!'
卸载WS服务
- 编写undeploy.wsdd文件
<undeployment name="test" xmlns="http://xml.apache.org/axis/wsdd/">
<service name="HelloWorldServer"/>
</undeployment>
- 利用AdminClient工具执行卸载操作
- 执行成功后,可以看到server-config.wsdd中已经没了刚才的HelloWorldServer的描述
AdminClient常用方法介绍
1. 发布webservice服务到服务器端
2. 从服务器取消webservice服务
3. 查看服务器所提供的所有的webservice服务列表
4. 将ws部署到指定的WEB项目(要先将.jar及web.xml拷贝到自己的项目中来)
deploy.wsdd –p 8088 –s MyWebProject/servlet/AxisServlet