1、准备开发环境
环境:MyEclipse xx +tomcat6.0+JDK1.5
xfire版本:xifre-1.2.6
XFire所需jar包:
在http://xfire.codehaus.org/下载xfire1.2.6-.zip压缩包,解压后lib下jar包
在MyEclipse下新建一个Web Applications,命名为wss
2、配置运行环境
WEB-INF目录下新建一个web.xml文件,文件中输入:
xml代码
<?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"> <display-name>XFireService</display-name> <!-- begin Spring配置 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/applicationContext.xml,/WEB-INF/xfire-servlet.xml </param-value> </context-param> <!-- 启动时加载SpringContextServlet --> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <listener> <listener-class> org.springframework.web.util.IntrospectorCleanupListener </listener-class> </listener> <!-- end Spring配置 --> <!-- begin XFire 配置 --> <servlet> <servlet-name>xfire</servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> </servlet> <servlet-mapping> <servlet-name>xfire</servlet-name> <url-pattern>*.ws</url-pattern> </servlet-mapping> <servlet> <!--配合Spring容器中XFire一起工作的Servlet--> <servlet-name>xfireServlet</servlet-name> <servlet-class> org.codehaus.xfire.spring.XFireSpringServlet </servlet-class> </servlet> <servlet-mapping> <servlet-name>xfireServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping> <!-- end XFire 配置 --> </web-app> |
3、开发应用程序
在src文件夹下新建一个package:com.test.wss,在这个包下面新建一个接口:
业务接口Java代码
package com.test.wss; public interface SayHelloService { //调用的业务方法 public String sayHello(String name); } |
这个接口是告诉服务器你的WebService哪些方法可以被用户调用的。我们再来写一个SayHelloService的实现类,以完成业务逻辑:
业务接口Java代码
package com.test.wss; public class SayHelloServiceImpl implements SayHelloService { //业务实现方法 public String sayHello(String name) { if(name==null){ return "你有名字呢?"; } return name+",晚上好,还没有下班吗 ?"; } } |
这个类实现了sayHello方法,该方法是可以通过WebService调用访问到的。 接下来发布WebService
4、配置部署服务
在ws/WEB-INF/目录下新建两个XML文件:applicationContext.xml和xfire-servlet.xml,文件内容如下:
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="SayHelloServiceImpl" class="com.test.wss.SayHelloServiceImpl"/> </beans> |
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><!-- 引入XFire预配置信息 --> <import resource="classpath:org/codehaus/xfire/spring/xfire.xml"/> <!--定义访问的url --> <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="urlMap"> <map> <!-- 配置暴露的服务名称 --> <entry key="/sh.ws"> <ref bean="SayHelloService"/> </entry> </map> </property> </bean>
<!-- 使用XFire导出器 我们通过XFireExporter将业务类导出为Web Service,对于任何导出器, 我们都需要引入XFire环境,即serviceFactory和xfire,这是标准的配置。ServiceFactory是 XFire的核心类,它可以将一个POJO生成为一个Web Service。在本实例中,我们通过定义一个 baseWebService,其余的webService配置都将该bean作为父bean,这样可以简化Spring的配置, 不需要多次引入serviceFactory和xfire。-->
<bean id="baseWebService" class="org.codehaus.xfire.spring.remoting.XFireExporter" lazy-init="false" abstract="true"> <!--引用xfire.xml中定义的工厂 --> <property name="serviceFactory" ref="xfire.serviceFactory"/> <!--引用xfire.xml中的xfire实例 --> <property name="xfire" ref="xfire"/> </bean> <bean id="SayHelloService" parent="baseWebService"> <!-- 业务服务bean --> <property name="serviceBean" ref="SayHelloServiceImpl"/> <!-- 业务服务bean的窄接口类 --> <property name="serviceClass" value="com.test.wss.SayHelloService"/> </bean> </beans> |
目录结构
把工程wss部署到tomcat下
5、运行测试应用
启动Tomcat
再打开浏览器,输入:http://localhost:8080/wss/sh.ws?wsdl,
服务器返回的结果如下:
说明web service发布成功。
方法1:同工程内调用web service
新建一个SayHelloClient的客户端:
package com.test.wss.client; import java.net.MalformedURLException; import org.codehaus.xfire.client.Client; import org.codehaus.xfire.client.XFireProxyFactory; import org.codehaus.xfire.service.Service; import org.codehaus.xfire.service.binding.ObjectServiceFactory; import org.codehaus.xfire.transport.http.CommonsHttpMessageSender; public class SayHelloClient { public static void main(String args[]) { String serviceURL = "http://localhost:8080/wss/sh.ws"; //创建service对象 Service serviceModel = new ObjectServiceFactory().create(SayHelloService.class); XFireProxyFactory serviceFactory = new XFireProxyFactory(); try{ //获取服务对象 SayHelloService service = (SayHelloService) serviceFactory.create(serviceModel, serviceURL); Client client = Client.getInstance(service); //忽略http连接的超时时间,0为不设置超时时间,》=1为超时毫秒数 client.setProperty(CommonsHttpMessageSender.HTTP_TIMEOUT, "0"); String msg = service.sayHello("大兵"); System.out.println("服务器对[大兵]的回复:" + msg); msg = service.sayHello(null); System.out.println("服务器对你的回复:" + msg); }catch (MalformedURLException e) { e.printStackTrace(); } } } |
运行输出结果为:
服务器对[大兵]的回复:大兵,晚上好,还没有下班吗 ?
服务器对你的回复:你有名字呢?
方法2:不在一个工程内调用的客户端的测试:
新建一个Java工程:wssclient,把工程wss内的com.test.wss.client包拷贝到wssclient功能,进行运行测试。
package com.test.wss.client; import org.codehaus.xfire.client.Client; import org.codehaus.xfire.client.XFireProxyFactory; import org.codehaus.xfire.service.Service; import org.codehaus.xfire.service.binding.ObjectServiceFactory; import org.codehaus.xfire.transport.http.CommonsHttpMessageSender; public class SayHelloNClient { public static void main(String args[]) { String serviceURL = "http://localhost:8080/wss/sh.ws"; //创建service对象 Service serviceModel = new ObjectServiceFactory().create(SayHelloService.class); XFireProxyFactory serviceFactory = new XFireProxyFactory(); try{ //获取服务对象 SayHelloService service = (SayHelloService) serviceFactory.create(serviceModel, serviceURL); Client client = Client.getInstance(service); //忽略http连接的超时时间,0为不设置超时时间,》=1为超时毫秒数 client.setProperty(CommonsHttpMessageSender.HTTP_TIMEOUT, "0"); Object[] results = client.invoke("sayHello",new Object[] { "若轩" }); System.out.println("服务器对[若轩]的回复:" + (String) results[0]); results = client.invoke("sayHello",new Object[] {null}); System.out.println("服务器对你的回复:" + (String) results[0]); }catch (Exception e) { e.printStackTrace(); } } } |
运行输出结果为:
服务器对[若轩]的回复:若轩,晚上好,还没有下班吗 ?
服务器对你的回复:你有名字呢?
<!--EndFragment-->
相关推荐
"xfire+spring+安全认证"的主题聚焦于如何利用XFire和Spring框架来实现安全的Web服务。XFire是一个用于创建、消费和部署SOAP Web服务的Java库,而Spring框架则是一个广泛使用的全功能应用开发框架,提供了包括安全性...
在提供的文档《xfire+spring2_5开发webservice接口的两种方式.mht》中,详细讲解了这两种方法的实现步骤、示例代码和注意事项。读者可以通过阅读该文档,了解如何在Spring 2.5版本下结合XFire创建Web服务。 另一份...
在与XFire+Spring Web Service的项目中,MooTools可能被用来在客户端消费Web服务,实现页面的动态更新和用户交互。 总的来说,XFire+Spring的组合为Java开发者提供了一个强大且灵活的Web服务解决方案,结合MooTools...
标题中的“xfire+spring+webservice+client”是一个关于集成XFire、Spring框架和Web服务客户端的专题,这涉及到Java开发中的一项重要技术——Web服务的消费与提供。在这个主题下,我们将深入探讨以下几个核心知识点...
至此,一个简单的XFire+Spring Web Service就已经构建完成。客户端可以通过调用WSDL中定义的端点地址来访问这个服务,进行“Hello, World!”的交互。 总结,使用XFire和Spring构建Web Service,可以利用Spring的IoC...
XFire是一个高性能、易于使用的Java Web服务框架,而Spring则是广泛采用的轻量级应用框架,它提供了丰富的功能来支持各种应用程序的开发,包括Web服务。本教程将详细介绍如何结合XFire和Spring来构建Web服务,并提供...
【XFire+Spring Web Service】是一个结合了XFire和Spring框架的解决方案,用于构建高效、易用的Web服务。XFire作为一个现代化的Web服务框架,它与Axis2齐名,但因其简洁的API和对Web服务标准的支持,如JSR181、WSDL...
本案例中的"xfire+spring+hibernate"是一种早期的整合方式,它将Web服务(通过XFire实现)、Spring框架的依赖注入与管理以及Hibernate的持久层处理结合在一起。以下是对这种整合方式的详细解释。 1. **XFire**:...
总结来说,这个例子不仅展示了如何使用XFire+Spring构建Web服务,还涵盖了处理复杂数据类型、对象序列化、服务发布、异常处理等多个关键点。通过这样的实践,开发者可以更好地理解Web服务的实现原理,并能够灵活地...
描述中提到的“本来想把xfire+spring例子也一起传上来,太大不让传”,意味着这个压缩包可能包含了示例代码或者项目实例,用于展示如何在实际应用中整合XFire和Spring。由于文件大小限制未能一同上传,我们只能从...
在"XFire+Spring发布Web Service(一)"这个主题中,我们主要关注的是如何设置客户端来消费发布的Web服务。客户端代码是与服务端进行交互的部分,通常包括调用服务接口、处理响应等操作。 首先,你需要在你的项目中...
本项目“Xfire+Spring+Hibernate WebService”是一个采用特定技术栈构建的Web服务解决方案。下面将详细阐述这个项目中涉及的核心技术和它们之间的交互。 【Xfire】: Xfire是一款开源的Java库,它提供了创建和消费...