1、建立代理接口文件
public interface ISendSms extends java.rmi.Remote {
public String getUser(String id,String type);
}
转到在目录..\WebRoot\WEB-INF\classes下:
2、生成client stub文件, 生成SendSms.wsdl文件
java -Djava.ext.dirs=../lib org.apache.axis.wsdl.Java2WSDL -oSendSms.wsdl -lhttp://localhost:8080/websms/services/SendSms -n"urn:SendSms" -p"sample.webservice" "urn:SendSms" sample.webservice.ISendSms
生成的SendSms.wsdl文件中,参数名称默认为in1,in2等,需要改成相应的名称。
3、生成client stub
java -Djava.ext.dirs=../lib org.apache.axis.wsdl.WSDL2Java -o . -d Session -s -S true -Nurn:SendSms sample.webservice SendSms.wsdl
生成的文件列表如下:
deploy.wsdd
undeploy.wsdd
ISendSms.java
ISendSmsService.java
ISendSmsServiceLocator.java
SendSmsSoapBindingImpl.java
SendSmsSoapBindingSkeleton.java
SendSmsSoapBindingStub.java
4、布署服务,在WEB-INF目录下生成server-config.wsdd文件, 随Tomcat启动自动加载里面定义的服务
转到目录..\WebRoot\WEB-INF\classes\sample\webservice下
java -cp %AXISCLASSPATH% org.apache.axis.client.AdminClient -lhttp://localhost:8080/websms/services/AdminService deploy.wsdd
在Axis里书写deploy.wsdd并利用org.apache.axis.client.AdminClient发布,其主要工作就是把<service>标签中的内容添加在server-config.wsdd里,所以一般直接编辑server-config.wsdd文件会更方便一些。不过当你还没有server-config.wsdd文件时,使用deploy.wsdd的方法会更方便些,因为AdminClient会帮你生成一些额外的xml元素(<handler>等等),而这些元素是必要的。
5、项目中加入Axis所需的包, web.xml加入相关定义
<display-name>Apache-Axis</display-name>
<servlet>
<display-name>Apache-Axis Servlet</display-name>
<servlet-name>AxisServlet</servlet-name>
<servlet-class>
org.apache.axis.transport.http.AxisServlet
</servlet-class>
</servlet>
<servlet>
<display-name>Axis Admin Servlet</display-name>
<servlet-name>AdminServlet</servlet-name>
<servlet-class>
org.apache.axis.transport.http.AdminServlet
</servlet-class>
<load-on-startup>100</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
通过http://localhost:8080/websms/services/SendSms?wsdl来查看WSDL描述了
6、测试代码
public static void main(String[] args) {
try{
/*ISendSmsService service = new ISendSmsServiceLocator();
ISendSms sender = service.getSendSms();
String result = sender.send("cid","cname");
System.out.println("call result:"+result);*/
String tvServiceURL = "http://localhost:8080/websms/services/SendSms"; //web service 地址
java.net.URL endpointURL = new java.net.URL(tvServiceURL);
String result = "ok";
result = new SendSmsSoapBindingStub(endpointURL,null).send("id","cname");
System.out.println("call result:"+result);
}
catch(Exception ex){
ex.printStackTrace();
}
}
我们还可以通过IE浏览器直接调用服务,方法是在服务URL后加“method=xxx”,其中xxx是要调用的方法名称。例如可以通过http://localhost:8080/websms/services/SendSms?method=send&userId=uid&...调用方法。
====================================================================================
另外, 也可能过新建一个deploy.wsdd文件,通过这个文件直接布署我们的服务
java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient -lhttp://localhost:8080/websms/services/SendSms deploy.wsdd
// 它会在WEB-INF目录生成server-config.wsdd文件, 若此文件已存在, 它会在文件加入当前服务的注册。
生成wsdl文件
java -Djava.ext.dirs=../lib org.apache.axis.wsdl.Java2WSDL -oSendSms.wsdl -lhttp://localhost:8080/websms/services/SendSms -nsendsms sample.webservice.SendSms
生成客户端文件
java -Djava.ext.dirs=../lib org.apache.axis.wsdl.WSDL2Java SendSms.wsdl -p client