(二)axis环境的配置
(1)pom.xml依赖配置
<!-- webservice-axis -->
<dependency>
<groupId>commons-discovery</groupId>
<artifactId>commons-discovery</artifactId>
<version>0.5</version>
</dependency>
<dependency>
<groupId>org.apache.axis</groupId>
<artifactId>axis</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>org.apache.axis</groupId>
<artifactId>axis-jaxrpc</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>axis</groupId>
<artifactId>axis-wsdl4j</artifactId>
<version>1.5.1</version>
</dependency>
(2)web.xml的配置(访问路径)
<!--axis相关配置 -->
<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>/services/*</url-pattern>
</servlet-mapping>
(3)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"/>
<!--名称空间,一般是包名反写,以及暴露出的service名称为xxx,此处名为Validate,可以随自己的想法指定--!>
<wsdl targetNamespace="xxxxx" ></wsdl>
<service name="Validate" provider="java:RPC">
<!--接口的类的完整路径--!>
<parameter name="className" value="xxxxxx"/>
<!--*代表默认暴露所有方法--!>
<parameter name="allowedMethods" value="*"/>
</service>
<transport name="http">
<requestFlow>
<handler type="URLMapper"/>
</requestFlow>
</transport>
</deployment>
(4)服务端的编写
一个接口类,一个接口实现类
接口类可以定义需要暴露的方法.具体方法实现由接口实现类做.
接口实现类需要继承 ServletEndpointSupport类,其中可以@Override的方法有onInit() 方法,表示请求时会先加载的方法.
(5)客户端的调用代码
public class TestClient {
public static void main(String[] args) throws Exception {
try {
String ret=null;
//需要调用的方法名,在服务端代码定义的
String Operation="getDate";
//需要暴露的wsdl地址,若启用ssl加密则是https协议,若无则是http协议,Validate是在wsdd文件中指定的service名称,
String endPoint="http://localhost/xxx/services/Validate?wsdl";
//在wsdd中指定的名称空间
String targetNameSpace="https://impl.interfaces.service.com";
//使用call的方式调用
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(new java.net.URL(endPoint));
call.setOperationName((new QName(targetNameSpace, Operation)));
ret=(String) call.invoke(Operation, null);
//返回方法调用的结果
System.out.println(ret);
} catch (ServiceException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}