微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

axis 实现的webservice简单例子

今天学习了一下webservice的东西,在网上看了些简单的例子,自己有实现了一下,例子都很简单,只是需要哪些JAR倒是挺烦的,因为网上的例子只提到AXIS,其他需要的都是debug出来的。特意列出来,不甚懂为什么需要,只是没有就不能成功。高手看了,还望指点一二。

项目的名字是:webserviceDemo

必需的JAR

axis.jar

commons-logging.jar

saaj.jar

jaxrpc.jar

commons-discover-0.2.jar

wsdl4j-1.5.1.jar

配置文件

主要是web.xml 和 *.wsdd 文件的配置,都放在web-inf下

(1)web.xml

没什么需要特别说明的,就和配置普通的servlet一样

 
 
  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> 
  3.   <display-name>TrendMicro SilkCentral Test Manager Report System</display-name> 
  4.     
  5.   <session-config> 
  6.     <session-timeout>30</session-timeout> 
  7.   </session-config> 
  8.     
  9.     
  10.   <welcome-file-list> 
  11.     <welcome-file>index.html</welcome-file> 
  12.   </welcome-file-list> 
  13.     
  14.   <servlet> 
  15.         <servlet-name>AxisServlet</servlet-name> 
  16.         <servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class> 
  17.     </servlet> 
  18.     <servlet-mapping> 
  19.         <servlet-name>AxisServlet</servlet-name> 
  20.         <url-pattern>/services/*</url-pattern> 
  21.     </servlet-mapping> 
  22.  
  23.  
  24. </web-app> 

(2)server-config.wsdd

 

 
 
  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">    
  3.  
  4. <globalConfiguration> 
  5.   <parameter name="sendMultiRefs" value="true"/> 
  6.   <parameter name="disablePrettyXML" value="true"/> 
  7.   <parameter name="dotNetSoapEncFix" value="true"/> 
  8.   <parameter name="enableNamespacePrefixOptimization" value="false"/> 
  9.   <parameter name="sendXMLDeclaration" value="true"/> 
  10.   <parameter name="sendxsitypes" value="true"/> 
  11.   <parameter name="attachments.implementation" value="org.apache.axis.attachments.AttachmentsImpl"/> 
  12. </globalConfiguration> 
  13.  
  14.   <handler type="java:org.apache.axis.handlers.http.URLMapper" name="URLMapper"/>     
  15.   <service name="Test" provider="java:RPC">     
  16.      <parameter name="className" value="test.Test"/><!--  你要改的就是这.这写上要调用的类.就可以 --> 
  17.      <parameter name="scope" value="request"/> 
  18.      <parameter name="allowedMethods" value="*"/> <!-- 这*代表所有的方法  -->   
  19.      <messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/> 
  20.   </service>     
  21.   <transport name="http">     
  22.      <requestFlow>     
  23.         <handler type="URLMapper"/>     
  24.      </requestFlow>     
  25.   </transport>     
  26. </deployment> 

编写方法

 

 
 
  1. package test;  
  2.  
  3.  
  4. public class Test {  
  5.  
  6.     public String Test1(String name){  
  7.         return name;  
  8.     }  
  9.  
  10. }  

 

测试

访问http://localhost:8080/webserviceDemo/services ,测试是否成功,注意地址最后不用加/,加上就访问不到了(不明白未什么)

 

调用

webservice上的方法参数可以任意传,但是返回值我只会返回基本类型,如果要返回对象、数组的,我还不知道怎么弄。下面的例子是简单的调用

 

 
 
  1. package test;  
  2.  
  3. import java.util.List;  
  4.  
  5. import org.apache.axis.client.Call;  
  6. import org.apache.axis.client.Service;  
  7.  
  8. public class TestCall {  
  9.       
  10.     public static void main(String[] args) {  
  11.         // Todo Auto-generated method stub  
  12.         String url = "http://localhost:8080/webserviceDemo/services/Test";  
  13.         Service service = new Service();  
  14.         Call call;  
  15.         try {  
  16.             call = (Call) service.createCall();  
  17.             call.setTargetEndpointAddress(new java.net.URL(url));  
  18.             call.setoperationName("Test1");  
  19.             call.setReturnClass(List.class);  
  20.               
  21.             int ret = (Integer) call.invoke(new Object[]{"nameameddfasdfsdf"});  
  22.             System.out.println("--------"+ret);  
  23.         } catch (Exception e) {  
  24.             // Todo Auto-generated catch block  
  25.             e.printstacktrace();  
  26.         }  
  27.     }  
  28.  
  29. }  

 

 好,就到这些,实现这个例子,遇到的纠结问题就是那几个jar的问题。然后就是调用时,怎么设置传递参数的问题。传递参数有很多方法要设置,比如call.addParameter(),call.setReturnType,qn等等,网上看的,不是很明白,记下来,留个提示

顺道说一句,例子如有雷同,那肯定是………………我copy别人的,嘿嘿。(心里感谢那些勤奋写博客的各位)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐