java调用java web service

java调用java写的web service基本包括两大步: 
第一步就是创建一个web service 
第二部就是创建一个客户端,以调用上面创建好的web service 
具体步骤如下: 
如何创建一个Web Services 
1、创建一个服务接口(跟普通的接口没有任何区别) 
2、创建一个Java类,继承上面定义的服务接口。并保证该类和默认构造函数确保为public 
3、增加XFire servlet相关条目到web.xml中 
   包括: 
  
Java代码   收藏代码
  1.  <servlet>  
  2.     <servlet-name>XFireServlet</servlet-name>  
  3.     <display-name>XFire Servlet</display-name>  
  4.     <servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet  
  5.      </servlet-class>  
  6. </servlet>  
  7.   
  8. <servlet-mapping>  
  9.     <servlet-name>XFireServlet</servlet-name>  
  10.     <url-pattern>/servlet/XFireServlet/*</url-pattern>  
  11. </servlet-mapping>  
  12.   
  13. <servlet-mapping>  
  14.     <servlet-name>XFireServlet</servlet-name>  
  15.     <url-pattern>/services/*</url-pattern>  
  16. </servlet-mapping>  

4、创建services.xml,把它放到WEB-INF/classes/META-INF/xfire目录下 
   如: 
Java代码   收藏代码
  1. <beans xmlns="http://xfire.codehaus.org/config/1.0">  
  2.     
  3.    <service>  
  4.      <name>Banking</name>  
  5.      <namespace>mybank</namespace>  
  6.      <serviceClass>globalzt.service.IBankingService</serviceClass>  
  7.      <implementationClass>globalzt.serviceImpl.BankingServiceImpl</implementationClass>  
  8.    </service>    
  9.     
  10. </beans>  
  11.   
  12. <pre name="code" class="java">让我们看看这里都包含了什么内容。Web Services的定义包含在元素中,它还含有一些子元素。第一个子元素是,它可以是你提供任何的合法名字。这将会被客户端程序和其它需要定位你的服务的组件用到。例如,在服务准备好以后,你将在浏览器上使用这个名字来查看WSDL。  
  13.   
  14.   下一个子元素是<namespace>。任何合法的XML名字都是可以的。<namespace>用来唯一标识你的服务的各个参数。  
  15. <serviceClass>元素包含了Java类的名字,它指定了方法签名。在我们的例子中,它是接口IBankingService。如果Java类没有实现任何接口,你就需要把类的名字放在这里。在你的Java类或者接口中可能有几个方法。只需要一个入口把它们全部发布为Web Services。  
  16.   
  17.   <implementationClass>保存了实现方法的Java类名。这是一个可选元素。如果上一个元素<serviceClass>包含了一个接口,那么相应的实现类必须在这里指定。  
  18.   
  19.   就是这样。我们的Web Services配置完成了。  
  20. </pre>  
  21. <br>  
  22. <br>  

5、增加XFire和第三方包到你的Web应用的WEB-INF/lib文件夹中 
  • activation-1.0.2.jar 
  • commons-codec-1.3.jar 
  • commons-httpclient-3.0.jar 
  • commons-logging-1.0.4.jar 
  • jaxen-1.1-beta-8.jar 
  • jdom-1.0.jar 
  • log4j-1.2.x.jar 
  • mail-1.3.3_01.jar 
  • spring-1.2.x.jar 
  • stax-api-1.0.jar 
  • wsdl4j-1.5.2.jar 
  • wstx-asl-2.9.jar 
  • xbean-2.1.0.jar 
  • xbean-spring-2.2.jar 
  • xfire-all-1.0.jar 
  • XmlSchema-1.0.jar 

服务接口代码如下: 
Java代码   收藏代码
  1. public interface IBankingService {    
  2.   
  3.      public String transferFunds(  
  4.          String fromAccount, String toAccount, double amount, String currency);  
  5.           
  6. }  

服务实现类代码如下: 
Java代码   收藏代码
  1. public class BankingService implements IBankingService {  
  2.       
  3.      //Default constructor.  
  4.      public BankingService(){      
  5.      }  
  6.       
  7.      /** Transfers fund from one account to another. 
  8.      */  
  9.      public String transferFunds(  
  10.          String fromAccount, String toAccount, double amount, String currency){  
  11.           
  12.          String statusMessage = "";  
  13.                         
  14.          //Call business objects and other components to get the job done.  
  15.          //Then create a status message and return.  
  16.          try {  
  17.              NumberFormat formatter = new DecimalFormat("###,###,###,###.00");         
  18.              statusMessage = "COMPLETED: " + currency + " " + formatter.format(amount)+   
  19.              " was successfully transferred from A/C# " + fromAccount + " to A/C# " + toAccount;  
  20.          } catch (Exception e){  
  21.              statusMessage = "BankingService.transferFunds(): EXCEPTION: " + e.toString();  
  22.          }  
  23.          return statusMessage;  
  24.      }  
  25.       
  26. }  


如何创建一个客户端: 
你可以使用任何的SOAP工具创建客户端,例如,.Net或者Apache Axis,有很多种方法:使用从WSDL产生的stubs,使用动态代理,等等。在例子中,我们使用一个动态代理,以一个简单的Servlet形式,叫做WsClient.java。为了保持代码两最小,所有在屏幕显示的元素都放在了doGet()方法中。对Web Service的实际调用由callWebService()方法完成,它相当地简单。和下面的类似: 
Java代码   收藏代码
  1. /* Call the Web service 
  2.      * 
  3.      */  
  4.      public String callWebService(  
  5.          String fromAccount, String toAccount, double amount, String currency)   
  6.          throws MalformedURLException, Exception {  
  7.           
  8.          //Create a metadata of the service        
  9.          Service serviceModel = new ObjectServiceFactory().create(IBankingService.class);          
  10.          log.debug("callSoapServiceLocal(): got service model." );  
  11.      
  12.          //Create a proxy for the deployed service  
  13.          XFire xfire = XFireFactory.newInstance().getXFire();  
  14.          XFireProxyFactory factory = new XFireProxyFactory(xfire);        
  15.       
  16.          String serviceUrl = "http://localhost:8080/websvc/services/Banking";  
  17.           
  18.          IBankingService client = null;  
  19.          try {  
  20.              client = (IBankingService) factory.create(serviceModel, serviceUrl);  
  21.          } catch (MalformedURLException e) {  
  22.              log.error("WsClient.callWebService(): EXCEPTION: " + e.toString());  
  23.          }      
  24.                  
  25.          //Invoke the service  
  26.          String serviceResponse = "";  
  27.          try {   
  28.              serviceResponse = client.transferFunds(fromAccount, toAccount, amount, currency);  
  29.         } catch (Exception e){  
  30.              log.error("WsClient.callWebService(): EXCEPTION: " + e.toString());                   
  31.              serviceResponse = e.toString();  
  32.          }          
  33.          log.debug("WsClient.callWebService(): status=" + serviceResponse);                
  34.   
  35.          //Return the response  
  36.          return serviceResponse;  
  37.      }   

这个代码是如何工作的呢?我来解释一下:首先,我们创建一个服务模型,它包含服务的说明——换句话说,就是服务的元数据。我们使用XFire的ObjectServiceFactory从IBankingService.class接口创建这个模型。 

  接着,为XFire获得一个代理工厂对象,它包含了常规的代码,也相当地简单和易懂。这一步中没有任何特定应用的东西。从这个proxyFactory,使用服务模型和服务端点URL(用来获得WSDL),我们可以得到一个服务的本地代理。就是它了。这个代理就是实际的客户端。现在,我们可以调用它的transferFunds()方法来得到我们需要的Web Service。 

详细代码和jar包见附件 

参考文章地址: http://hi.baidu.com/yaolihui/blog/item/28f0c903b0f005723912bb80.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值