(原创)XFire+Spring2的DEMO

开发环境:myeclipse 6.0

xfire1.2是myeclipse6自带的ws组件,但是xfire自身集成了spring1.2,项目中需要使用spring2.x的时候就会与之产生冲突。
这里介绍一个完成的XFire+Spring2的实例。

首先我们可以先建立一个webservice的服务端,按如下步骤:
[1].
首先我们需要把xfire自带的spring1.2.6.jar给删除,这里可以从myeclipse的plugins中去找,我的目录如下:
D:\eclipse\myeclipse\eclipse\plugins\com.genuitec.eclipse.ws.xfire_6.0.1.zmyeclipse601200710\data\1.2\lib

[2].
准备好2个jar:Spring2.x的jar、commons-httpclient.jar

[3].
在myeclipse中new一个web service的工程,然后将[2]中的的2个jar复制到WebRoot\WEB-INF\lib中

[4].
在src下新建包webservice
新建接口:HelloWorld.java
package  webservice;

public   interface  HelloWorld {
    
    
public  String sayHelloWorld(String name);
}
实现类:HelloWorldImpl.java
package  webservice;

public   class  HelloWorldImpl  implements  HelloWorld {

    @Override
    
public  String sayHelloWorld(String name) {
        
return   " Hello,  "   +  name;
    }

}

[5].
修改web.xml文件
ContractedBlock.gif ExpandedBlockStart.gif Code
<?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>classpath*:/WEB-INF/applicationContext.xml,/WEB-INF/xfire-servlet.xml</param-value>
    
</context-param>
    
<listener>
        
<listener-class>
            org.springframework.web.context.ContextLoaderListener
        
</listener-class>
    
</listener>
    
<listener>
        
<listener-class>
            org.springframework.web.util.IntrospectorCleanupListener
        
</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>
    
</servlet-mapping>

<servlet>
    
<servlet-name>XFireServlet</servlet-name>
    
<servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class>
    
<load-on-startup>0</load-on-startup>
</servlet>

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


[6].
在WEB-INF下新建applicationContext.xml
ContractedBlock.gif ExpandedBlockStart.gif Code
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation
="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    
<bean id="HelloWorldBean" class="webservice.HelloWorldImpl"/> 
</beans>
在WEB-INF下新建xfire-servlet.xml
ContractedBlock.gif ExpandedBlockStart.gif Code
<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation
="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    
<bean id="HelloWorldBean" class="webservice.HelloWorldImpl"/> 

    
<!-- 引入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="/HelloWorldService.ws"> 
                    
<ref bean="HelloWorldService" /> 
                
</entry> 
            
</map> 
        
</property> 
    
</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>
    
    
<bean id="HelloWorldService" parent="baseWebService"> 
        
<!-- 业务服务bean --> 
        
<property name="serviceBean" ref="HelloWorldBean" /> 
        
<!-- 业务服务bean的窄接口类 --> 
        
<property name="serviceClass" value="webservice.HelloWorld" /> 
    
</bean> 
</beans>

[7].
修改WebSerVices/server.xml
ContractedBlock.gif ExpandedBlockStart.gif Code
<?xml version="1.0" encoding="GB18030"?>
<beans>

<service xmlns="http://xfire.codehaus.org/config/1.0">
    
<name>HelloService</name>
    
<namespace>http://localhost:8080/HelloService</namespace>
    
<serviceClass>webservice.HelloWorld</serviceClass>
    
<implementationClass>
        webservice.HelloWorldImpl
    
</implementationClass>
</service>


</beans>

[8].
OK,到此,一个WebService的服务端就搞定了,部署到tomcat下,然后访问
http://localhost:8080/webservice_helloworld/HelloWorldService.ws?wsdl
是不是看到了此wsdl的信息,如果看到了就说明此WS已经发布成功了

下面写个简单的client端来测试一下
[1].同样新建一个web service工程(其实随便建个project都行),
http://localhost:8080/webservice_helloworld/HelloWorldService.ws?wsdl保存下来成为一个wsdl文件HelloWorldService.wsdl放到src下
然后新建一个class WebServiceClientTest
ContractedBlock.gif ExpandedBlockStart.gif Code
package test; 

import org.codehaus.xfire.client.Client;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;

/***
 * author:arix04
 * createdate:2009-08-04
 
*/
public class WebServiceClientTest { 
    
    
public static void main(String[] args) throws Exception { 
        WebServiceClientTest test 
= new WebServiceClientTest(); 
        test.testClient(); 
    } 
    
    
public void testClient() throws Exception { 
        String wsdl 
= "HelloWorldService.wsdl"//对应的WSDL文件 
        Resource resource = new ClassPathResource(wsdl); 
        Client client 
= new Client(resource.getInputStream(), null); //根据WSDL创建客户实例 
        
        Object[] objArray 
= new Object[1]; 
        objArray[
0= "arix"
        
//调用特定的Web Service方法 
        Object[] results = client.invoke("sayHelloWorld", objArray); 
        System.out.println(
"result: " + results[0]); 
    } 



好了,运行你的ws服务,然后执行client,看看是不是打印出了你想要的

转载于:https://www.cnblogs.com/arix04/archive/2009/08/04/1538838.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值