服务热线:0755-83100310(7X24h)

Java平台上如何开发WebService

发布者:admin    发布时间:2019-08-18    人气:311

当前位置:首页 > 动态 > 技术分享

采用的工具:Eclipse3.1.2 + Tomcat5.5 + XFire1.1 。使用XFire开发WebService应该说非常的容易,只需要按照下面例子的步骤来做:

      (1)在Eclipse中新建一个dynamic Web Project ,假设名为XFireZhuweiTest。

      (2)导入XFire用户库。该库中应包含xfire-1.1目录下的xfire-all-1.1.jar文件,以及xfire-1.1\lib目录下的所有文件。

      (3)将上述的XFire用户库中的所有文件拷贝到XFireZhuweiTest项目的WebContent\WEB-INF\lib目录下。

      (4)修改WebContent\WEB-INF\web.xml配置文件的内容,下面是修改后web.xml:

       <?xml version="1.0" encoding="utf-8"?>

      <web-app

      id="WebApp_ID"

      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">

    <display-name>

    XFireZhuweiTest</display-name>

    <welcome-file-list>

        <welcome-file>index.html</welcome-file>

        <welcome-file>index.htm</welcome-file>

        <welcome-file>index.jsp</welcome-file>

        <welcome-file>default.html</welcome-file>

        <welcome-file>default.htm</welcome-file>

        <welcome-file>default.jsp</welcome-file>

    </welcome-file-list>

    <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>

     </web-app>

     web.xml中添加的servlet映射表明,所有匹配“/services/*”的url请求全部交给 org.codehaus.xfire.transport.http.XFireConfigurableServlet来处理。

     (5)编写需要发布为WebService的Java类,这个例子中是一个非常简单的MathService.java。

      package com.zhuweisky.xfireDemo;

      public class MathService

   {

    public int Add(int a ,int b)

    {

        return a+b ;

    }

}

      (6)在WebContent\META-INF目录下新建xfire文件夹,然后在xfire目录下添加一个XFire使用的配置文件services.xml,该配置文件中的内容反映了要将哪些java类发布为web服务。本例中的services.xml内容如下:

      <?xml version="1.0" encoding="utf-8"?>

      <beans xmlns="http://xfire.codehaus.org/config/1.0">

        <service>

            <name>MathService</name>

               <namespace>http://com.zhuweisky.xfireDemo/MathService</namespace>

               <serviceClass>com.zhuweisky.xfireDemo.MathService</serviceClass>

           </service>

       </beans>

      XFire会借助Spring来解析services.xml,从中提取需要发布为WebService的配置信息。

      很多文章介绍到这里就完了,然而当我按照他们所说的启动WebService ,然后通过http://localhost:8080/XFireZhuweiTest/services/MathService?wsdl  来访问服务描述时,却抛出了异常,说services.xml文件不存在--

“org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [META-INF/xfire/services.xml]; nested exception is java.io.FileNotFoundException: class path resource [META-INF/xfire/services.xml] cannot be opened because it does not exist”。   

     (7)非常关键的一点:

在WebContent\WEB-INF目录下新建classes文件夹,然后需要将WebContent下的整个META-INF文件夹剪切到新建的classes文件夹下。

.jpg

     (8)在处理完这个问题后,从新部署并运Tomcat,但接着问题又来了错误内容如下:Unrecognized xbean element mapping: services in namespace                          

     http://xfire.codeh.

 经过分析得出XFire1.26需要xalan.jar包的支持.但它自身的Lib下无此jar。需要我们在apache官方下载。然后将此包放入工程的lib下:

     (9)再次从新编译运行java.lang.NoClassDefFoundError: org/apache/xml/serializer/TreeWalker错误这次通过Apache官方找到了出错误的原因:

原本这个类是包含在xalan.jar中的,但是xalan-j2.7.0版的发布包中,将serializer包中的类单独打包成serializer.jar,不再包含在xalan.jar中,所以才会即使添加了 xalan.jar也无法找到该类,添加后即可解决问题。