`

XFire在spring中应用

阅读更多

xfirespring的应用:

 

 

xfirespring的应用:
一:目录结构介绍:
首先从官方网址
http://xfire.codehaus.org下载最新的1.2.6版本(截至2007-9-9)。从网站上下载xfire-distribution-1.2.6.zip文件,解压缩后得到如下的目录结构:

api:
主要是javadoc文档资料;
examples:xfire
自带的例子程序;
lib:xfire
所需的jar文件;
manual:xfire
模块
xfire-all-1.2.6.jar:
xfire提供的整体jar包。
二:在应用服务器下面配置XFire
本文在tomcat下面配置xfire的环境,所使用的环境是:

jdk:1.5
tomcat:5.5.9
1
、在tomcat下面按照如下的目录结构新建文件或者文件夹:
webapp
|--xfire
|--WEB-INF
   |--lib
   |--web.xml
   |--classes
   |--META-INF
      |--xfire
        |--services.xml
2
、将解压缩后XFire中的内容按照下面的要求放置
xfire-1.2.6lib下面的内容拷贝到jakarta-tomcat-5.5.9webappsxfireWEB-INFlib目录中
xfire-1.2.6xfire-all-1.2.6.jar拷贝到jakarta-tomcat-5.5.9webappsxfireWEB-INFlib目录中
3
web.xmlservices.xml文件内容设置
web.xml
文件内容放置如下内容:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- START SNIPPET: webxml -->
<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "
http://java.sun.com/dtd/web-app_2_3.dtd">
   
<web-app>
<servlet>
    <servlet-name>XFireServlet</servlet-name>
    <display-name>XFire Servlet</display-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>
<!-- END SNIPPET: webxml -->
services.xml
文件内容如下:
<!-- START SNIPPET: services -->
<beans xmlns="
http://xfire.codehaus.org/config/1.0">
  
</beans>
<!-- END SNIPPET: services -->
4
、配置好上面的内容后,启动tomcat应用服务器;打开IE浏览器;访问如下的网址:
http://localhost:8080/xfire/services/
如能正确的显示成功页面,说明我们的xfire配置成功了。下面就可基于xfire进行Web Service开发了。

xfirespring下的开发:

1 MyEclipse中新建Web工程,名为webservice_helloworld。选择该工程后,点击右键选择MyEclipse->Add Web Service Capabilities,弹出Add Web Service Capabilities对话框,点击“Next”,弹出Project Library Configuration对话框,默认选择Core Libraries,点击“Finish”按钮,完成XFire核心包的添加。为了后续的客户端的测试,还需读者加入commons-httpclient.jar包到WEB-INF/lib下。
部署后可看到此时WEB-INF/libjar包列表如下:
activation-1.1.jar
commons-beanutils-1.7.0.jarcommons-codec-1.3.jarcommons-httpclient.jarcommons-logging-1.0.4.jarjaxen-1.1-beta-9.jarjaxws-api-2.0.jarjdom-1.0.jarjsr173_api-1.0.jarmail-1.4.jarsaaj-api-1.3.jarsaaj-impl-1.3.jarspring-1.2.6.jarstax-api-1.0.1.jarwsdl4j-1.5.2.jarwstx-asl-3.0.1.jarxbean-2.1.0.jarxbean-spring-2.5.jar
xfire-aegis-1.2.2.jar
xfire-annotations-1.2.2.jarxfire-core-1.2.2.jarxfire-java5-1.2.2.jarxfire-jaxws-1.2.2.jarxfire-jsr181-api-1.0-M1.jarxfire-spring-1.2.2.jarXmlSchema-1.1.jar
别忘了,还要加入spring开发包,我加入了core\web\aop,对spring不是很熟悉所以有可能多加了。

2
Web Service实现的编写

1web.xml的配置
一般情况下,我们通过HTTP作为Web Service的传输协议,这样我们只需启动一个Web服务器(Tomcat,在本例中使用的是Tomcat5.5.20),这样客户端就可以通过HTTP访问到Web Service服务。为了集成Spring容器,XFire专门提供一个XFireSpringServlet,我们可以在web.xml中配置该Servlet,将Spring容器中定义的Web Service在某个URI下发布。
为了能正确使用XFire,需在web.xml中进行相应配置,在该文件中配置XFireservletservlet-mapping。同时因为本实例需要将XFire集成到Spring中,因而需要在web.xml文件中加载Spring的相应配置文件。在本实例中,我们首先在WEB-INF下建立两个配置Spring配置文件,一个为applicationContext.xml,该文件用来定义本工程的bean,一个为xfire-servlet.xml,用来配置XFire的相关bean。修改后的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
">
<display-name>XFireService</display-name><!-- begin Spring
配置 -->
<context-param>
   <param-name>contextConfigLocation</param-name>
   <param-value>
    /WEB-INF/applicationContext.xml,/WEB-INF/xfire-servlet.xml
   </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>
<listener>
   <listener-class>
    org.springframework.web.util.IntrospectorCleanupListener
   </listener-class>
</listener><!-- end Spring
配置 --><!-- begin XFire 配置 -->
<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><!--
配合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>/service/*</url-pattern>
</servlet-mapping><!-- end XFire
配置
-->
</web-app>
(2)
package com.webservice;

import javax.jws.WebParam;
import javax.jws.WebService;

public interface HelloWorld {
String sayHello(String name);
}
package com.webservice;
import javax.jws.WebService;
public class HelloWorldImp implements HelloWorld {

public String sayHello(String name) {
   return "hello "+name;
}

}
3
Spring配置文件applicationContext.xmlxfire-servlet.xml(spring默认的配置文件是这个)的配置
首先我们在applicationContext.xml文件中配置对应的bean——HelloWorldBean,该xml文件的内容如下:
<?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="HelloWorldBean" class="com.webservice.HelloWorldImp" />
</beans>
    XFire
Spring提供了方便易用的导出器XFireExporter,借助该导出器的支持,我们可以在Spring容器中将一个POJO导出为Web ServiceHelloWorld是业务服务类,在此拥有一个sayHelloWorld的方法,我们希望将此方法开放为Web Service。在实际应用中,如果某个类具有众多的方法,而其中的某些方法不需要开放为Web Service的情况下,我们可以定义一个窄接口,该接口中只需定义那些开放为Web Service的业务方法。
将一个业务类所有需要开放为Web Service的方法通过一个窄接口来描述是值得推荐的作法,这让Web Service的接口显得很干净。其次,XFire的导出器也需要服务接口的支持,因为它采用基于接口的动态代理技术。
窄接口中的方法在真实的系统中可能需要引用其它的业务类或DAO获取数据库中的真实数据,为了简化实例,我们在此简化了实例。
下面让我们看看在xfire-servlet.xml文件中导出器的设置,该文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "
http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!--
引入XFire预配置信息 -->
<import resource="classpath:org/codehaus/xfire/spring/xfire.xml" />
<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="com.webservice.HelloWorld" />
</bean>
</beans>
   
在上面的配置中,我们可以看到,在该配置文件中引入了xfire.xml这个Spring配置文件。它是在XFire核心JAR包中拥有一个预定义的Spring配置文件,它定义了XFireSpring中必须用到的一些Bean和资源,需要引入这个预定义的配置文件。从该配置文件中可以看出,我们通过XFireExporter将业务类导出为Web Service,对于任何导出器,我们都需要引入XFire环境,即serviceFactoryxfire,这是标准的配置。ServiceFactoryXFire的核心类,它可以将一个POJO生成为一个Web Service

在本实例中,我们通过定义一个baseWebService,其余的webService配置都将该bean作为父bean,这样可以简化Spring的配置,不需要多次引入serviceFactoryxfire

访问: http://ip:port/project_name/service/HelloWorldService.ws

 

 

使用JSR 181注解导出Web Service

如果有很多需要导出为Web Service的业务类,你必须分别为它们配置一个XFireExporter,这让我们回忆起了TransactionProxyFactoryBean(每一个需要事务功能的业务类需要分别配置)。在学习过@Transaction注解后,我们自然而然地希望使用类似注解技术完成Web Service导出的工作。

JSR 181就是为此目的而提出的,它是BEA领导的一个Web Service规范。XFire已经支持JSR 181 2.0,你既可以使用JDK 5.0的注解,也可以在JDK 5.0之前的版本中使用commons-attributes注解。

使用JSR 181的明显好处是,你仅需在业务类和窄接口标注JSR 181注解,不管你有多少需要导出为Web Service的业务类,仅须在Spring中配置一个XFire提供的JSR 181注解增强Bean就可以了。

注解增强处理器会对Spring容器中所有标注JSR 181注解的业务类进行处理,并分别将它们导出为Web Service。使用JSR 181时,必须将XFire的依赖类库xfire-jsr181-api-1.0-M1.jar添加到类路径中。

如果输入、输出的对象类型仅包括基本类型的属性,仅需要在业务类和窄接口中分别使用@WebService注解进行简单的配置就可以了,XFire将根据默认约定导出Web Service

窄接口仅需要定义一个@WebService注解,并指定SOAP的命名空间就可以了:
(1)
在上面的工程中继续添加:
package com.webservice.jsr181;

import javax.jws.WebService;
//
指定soap的命名空间
@WebService(targetNamespace = "
http://localhost:8007/test2")
public interface BbtForumService {
int getRefinedTopicCount(int lastDay);
}
package com.webservice.jsr181;

import javax.jws.WebService;

@WebService(serviceName = "BbtForumService",

endpointInterface = "com.webservice.jsr181.BbtForumService")

public class BbtFormServiceImp implements BbtForumService {
public int getRefinedTopicCount(int lastDay) {
   return 0;
}
}
(2)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
">
<display-name>XFireService</display-name><!-- begin Spring
配置 -->
<context-param>
   <param-name>contextConfigLocation</param-name>
   <param-value>
    /WEB-INF/applicationContext.xml,/WEB-INF/xfire-servlet.xml
   </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>
<listener>
   <listener-class>
    org.springframework.web.util.IntrospectorCleanupListener
   </listener-class>
</listener><!-- end Spring
配置 --><!-- begin XFire 配置 -->
<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><!--
配合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>/service/*</url-pattern>
</servlet-mapping><!-- end XFire
配置
-->
</web-app>
(3)applicationContext.xml
文件:这里将不再需要xfire-servlet.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获取Spring容器中所有标注@WebServiceBean -->
<bean id="webAnnotations"
   class="org.codehaus.xfire.annotations.jsr181.Jsr181WebAnnotations" />
<!-- ②
对标注@WebServiceBean进行处理,完成导出工作
-->
<bean id="jsr181HandlerMapping"
   class="org.codehaus.xfire.spring.remoting.Jsr181HandlerMapping">

   <property name="xfire" ref="xfire" />

   <property name="webAnnotations" ref="webAnnotations" />

</bean>
<bean id="bbtForum" class="com.webservice.jsr181.BbtFormServiceImp" />
</beans>

使用jrs是在实现类的@WebService(serviceName = "BbtForumService"指定访问路径
使用普通方式是在handler中指定访问路径:
<bean
   class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
   <property name="urlMap">
    <map>
     <entry key="/HelloWorldService.ws">
      <ref bean="HelloWorldService" />
     </entry>
    </map>
   </property>
</bean>

花了我整整一天的时间才搞明白。网上资料倒是挺多,但要真组合到一起,就费事了。而且还出了很多错。对了,今天发现tomcat的一个缺点:报错太烂了。就报一错误,详细信息没有。只有借助于log4j了。设置方式是:

在工程路径下建立一个文件:log4j.properties
   log4j.rootLogger=info,stdout

   log4j.appender.stdout=org.apache.log4j.ConsoleAppender
   log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
   log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss}\t %-5p \t%m%n
web.xml文件中:
   <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>
希望和我一样郁闷的人能够坚持下来。

 

分享到:
评论

相关推荐

    XFire在Spring中的应用

    除了发布服务,XFire还允许我们在同一Spring应用中消费其他Web服务。通过创建`XFireProxyFactoryBean`,我们可以轻松地创建服务代理。 ```xml &lt;bean id="remoteService" class="org.codehaus.xfire.spring.client....

    xfire+spring+安全认证

    2. 将Spring Security集成到Spring应用上下文中,启用Web安全配置。 3. 在XFire服务端,配置WS-Security,如添加用户名令牌验证或者数字签名,确保消息传输的安全性。 4. 在客户端,设置相应的安全配置,如提供...

    xfire+spring开发webservice

    在提供的文档《xfire+spring2_5开发webservice接口的两种方式.mht》中,详细讲解了这两种方法的实现步骤、示例代码和注意事项。读者可以通过阅读该文档,了解如何在Spring 2.5版本下结合XFire创建Web服务。 另一份...

    XFire整合spring webservice

    在开始整合前,确保你已经安装了Java SDK,设置了JDK环境变量,并在项目中引入了XFire和Spring的相关库。通常,这包括XFire的核心库、Spring的核心库、以及可能需要的其他依赖如Spring的AOP模块。 2. **创建Spring...

    xfire+Spring整合

    当我们将XFire与Spring进行整合时,我们可以利用Spring的强大功能来管理Web服务的生命周期,并且更容易地集成到现有的Spring应用中。 XFire与Spring的整合主要涉及以下几个关键知识点: 1. **Spring的Bean管理**:...

    xfire+spring+webservice+client

    7. **安全与认证**:在实际应用中,Web服务可能会涉及到安全问题,如身份验证和授权。Spring和XFire提供了支持WS-Security标准的机制,可以添加证书、用户名/密码等安全配置到Web服务客户端。 8. **测试与调试**:...

    XFire和Spring整合的完整示例

    在Spring配置文件中,我们可以声明服务接口和其实现类,然后通过`&lt;xfire:service&gt;`标签注册到XFire服务器上。 3. **服务暴露与消费** XFire支持多种协议,如HTTP、HTTPS、JMS等。在Spring配置中,通过设置`&lt;xfire:...

    xfire-spring.pdf

    ### 使用XFire与Spring开发WebService的关键知识点 #### 实现功能与特点 - **基于J2EE平台的...总之,本文档不仅适合初学者学习,也适合有一定经验的开发者深入了解XFire和Spring在WebService领域的强大功能。

    XFire与Spring组合发布webservices

    XFire和Spring都是Java领域中的重要框架,它们在构建和管理Web服务方面具有强大的能力。本篇文章将深入探讨如何利用XFire与Spring的组合来发布Web服务,并提供具体的实例和所需资源。 首先,XFire(现在称为Apache ...

    整理xfire和spring的集成 web service 面向服务编程 java

    下面将详细介绍如何在Java项目中整合XFire和Spring。 ### 1. 项目准备 首先,确保项目中包含了必要的jar包。XFire的集成通常需要以下几类库: - XFire的核心库:如xfire-core、xfire-aegis等,用于处理Web Service...

    使用XFire+Spring构建Web Service步骤以及源代码.rar

    还需要在项目中添加XFire和Spring的相关依赖。这通常通过在`pom.xml`文件中配置Maven依赖来完成: ```xml &lt;groupId&gt;org.apache.cxf &lt;artifactId&gt;cxf-rt-frontend-jaxws &lt;version&gt;3.x.x &lt;groupId&gt;org....

    xfire 与Spring完整集成实例(WebService)

    - **配置Spring**:在Spring的配置文件中声明XFire相关的bean,如服务导出器和服务工厂,这些bean会负责Web服务的创建和暴露。 - **定义服务接口**:创建一个Java接口,该接口定义了Web服务的方法。 - **实现服务...

    Web Service框架xfire与spring集成开发流程

    由于XFire与Spring框架的深度融合,使得开发者能够更加便利地在Spring环境中构建Web Service应用,这正是XFire在开源社区受到追捧的原因。 在XFire与Spring集成开发的过程中,主要分为以下几个步骤: 1. **配置web...

    xfire集成spring必须要的jar

    2. 在Spring配置文件中定义XFire服务,使用`&lt;xfire:service&gt;`等元素声明服务。 3. 配置服务实现,使用Spring的`@Service`或`@Component`注解,并通过`@Autowired`注入依赖。 4. 使用Spring的`ApplicationContext`...

    xfire +spring jar

    描述中提到的“本来想把xfire+spring例子也一起传上来,太大不让传”,意味着这个压缩包可能包含了示例代码或者项目实例,用于展示如何在实际应用中整合XFire和Spring。由于文件大小限制未能一同上传,我们只能从...

    xfireSpring集成需要的Jar包

    在"xfireSpring集成需要的Jar包"中,我们需要一些关键的库文件来确保两个框架的无缝协作。以下是一些核心的Jar包及其在集成过程中的作用: 1. **Spring Framework** - 包括`spring-core`, `spring-context`, `...

    使用xfire+spring构建webservice

    将两者结合,可以方便地在Spring应用中集成Web服务功能。 首先,我们需要理解Web服务的基本概念。Web服务是一种基于网络的应用程序接口,允许不同系统之间交换数据。SOAP是Web服务的一种通信协议,通过XML格式传输...

    webservice xfire spring2.0完整实例

    在这个“webservice xfire spring2.0完整实例”中,我们将会探讨如何结合XFire 1.2.6和Spring 2.0来创建和消费Web服务。首先,我们需要理解Spring 2.0中的Web服务抽象层,即Spring Web Services模块。这个模块提供了...

    xfire ibatis spring web service

    在实际应用中,这样的架构能够提高代码的可维护性和可扩展性,因为每个组件都有清晰的边界。开发者可以专注于业务逻辑,而不需要关注底层的通信细节或数据库操作。此外,由于这些组件都是成熟的开源项目,它们拥有...

Global site tag (gtag.js) - Google Analytics