Axis 开发WebService
Axis 开发WebService
最近一直在集成基础事业部开发的一个报表工具,昨天做登录的时候,需要用到webservice 。我们部门用的是Axis2 ,而报表这边用的是Axis。 没用过一,又不想把二的报都导入到报表中, 就试了试用一。看了看文档,生成客户端代码很容易就完成了, 但是发现和二生成的不一样,最后没有耐心了,也没有继续研究下去,还是用了Axis2。
下文是我在学习Axis的时候,看到的一个比较好的帖子,贴上来和大家分享,共同学习进步。
一、环境准备
1 、从axis网站下载相关内容:http: //apache.justdn.org/ws/axis/1_3/
2 、解压后,参考webapps\axis,为了使你的web应用axis开发web service,需要做的事情如下:
a. 将webapps\axis\WEB- INF\lib下的相关jar包拷贝到你自己web应用的lib目录下。另外需要activation.jar、 mail.jar两个支持包。
b.修改web.xml,加载axis的servlet。
< 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- 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>
二、开发service
服务器端的service为普通的java类:com.hnisi.axis.BookOrder
public class BookOrder {
public String getName(String name) {
System.out.println("start execute ..." );
return "book name: " + name;
}
public Book setPrice(Book book){
book.setPrice(10 );
return book;
}
}
com.hnisi.axis.Book为简单的值对象,包含两个属性name,price。
三、发布service
1 、手工修改server- config.wsdd文件(在已有server- config.wsdd文件的情况下)
添加service:
< service name= "BookOrder" provider= "java:RPC" >
< parameter name= "allowedMethods" value= "*" / >
< parameter name= "className" value= "com.hnisi.axis.BookOrder" / >
< / service>
allowedMethods是调用的服务的方法,如果有多个方法的话可以用空格分开,当用* 的时候表示全部。
2 、写deploy.wsdd文件,使用axis提供的AdminClient工具,自动生成server- config.wsdd。deploy.wsdd文件如下:
< deployment xmlns= "http://xml.apache.org/axis/wsdd/"
xmlns: java= "http://xml.apache.org/axis/wsdd/providers/java" >
< service name= "BookOrder" provider= "java:RPC" >
< parameter name= "className" value= "com.hnisi.axis.BookOrder" / >
< parameter name= "allowedMethods" value= "*" / >
< / service>
< / deployment>
deploy.wsdd文件位于/ web- inf目录下。
使用AdminClient发布该service,在/ web- inf目录下新建deploy.bat文件:
set LIB_HOME= ./ lib
set CPATH= .;% LIB_HOME% \axis.jar;% LIB_HOME% \jaxrpc.jar;% LIB_HOME% \commons- logging- 1 .0 .2 .jar;% LIB_HOME% \commons- discovery- 0 .2 .jar;% LIB_HOME% \saaj.jar;% LIB_HOME% \activation.jar;% LIB_HOME% \mail.jar
java - classpath % CPATH% org.apache.axis.client.AdminClient - lhttp: //localhost:8080/test/services/AdminService deploy.wsdd
pause
执行deploy.bat,会生成server- config.wsdd文件。成功生成的几个必要条件:
a. axis相关jar包存在于/ web- inf/ lib下
b. 你的tomcat必须启动,同时留意deploy.bat文件的第三行"http://localhost:8080/test/services/AdminService" ,根据具体情况修改。
否则会报"java.net.ConnectException: Connection refused: connect" 异常。
综合上述,在第一次发布service的情况下,需用方式2 生成server- config.wsdd,后续开发过程中,使用方式1 直接修改server- config.wsdd文件。
发布后,执行http: //localhost:8080/test/services,能看到当前web应用的所有web service.
http: //localhost:8080/test/services/BookOrder?wsdl 为ServerService对应WSDL.
还可以通过IE浏览器直接调用服务,方法是在服务URL后加"method=xxx" ,其中xxx是要调用的方法名称:
http: //localhost:8080/test/services/BookOrder?method=getName&name=HH
四、调用service
有两种方式可以调用service。
1 、使用org.apache.axis.client.Call直接调用
package com.hnisi.axis;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
public class CallService {
public static void main(String[] args) {
try {
String endpoint = "http://localhost:8080/test/services/BookOrder" ;
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress( new java.net.URL(endpoint) );
call.setOperationName("getName" );
String ret = (String) call.invoke(new Object[] {"yehailong" });
System.out.println("return value is " + obj[0 ]);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
2 、根据wsdl生成客户端java代码
在/ web- inf目录下新建make.bat文件:
set LIB_HOME= .