1、使用org.codehaus.xfire.spring.XFireSpringServlet与ServiceBean
1.1 web.xml的配置
<web-app>
<display-name>Spring Image Database</display-name>
<description>Spring Image Database sample application</description>
<!--
These values are used by ContextLoaderListener, defined immediately below.
The files listed below are used to initialize the business logic portion of the application.
Each dispatcher servlet (defined further down) has their own configuration file,
which may or may not depend on items in these files.
-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:applicationContext-webservice.xml
</param-value>
</context-param>
<!-- Log4j configuration listener-->
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
<!-- Spring framework -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>XFireServlet</servlet-name>
<display-name>XFire Servlet</display-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>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
1.2 applicationContext-webservice.xml的配置:
<beans>
<import resource="classpath:org/codehaus/xfire/spring/xfire.xml"/>
<bean name="echoService" class="org.codehaus.xfire.spring.ServiceBean">
<property name="serviceBean" ref="echo"/>
<property name="serviceClass" value="org.codehaus.xfire.test.Echo"/>
<property name="inHandlers">
<list>
<ref bean="addressingHandler"/>
</list>
</property>
</bean>
<bean id="echo" class="org.codehaus.xfire.test.EchoImpl"/>
<bean id="addressingHandler" class="org.codehaus.xfire.addressing.AddressingInHandler"/>
<bean name="bookService" class="org.codehaus.xfire.spring.ServiceBean">
<property name="serviceBean" ref="bookServiceBean"/>
<property name="serviceClass" value="org.codehaus.xfire.demo.BookService"/>
</bean>
<bean id="bookServiceBean" class="org.codehaus.xfire.demo.BookServiceImpl"/>
</beans>
1.3 这样将会发布两个service,BookService和EchoService。随后就可以使用client端进行测试了。
//测试BookService
public static void main(String args[])
{
String serviceURL = "http://127.0.0.1:9001/xfire/services/BookService";
Service serviceModel = new ObjectServiceFactory().create(BookService.class,null,"http://xfire.codehaus.org/BookService",null);
XFireProxyFactory serviceFactory = new XFireProxyFactory();
try
{
BookService service = (BookService) serviceFactory.create(serviceModel, serviceURL);
Client client = Client.getInstance(service);
client.addOutHandler(new OutHeaderHandler());
Book[] books = service.getBooks();
System.out.println("BOOKS:");
for (int i = 0; i < books.length; i++)
{
System.out.println(books[i].getTitle());
}
}
catch (MalformedURLException e)
{
e.printStackTrace();
}
}
1.4 忘了BookService及其实现了。
public interface BookService
{
public Book[] getBooks();
public Book findBook(String isbn);
public Map getBooksMap();
}
public class BookServiceImpl implements BookService
{
private Book onlyBook;
public BookServiceImpl()
{
onlyBook = new Book();
onlyBook.setAuthor("Dan Diephouse");
onlyBook.setTitle("Using XFire");
onlyBook.setIsbn("0123456789");
}
public Book[] getBooks()
{
return new Book[] { onlyBook };
}
public Book findBook(String isbn)
{
if (isbn.equals(onlyBook.getIsbn()))
return onlyBook;
return null;
}
public Map getBooksMap() {
Map result = new HashMap();
result.put(onlyBook.getIsbn(), onlyBook);
return result;
}
}
1.5 简单的测试就是通过IE,输入http://ip:port/context/services/BookService?wsdl或者http://ip:port/context/services/EchoService?wsdl,将会出现相应的wsdl文档。
如果只是输入http://ip:port/context/services/BookService,会出现Invalid SOAP request.这也说明配置正确。
2、直接集成Spring(通过Spring的org.springframework.web.servlet.DispatcherServlet)
2.1 web.xml配置
<web-app>
<!-- START SNIPPET: xfire -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:org/codehaus/xfire/spring/xfire.xml</param-value>
</context-param>
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/log4j.properties</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
<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>/*</url-pattern>
</servlet-mapping>
<!-- END SNIPPET: xfire -->
</web-app>
2.2 xfire-servlet.xml配置
<beans>
<!-- START SNIPPET: xfire -->
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="urlMap">
<map>
<entry key="/EchoService">
<ref bean="echo"/>
</entry>
</map>
</property>
</bean>
<bean id="echoBean" class="org.codehaus.xfire.spring.example.EchoImpl"/>
<!-- Declare a parent bean with all properties common to both services -->
<bean id="echo" class="org.codehaus.xfire.spring.remoting.XFireExporter">
<property name="serviceFactory">
<ref bean="xfire.serviceFactory"/>
</property>
<property name="xfire">
<ref bean="xfire"/>
</property>
<property name="serviceBean">
<ref bean="echoBean"/>
</property>
<property name="serviceClass">
<value>org.codehaus.xfire.spring.example.Echo</value>
</property>
</bean>
<!-- END SNIPPET: xfire -->
</beans>
2.3 余下的配置跟第一种方法一样。
3、另外xfire的官方文档上还有一种方法,是通过XBean与Spring结合来实现webservice的expose。还是觉得上面的两种方法比较好。既然已经与spring集成在一起了,何必再引入其他的呢?以后的维护是不是也要有问题呢?
在随后的文章里将会介绍xfire与Jibx结合的例子。
分享到:
相关推荐
将XFire与Spring结合使用,可以实现以下几种发布Web服务的方式: 1. **基于Spring Bean的配置**:通过在Spring配置文件中定义Bean,可以将Web服务的实现类声明为一个Bean。Spring会自动检测该Bean上的JAX-WS注解...
XFire与Spring的整合主要涉及以下几个关键知识点: 1. **Spring的Bean管理**:Spring通过XML配置或注解方式管理对象(Bean),可以将Web服务实现类作为Spring Bean,这样就能够在Spring容器中初始化、管理和销毁Web...
描述中提到的博客链接虽然无法直接访问,但根据常规的博客内容,博主可能详细解释了如何将Spring与Xfire结合,以及如何通过注解的方式来替代传统的XML配置,以实现更加简洁、直观的代码结构。 在使用注解的方式时,...
针对上述问题,我们可以采取以下几种方案进行解决: 1. **手动删除冲突的JAR包** - **步骤**:在项目部署后,手动删除部署目录下`WEB-INF/lib`文件夹中的`spring-1.2.6.jar`。 - **缺点**:这种方法需要频繁的...
标题中的“xfire+spring+webservice+client”是一个关于集成XFire、Spring框架和Web服务客户端的专题,这涉及到Java开发中的一项重要技术——Web服务的消费与提供。在这个主题下,我们将深入探讨以下几个核心知识点...
配置XFire与Spring的集成通常涉及以下几个步骤: - 引入必要的依赖库,如Spring和XFire的相关jar包。 - 创建一个Spring配置文件,定义Web服务的bean,包括服务接口、实现类和XFire相关的配置。 - 在Spring配置...
4. **Spring与XFire结合**: - 如何将Spring容器中的Bean导出为Web Service,这涉及到Spring对Web Service的支持和配置,以及XFire如何整合Spring的IoC(Inversion of Control)容器。 - 编写客户端调用代码,包括...
在IT行业中,集成不同的...这个项目包含的"xfireSpring"文件很可能是包含了整合后的配置文件、源代码和运行示例,方便开发者参考和学习。在实际开发中,可以根据具体需求进行调整和优化,以适应不断变化的业务场景。
3. **灵活的配置**:Spring与XFire的集成允许开发者通过Spring的XML配置或注解方式来配置Web服务,提供了一种直观且灵活的方式来管理Web服务的生命周期。 4. **事务管理**:Spring的事务管理能力可以扩展到XFire...
XFire因其简单易用的API和对Web Service标准的广泛支持而受到欢迎,尤其是它与Spring框架的集成,使得在Spring环境中构建Web Service应用变得非常简便。XFire支持一系列Web Service的新标准,如JSR181(Web服务注解...
在使用XFire和Spring构建Web服务时,需要注意以下几点: - 确保所有必要的库都已正确导入,避免依赖冲突。 - 调试Web服务时,可以使用SOAP UI等工具模拟客户端请求,检查服务是否正常工作。 - 注意命名空间和WSDL...
在标题中提到的“webservice数据传输方式Xfire”,主要指的是利用Xfire来构建Web服务接口,实现数据的发送和接收。Xfire采用了Java编程语言,并且充分利用了Java的XML处理库,如JAXB(Java Architecture for XML ...
Spring框架是Java开发中不可或缺的一部分,它以其IoC(Inversion...在实际的学习过程中,建议先从主要的接口和类开始,逐步深入到具体的实现细节,结合实际项目中的使用情况,将理论与实践相结合,以获得更深刻的领悟。
Xfire提供了一种方式,可以将Spring的bean暴露为Web服务。通过定义一个服务接口和实现类,我们可以在实现类中注入需要的Spring bean。这样,Web服务调用的方法实际上是在调用Spring管理的bean,间接地访问到...
XFire适用于以下几种情况: 1. 快速构建SOAP Web服务:通过简洁的API,开发者可以迅速创建和发布SOAP服务。 2. 集成现有系统:由于JAX-RPC兼容性,XFire可以作为旧有JAX-RPC系统的升级选择。 3. 易于测试:XFire...
5. **集成Spring框架**:XFire与Spring的良好集成使得开发者可以利用Spring的依赖注入和配置管理能力,轻松地在应用中引入Web服务。 6. **异常处理**:在调用Web服务时,可能会遇到网络问题或服务端错误,XFire会将...
在Web服务开发中,XFire提供了一种轻量级且高效的方式来创建、部署和消费Web服务。它利用了Java annotations(注解)和其他现代Java特性,使得开发过程更为简洁。 描述中提到的“webservice中创建服务器需要引入...