`

使用 xfire 开发 web service 应用

阅读更多

转载:oksonic博客 

制作工具:Eclipse3.2   MyEclipse5.0m2   Tomcat5.5.x  

一、一个简单的 web service      新建一个 web service 工程,名称为 xfire      新建一个 java 文件,名称为 Hello.java,内容如下: -------------------------------------------------------------------------------------

package com.test; 

public class Hello { 

    public String getName(String name){ 

       return "Hello world " + name; 

    } 

} 

-------------------------------------------------------------------------------------     修改Web Services目录下的 services.xml 文件,内容如下:

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

    < service > 

       < name > Hello </ name > 

       < namespace > http://www.oksonic.cn/xfire </ namespace > 

       < serviceClass > com.test.Hello </ serviceClass > 

    </ service > 

</ beans > 

< name > Hello </ name >   服务名称 
  < serviceClass > com.test.Hello </ serviceClass >   服务类 

  

  现在可以部署项目,使用以下链接访问:   http://localhost/xfire/services/Hello?wsdl  

注:我的端口已经修改为80,如果没有修改过的话请使用   http://localhost:8080/xfire/services/Hello?wsdl    

网上原有的教程中提到可以使用 http://localhost/xfire/services/ 访问,但测试时出现无法连接     页面中出现 xml 文件内容表示服务正常    

二、使用 jsr181 风格  

--------------------- 介绍 摘抄自 XFire 实战  ------------------------  

JSR 181通过标准化一个易于学习且可以快速开发的Web服务简单编程模型,从而刺激了对Web服务的采用。一直以来,J2EE开发人员要开发和部署Web服务就必须掌握相当多的信息。通过使用J2SE 5.0中的新增注释功能,Java软件源代码可以使用JSR 181注释进行注释,从而声明式地定义所需的Web服务行为。这使开发人员可以将注意力集中在Web服务的应用逻辑上而无需担心复杂的API、协议和部署描述符。   BEA官方网站有一篇 web服务元数据简介 ,对理解JSR 181规范很有帮助。   这一节的例子和上一节的例子很相似,或者通过使用java注释,比上一节的POJO稍微复杂了一点。不是说JSR 181节省了很多的配置信息吗?鄙人认为可以从这个方面来理解,正常情况下,POJO如果配置到其他webservices框架下,比如axis2、Celtix、weblogic等容器中,必然需要编写适合这些容器的配置文件,以便这些容器能够识别这个POJO类是wenservices,并根据配置文件中的比如命名空间、参数类型、web服务的方法等信息提供web服务。而通过jsr 181规范中的定义可以自动识别这些信息,这样这些信息不必在每个容器中所配置,这些容器通过java注释就可以得到这些信息,所以说jsr181在这方面进行了简化。XFire通过services.xml文件得到哪个类被定义为web服务, XFire可以通过java注释来获取web服务的相关信息。

-------------------------------------------------------------------------------------     修改 Hello.java 文件,内容如下:

-------------------------------------------------------------------------------------

package com.test;   
import javax.jws.WebMethod; 
import javax.jws.WebParam; i
mport javax.jws.WebResult; 
import javax.jws.WebService;   
@WebService (name= "Hello" ,serviceName= "Hello" ,        targetNamespace= "http://www.oksonic.cn/xfire" ) 
public class Hello {       
@WebMethod     
@WebResult     
public String getName( @WebParam String name){        return "Hello world " + name;     
} 
}

 

-------------------------------------------------------------------------------------     修改 services.xml 文件,内容如下:

-------------------------------------------------------------------------------------

< beans xmlns = "http://xfire.codehaus.org/config/1.0" >     
< service >        
< serviceClass > com.test.Hello </ serviceClass >        
< serviceFactory > jsr181 </ serviceFactory >     
</ service > 
</ beans > 

 

-------------------------------------------------------------------------------------     启动服务,现次测试,没什么变化,服务正常  

三、对 xfire 进行单元测试  

--------------------- 介绍 摘抄自 XFire 实战  ------------------------  

你不必发布到 tomcat 等容器中就可以进行测试,常用的测试类常继承 AbstractXFireTest 抽像类。 AbstractXFireSpringTest 类又实现了 AbstractXFireTest 类,AbstractXFireTest 类是 TestCase 的子类,所以你可以使用 junit 进行单元测试。

 ------------------------------------------------------------------------------    

 新建一个 JUnit case ,这是为了让 IDE 自动增加 JUnit 相关的类库     新建一个 java 文件,名称为 HelloTest.java,此类继承 AbstractXFireSpringTest 实现一个 createContest 方法,内容如下:

 ------------------------------------------------------------------------------

package test.com.test; 

import org.apache.xbean.spring.context.ClassPathXmlApplicationContext; 
import org.codehaus.xfire.spring.AbstractXFireSpringTest; 

import org.jdom.Document; 

import org.springframework.context.ApplicationContext; 

public class HelloTest extends AbstractXFireSpringTest { 

    @Override 

    protected ApplicationContext createContext() { 

       return new ClassPathXmlApplicationContext( new String[] { 

              "/org/codehaus/xfire/spring/xfire.xml" , 

              "/META-INF/xfire/services.xml" }); 

  

    } 

    public void testService() throws Exception { 

        Document wsdl = getWSDLDocument( "Hello" ); 

        printNode(wsdl); 

    } 

} 

 

------------------------------------------------------------------------------  

为了让 createContext 方法可以找到 services.xml 文件,需要把 Web Services 目录下的 services.xml 拷贝到 src/ META-INF/xfire 目录下    

不用启动 tomcat 直接在 HelloTest.java 文件上点击鼠标右键 Run as --> Junit ... 进行测试,

结果显示绿色条,通过测试!  

关于其它的测试方法请查看《XFire实战.pdf》  

四、和 Spring 集成     新建一个 service 层接口 IHelloService,内容如下:

 ------------------------------------------------------------------------------ package com.test.services;  

 public interface IHelloService {      

public String getName(String name);    

}

 ------------------------------------------------------------------------------    

创建接口的实现 HelloService,内容如下:

------------------------------------------------------------------------------

package com.test.services.impl;   

import com.test.services.IHelloService;   

public class HelloService implements IHelloService {       

        public String getName(String name) {        

                     return "Hello World " + name;     

        }   

}

 

 ------------------------------------------------------------------------------    

 添加 spirng 框架,设置将 applicationContext.xml 文件创建到 WEB-INF 目录下    

修改 applicationContext.xml 文件,内容如下:

 ------------------------------------------------------------------------------

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

<! DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd" >   

< beans >     

< bean id = " helloBean " class = "com.test.services.impl.HelloService" /> 

</ beans >

 ------------------------------------------------------------------------------    

 在 WEB-INF 目录下新建 xfire -servlet.xml 文件,文件内容如下:

------------------------------------------------------------------------------

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

<! DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd" > 

< beans >     

< bean  class = "org.springframework.web.servlet.handler.SimpleUrlHandlerMapping" >      

< property name = "urlMap" >

            < map > 

              <!-- 配置 service 名称和 Service Bean -->

               < entry key = "/Hello" > 

                  < ref bean = " hello " /> 

              </ entry >            

            </ map >

</ property >

</ bean >

     < bean id = " hello "        class = "org.codehaus.xfire.spring.remoting.XFireExporter" >        < property name = "serviceFactory" > 

           < ref bean = "xfire.serviceFactory" />

        </ property >

        < property name = "xfire" >

            < ref bean = "xfire" /> 

       </ property >

        < property name = "serviceBean" > 

           < ref bean = " helloBean " />

        </ property >

        < property name = "serviceClass" >

            < value > com.test.services.IHelloService </ value >

        </ property >

     </ bean >

 </ beans >

  

------------------------------------------------------------------------------

   注意:红色字体部份必需一r致,深红色字体部份要和 spring 的配置文件部份一致     修改 web.xml 文件,增加 spring 配置部份,修改 xfire 的名称

 ------------------------------------------------------------------------------

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

< web-app xmlns = "http://java.sun.com/xml/ns/j2ee" 

    xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" version = "2.4" 

    xsi:schemaLocation = "http://java.sun.com/xml/ns/j2ee   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" > 

    < context-param > 

       < param-name > contextConfigLocation </ param-name > 

       < param-value > 

           /WEB-INF/applicationContext.xml 

           classpath:org/codehaus/xfire/spring/xfire.xml 

       </ param-value > 

    </ context-param > 

    < listener > 

       < listener-class > 

           org.springframework.web.context.ContextLoaderListener 

       </ listener-class > 

    </ listener > 

    < servlet > 

       < servlet-name > xfire </ servlet-name > 

       < servlet-class > 

           org.springframework.web.servlet.DispatcherServlet 

       </ servlet-class > 

       < load-on-startup > 0 </ load-on-startup > 

    </ servlet > 

    < servlet-mapping > 

       < servlet-name > xfire </ servlet-name > 

       < url-pattern > /services/* </ url-pattern > 

    </ servlet-mapping > 

</ web-app > 
  重启服务,进行测试!!!  

  一切正常,现在用一个web service测试工具进行一下测试

分享到:
评论
2 楼 yonghuuser 2011-12-12  
< namespace > http://www.oksonic.cn/xfire </ namespace >
如果想给命名空间起个别名呢
1 楼 antonie1111 2008-08-18  
写的什么东西啊,中间还有html标签什么的.还不如不写.乱

相关推荐

    第十五章 开发XFire Web Service应用22.pdf

    第十五章 开发XFire Web Service应用22.pdf第十五章 开发XFire Web Service应用22.pdf第十五章 开发XFire Web Service应用22.pdf第十五章 开发XFire Web Service应用22.pdf第十五章 开发XFire Web Service应用22.pdf...

    第十五章 开发XFire Web Service应用.pdf

    第十五章 开发XFire Web Service应用.pdf第十五章 开发XFire Web Service应用.pdf第十五章 开发XFire Web Service应用.pdf第十五章 开发XFire Web Service应用.pdf

    第15章 开发XFire Web Service应用.pdf

    MyEclipse 6 Java 开发中文教程第15章 开发XFire Web Service应用.pdf

    Web Service框架xfire与spring集成开发流程

    XFire 是与Axis 2并列的新一代Web Service框架,通过提供简单的API支持Web Service各项标准协议,帮助你方便快速地开发Web Service应用。 相对于Axis来说,目前XFire相对受欢迎,加上其提供了和Spring集成的支持,在...

    第十五章.开发XFire.Web.Service应用.rar

    刘长炯的MyEclipse 6 Java 开发中文教程第十五章

    MyEclipse6 Java开发中文教程_全部18章

    第八章 开发Web 应用 第九章 开发Struts 1.x 应用 第十章 开发Spring 应用 第十一章 开发Spring+Struts+Hibernate应用 第十二章 开发Struts 2 + Spring 应用 第十三章 开发JPA 应用 第十四章 开发JSF 应用 第十四章 ...

    MyEclipse_6开发中文教程

    第一章 安装配置开发环境 15 第二章 开发第一个Java应用程序 39 第三章 Eclipse 的基础概念,配置和使用 44...第十四章 开发XFire Web Service应用 255 第十五章 开发EJB 应用 258 第十六章 MyEclipse UML 建模 260

    MyEclipse.6.Java.开发中文教程

    第一章 安装配置开发环境 第二章 开发第一个Java应用程序 ...开发XFire.Web.Service应用 第十六章.开发.EJB.应用 第十七章.MyEclipse.UML.建模 第十八章.图形界面开发--AWT,Swing,SWT 全部代码.rar

    XFire_WebService开发例子

    Web Service所使用的是Internet上统一、开放的标准,如HTTP、XML、SOAP(简单对象访问协议 simple object access protocal)、WSDL等,所以Web Service可以在任何支持这些标准的环境(Windows,Linux)中使用。...

    Web_Service开发指南电子版 PDF

    WebSevice 让一个程序可以透明地调用互联网程序,不用管具体的实现细节。只要WebService公开了服务接口,远程客户端就可以调用服务。...在Java领域 WebService常见的框架 Axis、XFire、CXF......。其中成熟实现的是AXIS。

    MyEclipse6 Java开发中文教程(全)

    一个很不错的java开发中文教程,包括了开发的基础知识、图形界面开发--AWT,Swing,SWT、开发Struts 2+Spring应用、开发 EJB 应用、MyEclipse UML 建模、开发JPA应用、开发JSF应用、开发XFire Web Service应用、...

    myeclipse6.0中文教程

    本书的第一章介绍常见的 Java 软件以及数据库和 MyEclipse 开发工具的...第十四章则介绍 SOA 的基石:基于 Xfire 的 Web Service 的快速开发过程;第十五章讨论了 EJB 3 的开发;第十六章则探讨了如用进行 UML 建模。

    MyEclipse 6 Java开发教程14-18

    第十三章 开发JPA应用 第十四章 开发JSF应用 第十五章 开发XFire Web Service应用 第十六章 开发 EJB 应用 第十七章 MyEclipse UML 建模 第十八章 图形界面开发--AWT,Swing,SWT

    基于JavaEE平台实战

    为了支持最新的基于XML的 Web Service的标准,针对XML应用的Java API使得以最小手工转换数据代价实现的 Web Service的构造变得简便易行,本部分通过详细解析xFire组件的原理与使用从而简化Java WebService的实现过程...

    MyEclipse 6 Java 开发中文教程.rar

    MyEclipse 6 Java 开发中文教程.pdf 第十八章 图形界面开发--AWT,Swing,SWT.pdf 第十二章 ...开发JSF应用.pdf 第十五章 开发XFire Web Service应用.pdf 第十一章 开发Spring+Struts+Hibernate应用.pdf +全部源码

    myeclipse java开发中文教程

    MyEclipse 6 Java 开发中文教程(1-10章).pdf 第十一章 开发Spring+Struts+Hibernate应用.pdf 第十二章 开发Struts 2+Spring应用.pdf 第十三章 开发JPA应用.pdf ...第十五章 开发XFire Web Service应用.pdf ...

    MyEclipse 6 Java开发教程[优化整合版]后续版本.zip

    包含如下(文档+代码) 第十八章 图形界面开发--AWT,Swing,SWT 第十二章 开发Struts 2+Spring应用 第十六章 开发 EJB 应用 ...第十五章 开发XFire Web Service应用 第十一章 开发Spring+Struts+Hibernate应用

    MyEclipse.6.Java.开发中文教程(1-10章).pdf 有详细的目录(书签)

    第十四章则介绍 SOA 的基石:基于 Xfire 的 Web Service 的快速 开发过程;第十五章讨论了 EJB 3 的开发;第十六章则探讨了如用进行 UML 建模。 为了确保读者能够在实际工作中能够灵活运用 Myclipse,作者在使用...

    Java6开发WebService入门

    之前常常用CXF、Axis2、XFire等来开发结合Java语言来开发Web Service应用,这样的好处是用途广,灵活,另外一个重要原因是我们的生产环境是Java5。 但实际上Java6中已经支持用Java开发WebService应用了,而且很方便...

    axis1.4调试全过程

    对方的webservice服务端使用axis1.4开发,参数有String[]类型,试了cxf、xfire等都无法生成客户端,只能使用axis4. 解压后lib包已经全了。修改xx.bat里webservice地址一项,执行xx.bat生成客户端文件。 生成之后,...

Global site tag (gtag.js) - Google Analytics