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
***************************************************************************************
org.apache.axis.wsdl.Java2WSDL? 中的命令解釋
-o? :生成的WSDL文件
-l? ?:Web服務的位置
-n? :WSDL文件的名字空間
-p? :包到名字空間的映射
***************************************************************************************
java org.apache.axis.wsdl.WSDL2Java -o . -d Session -s -S true
-Nurn:BookServletService com.hellking.webservice.servlet temp.wsdl
使用這個命令后將生成以下文件:
BookServiceInterface.java:新的BookServiceInterface接口,它擴展了java.rmi.Remote接口;
BookServiceInterfaceService.java:客戶端服務接口,用來獲得BookServiceInterface對象的引用;
BookServiceInterfaceServiceLocator.java:在客戶端使用,主要用來服務定位;
BookServletServiceSoapBindingImpl.java:服務端實現類,它實現了BookServiceInterface接口,服務端的業務方法實現代碼就在這里編寫;
BookServletServiceSoapBindingSkeleton.java:服務端Skeleton;
BookServletServiceSoapBindingStub.java:客戶端Stub;
BookVO.java:新的BookVO序列化對象;
deploy.wsdd:部署這個Web服務的腳本;
undeploy.wsdd:卸載這個Web服務的腳本。