开发环境:myeclipse 6.0
xfire1.2是myeclipse6自带的ws组件,但是xfire自身集成了spring1.2,项目中需要使用spring2.x的时候就会与之产生冲突。
这里介绍一个完成的XFire+Spring2的实例。
开发环境: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文件
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.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
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.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
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.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
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.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
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.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,看看是不是打印出了你想要的