一.环境
Jdk1.5,Eclipse3.2,MyEclipse5.5,Xfire1.2.6,Spring1.2
二.服务端
使用Xfire配合spring把一个pojo发布成web服务有很多种方法,这里采用的是配置最简单的JSR181注解。
1. 建立web工程,工程名为wsserver
2. 把spring的核心库(Spring1.2 Core Libraries)导入工程
3. 把xfire包导入工程,在Eclipse里右击工程,MyEclipse->Add Web Service Cabalities->在servlet class里选择org.codehaus.xfire.spring.XfireSpringServlet->在servlet mapping里把名字改为/webservices/*(避免和OpenSessionInViewFilter冲突)->finish,在正确配置这两步后,在web.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">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/applicationContext.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>
<!-- begin XFire 配置 -->
<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>
<!-- 在这个URI下开放Web Service服务 -->
<url-pattern>/webservices/*</url-pattern>
</servlet-mapping>
<!-- end XFire 配置 -->
</web-app>
4. 编写接口类IHelloWS,并在类上做@WebService标注
package test;
import java.util.List;
import javax.jws.WebService;
@WebService
public interface IHelloWS {
public void sayHello();
public String whatSay();
public void sayHello(Foo foo);
public List<Foo> says(List<Boo> list);
}
以上需要注意的是web服务中的方法的输入/出参数中若有使用到集合对象,则要使用泛型。否则需要做aegis配置。
5. 编写IHelloWS的实现类HelloWSImpl,并在类上做@WebService(serviceName="helloUT",endpointInterface="test.IHelloWS")标注,其中serviceName是这这个服务的名称,默认为接口实现类的名称,endpointInterface是该类实现的接口的类全名。
package test;
import java.util.ArrayList;
import java.util.List;
import javax.jws.WebService;
@WebService(serviceName="helloUT",endpointInterface="test.IHelloWS")
public class HelloWSImpl implements IHelloWS {
public void sayHello() {
System.out.println("hello ws!");
}
public String whatSay() {
return "hello ws!";
}
public void sayHello(Foo foo) {
System.out.println("hello "+ foo.getName());
}
public List<Foo> says(List<Boo> list) {
List<Foo> lists = new ArrayList<Foo>();
for (int i = 0;i<list.size();i++) {
Foo foo = new Foo();
foo.setName(list.get(i).getFirstName()+list.get(i).getLastName());
lists.add(foo);
}
return lists;
}
}
6. 以上接口和实现类用到的两个类Foo和Boo如下
package test;
public class Foo {
public String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package test;
public class Boo {
public String firstName;
public String lastName;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}
7. 在ApplicationContext中做如下配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!-- 要发布成web服务的pojo -->
<bean id="serviceBean" class="test.HelloWSImpl"/>
<!-- 引入XFire预配置信息 -->
<import resource="classpath:org/codehaus/xfire/spring/xfire.xml" />
<!-- 获得applicationContext中所有bean的JSR181 annotation -->
<bean id="webAnnotations"
class="org.codehaus.xfire.annotations.jsr181.Jsr181WebAnnotations" />
<bean id="jsr181HandlerMapping"
class="org.codehaus.xfire.spring.remoting.Jsr181HandlerMapping">
<property name="xfire" ref="xfire" />
<property name="webAnnotations" ref="webAnnotations" />
</bean>
</beans>
8. 启动服务,在浏览器地址栏中输入http://localhost:8090/wsserver/webservice/helloUT?wsdl,注意这里的helloUT是web服务的名字,它是配在接口实现类的@WebService的标注的serviceName成员中的,若没有配置值则默认为接口实现类的名称(这里还有点要注意:若不使用JSR181的方式发布web服务则默认的名字是接口的名称)。若能看到正确的wsdl文件则表明服务端已大功告成了。
三.客户端
客户端调用web服务也有很多方法,这里采用的是获取服务端接口类再配合wsdl地址来访问威web服务。并且把所有的web服务以bean的形式配置在spring容器中,在实际的应用中就可以使用注入的方式来获取web服务。
1. 建立web工程,工程名为wsclient
2. 拷贝服务端的接口类和参数类(IHelloWS,Foo,Boo)到客户端,这里需要注意的是它们的包结构必须和服务端保持一致!
3. 把spring的核心库(Spring1.2 Core Libraries)导入工程
4. 把xfire包导入工程,在Eclipse里右击工程,MyEclipse->Add Web Service Cabalities->finish
5. 把commons-httpclient.jar包导入工程
6. 在ApplicationContext中配置服务bean
<?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="helloService"
class="org.codehaus.xfire.spring.remoting.XFireClientFactoryBean">
<!-- web服务接口类 -->
<property name="serviceClass" value="test.IHelloWS" />
<!-- web服务wsdl地址 -->
<property name="wsdlDocumentUrl"
value="http://localhost:8090/wsserver/webservice/helloUT?wsdl" />
</bean>
</beans>
7. 写个测试类HelloWSTest
package test;
import java.util.ArrayList;
import java.util.List;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class HelloWSTest {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
IHelloWS service = (IHelloWS)ctx.getBean("helloService");
service.sayHello();
System.out.println(service.whatSay());
Foo foo = new Foo();
foo.setName("zhouQ");
service.sayHello(foo);
List<Boo> list = new ArrayList<Boo>();
Boo boo1 = new Boo();
boo1.setFirstName("zhou");
boo1.setLastName("Q");
list.add(boo1);
Boo boo2 = new Boo();
boo2.setFirstName("YY");
boo2.setLastName("ning");
list.add(boo2);
List<Foo> lists = service.says(list);
for (int i = 0;i<lists.size();i++) {
foo = lists.get(i);
System.out.println(foo.getName());
}
}
}
分享到:
相关推荐
【使用XFire+Spring构建Web Service】是一种高效且灵活的方法,尤其适合于那些希望利用Spring框架的优秀特性来开发Web Service应用的开发者。XFire是一个先进的Web Service框架,与Axis2并列为新一代的选择,因其...
总之,使用XFire和Spring构建Web服务允许你利用Spring的灵活性和XFire的效率来创建高性能的服务。这种方式使得服务的开发、管理和维护变得更加简单,尤其适合大型企业级应用。通过实践这个教程,你不仅可以学习到Web...
总结,使用XFire和Spring构建Web Service,可以利用Spring的IoC和AOP特性简化服务的创建和管理,同时XFire提供了高效且灵活的Web Service实现。通过以上步骤,开发者可以快速地搭建自己的Web Service,并与其他系统...
【使用 XFire 与 Spring 开发 Web Service】 Web Service是一种基于标准协议的接口,它允许不同应用程序之间进行互操作性,不受平台或编程语言限制。XFire是Apache CXF项目的一部分,是一个轻量级的、高性能的Java ...
在本文中,我们将深入探讨如何使用XFire和Spring框架构建Web服务,特别是在处理复杂数据类型如对象、数组和列表时。XFire是一个轻量级的Java Web服务框架,它简化了服务的创建和消费,而Spring框架则提供了依赖注入...
【整合XFire与Spring进行Web ...创建专门管理XFire的配置文件`spring.xfire.xml`,在这个文件中,定义Web Service的服务端点、绑定和行为。例如,注册`UserService`接口的实现,并配置到Web Service中: ```xml ...
通过Spring的依赖注入和配置管理,我们可以轻松地创建和管理Web服务客户端实例,而XFire则负责处理底层的SOAP通信和WSDL解析。这样的组合使得开发人员可以专注于业务逻辑,而不需要过多关注技术细节。
具体包含了创建服务接口和服务实现类(Echo 和 EchoImpl),并在Spring的应用上下文中配置XFire Exporter进行Web服务发布以及相应的XML配置细节介绍。最后演示了简单的Web服务客户端的测试流程。该文档旨在帮助软件...
在Web服务开发中,XFire允许开发者定义服务接口和服务实现,然后通过Spring配置将其暴露为SOAP Web服务。服务端可以通过处理来自客户端的SOAP请求,调用业务逻辑,这部分逻辑可能会涉及到与数据库的交互。这时,...
- 接着,我们需要配置XFire的servlet,这里使用的是`XFireSpringServlet`,这是专门为Spring设计的Servlet,能够与Spring容器协同工作,发布在Spring中的Web Service。 - 最后,配置servlet-mapping,将`.ws`后缀...
首先,我们需要创建一个Spring配置文件(如`applicationContext.xml`),在这个文件中定义Bean来配置我们的服务实现类和XFire相关的配置。例如,我们可以声明一个服务接口的实现类Bean,然后使用Spring的`...