(二)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(); } }
}
}
