小秋的家

home

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  1 Posts :: 91 Stories :: 17 Comments :: 0 Trackbacks
  第二种:用eclipse创建webservice:  
   最近看了一下web service,算是揭开了它的面纱,才发现它原来并不神秘,相反很简单,但是它却很强大.
一句话来描述它:跨语言平台,将写好的组件利用接口分布式发布出来,供其他人调用.
呵呵,当然,可能说的不完全对,大家就包含了,因为仅仅只是看了一天,写了一个简单的例子.
这里写一下如何发布一个简单的web service吧....
Web Services引擎现在有两大主流:XFire和AXIS2
这里我只介绍XFire,这两个主流我都分别写了一个简单的例子,个人觉的XFire比AXIS2更容易一点.
首先,在看后面的例子讲解前,有必要去看一下web service的教程,它究竟能做什么,它的标准是什么。
这里我介绍一个网址,浅显而易懂,有的解释的过于复杂,让人看的挺晕的.
http://www.w3school.com.cn/webservices/ws_platform.asp
下面开始讲解一个由XFire做为web service引擎的例子
首先来讲解服务端的构建:
服务器环境是:jdk1.6+Apache tomcat5.5
1.我们首先写一个接口:IBankingService
   public interface IBankingService {
       public int transferFunds(int a, int b);
   }
2.写它的实现类:BankingService
   public class BankingService implements IBankingService {

       //Default constructor.
       public BankingService() {
       }
    
       public int transferFunds(int a, int b) {
          int c = a + b;
          return c;
      }
}
3.Web应用的部署描述符

  在Java中,Web应用程序通常需要至少一个部署描述符(叫做web.xml)对其进行配置。XFire本身是一个基于servlet的应用 程序。因此,我们需要增加必要的引用到描述符文件中。然后我们还必须配置将要创建的Web Services。我们使用一个称为services.xml的新文件来完成这件事。

首先,修改web.xml。

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    <servlet>
        <servlet-name>XFireServlet</servlet-name>
        <servlet-class>
            org.codehaus.xfire.transport.http.XFireConfigurableServlet
        </servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>XFireServlet</servlet-name>
        <url-pattern>/servlet/XFireServlet/*</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>XFireServlet</servlet-name>
        <url-pattern>/services/*</url-pattern>
    </servlet-mapping>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
   </web-app>
4.在WebRoot\META-INF目录下新建xfire文件夹,然后在xfire目录下添加一个XFire使用的配置文件 services.xml,该配置文件中的内容反映了要将哪些java类发布为web服务。本例中的services.xml内容如下:
<beans xmlns="http://xfire.codehaus.org/config/1.0"> 
   <service>
     <name>Banking</name>
     <namespace>mybank</namespace>
     <serviceClass>com.xfire.test.IBankingService</serviceClass>
     <implementationClass>com.xfire.test.BankingService</implementationClass>
   </service>   
</beans>
5.加入xfire的库文件,包含以下jar包:
XFire和其它类库,需要得到所有必需的类库。我们怎样得到它们呢?去XFire网站,下载xfire-distribution- 1.0.zip,然后解压到一个本地文件夹。复制下面的jar文件和它的库文件夹到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

6.打war包,放到tomcat下,开启tomcat,然后访问http://localhost:8080/xfireDemo/services/Banking?wsdl
xfireDemo是我项目的名称.
如果页面中看到wsdl的XML文件,说明服务端发布成功了.如果抛异常了:说明services.xml文件不存在
“org.springframework.beans.factory.BeanDefinitionStoreExcep
解决方案:把WebRoot下整个META-INF文件夹(包含前面生成的xfire文件)拷贝到WebRoot下的classes文件夹下就OK了
到这里,我相信大家都能看到在页面上看到wdsl文件内容了,可以看看内容具体是什么,如果大家了解过wdsl.

现在开始构建客户端:

说明:本客户端使用xfire针对eclipse开发的插件(还可使用ant生成客户端,请参考其他材料),下载和使用说明参见:http://xfire.codehaus.org/Eclipse+Plugin

1.在eclipse中新建一个名为helloClient的java object。

2.使用xfire插件调用服务器端的wsdl(web服务描述语言)文档生成客户端可调用的java类,

   打开file->new->other->Code generation from wsdl document

  

 3.新建一个名为Client的客户端类。其代码如下:

public class Client {

    BankingClient bc;
    BankingPortType bpt;
   
    public Client(){
        bc=new BankingClient();
        bpt=bc.getBankingHttpPort();
        System.out.println("result:     "+bpt.transferFunds(2, 3));
    }
   
    public static void main(String[] args){
        Client c = new Client();
    }
}
4.如果这个时候运行,你可能会遇见以下报错信息:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/httpclient/methods/RequestEntity
这是由于缺少apache的commons httpclient库文件.添加进去再试,又报错
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/codec/DecoderException
这是由于缺少apache的commons codec库文件,添加进去再试,成功显示:result:     5
下面是服务端和客户端结构截图:

好了,我这人挺懒的,都不喜欢写些笔记,今天真是难得写一次呀。


posted on 2010-07-01 15:17 棋剑小秋 阅读(977) 评论(0)  编辑  收藏 所属分类: web service

只有注册用户登录后才能发表评论。


网站导航: