`
小笨熊
  • 浏览: 62159 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

WebService的学习成长过程(二)

阅读更多
前面我们已经成功的做了一个WebService,我们仔细想想其实如果再做连接数据库的和返回复杂类型的已经没有什么意义了!我们已经用假数据和配置文件绑定做过了,更多的时候,我们可能需要结合Spring来应用!OK,这就是我们这次研究的重点了!

真的没有想到,用xfire来做WebService和Spring的结合会这么的简单!
我们可以向以前一样引入Spring!之前的例子只需要一点点修改就可以了!

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

	<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>
	</servlet>
	
	<servlet-mapping>
	    <servlet-name>xfire</servlet-name>
	    <url-pattern>*.ws</url-pattern><!-- 
	    <url-pattern>/*</url-pattern> -->
	</servlet-mapping>
    
    <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>


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>
	<import resource="classpath:org/codehaus/xfire/spring/xfire.xml" />
	<bean id="userDao" class="com.zhuweisky.xfireDemo.UserDaoImpl"/>
	
	<bean id="userServiceTarget" class="com.zhuweisky.xfireDemo.UserServiceImpl">
		<property name="userDao" ref="userDao"/>
	</bean>
	
	<!-- 使用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>
	
	<!-- Declare a parent bean with all properties common to both services -->
	<bean id="userService" parent="baseWebService">
	    <property name="serviceBean">
	        <ref bean="userServiceTarget"/>
	    </property>
	    <property name="serviceClass">
	        <value>com.zhuweisky.xfireDemo.UserService</value>
	    </property>
	</bean>
</beans>


好了,只需要这一点点工作就OK了,现在我们可以用http://localhost:8080/你的工程名/services/UserService?wsdl 来访问了。
看到xml,就表示成功了!

把我们的测试类修改下使用:
          
public static void main(String[] args)
	{
    	ApplicationContext ctx = new FileSystemXmlApplicationContext("WebRoot/WEB-INF/applicationContext.xml");
    	
		try{
			XFireExporter xfe = (XFireExporter) ctx.getBean("userService");
//			System.out.println(o.toString());
			UserService srvc = (UserService) xfe.getServiceBean();
			System.out.println(srvc.getUser("tom").getAge());
			List users=srvc.getUsers();
			for (Iterator iter = users.iterator(); iter.hasNext();) {
				User user = (User) iter.next();
				System.out.println(user.getName());
			}
		}catch (Exception e){
			e.printStackTrace();
		}
	}


这样就全部搞定!
分享到:
评论
2 楼 小笨熊 2008-06-19  
引用
如果你的测试跟服务不是在同一贯饿应用下,你还可以在测试里
拿UserService吗?


UserService只是一个接口类而已,在其他应用程序下使用时,直接拷过来就好了!
1 楼 xuewei 2008-06-19  
你好,在你这两个里子中,你是否考虑到你的客户端测试的和你的服务端是在同一个应用下的问题呢?

如果你的测试跟服务不是在同一贯饿应用下,你还可以在测试里
拿UserService吗?

可以加你MSN吗?
我的MSN:xuewei2007@msn.com
    QQ :280256825

相关推荐

Global site tag (gtag.js) - Google Analytics