XFire的下一代产品CXF的入门(二) - 与Spring的集成

原创 2007年10月14日 19:49:00
 

1. CXF设置编译和开发环境

打开eclipse(其他的IDE也可以),引入如下的类库(也可以省事一点,把CXF/lib路径下的所有类库都引入)

commons-logging-1.1.jar

geronimo-activation_1.1_spec-1.0-M1.jar (or Sun's Activation jar)

geronimo-annotation_1.0_spec-1.1.jar (JSR 250)

geronimo-javamail_1.4_spec-1.0-M1.jar (or Sun's JavaMail jar)

geronimo-servlet_2.5_spec-1.1-M1.jar (or Sun's Servlet jar)

geronimo-ws-metadata_2.0_spec-1.1.1.jar (JSR 181)

jaxb-api-2.0.jar

jaxb-impl-2.0.5.jar

jaxws-api-2.0.jar

neethi-2.0.jar

saaj-api-1.3.jar

saaj-impl-1.3.jar

stax-api-1.0.1.jar

wsdl4j-1.6.1.jar

wstx-asl-3.2.1.jar

XmlSchema-1.2.jar

xml-resolver-1.2.jar

引入Spring相关的jars (只对):

 

aopalliance-1.0.jar

spring-core-2.0.4.jar

spring-beans-2.0.4.jar

spring-context-2.0.4.jar

spring-web-2.0.4.jar

 

引入CXF相关的jar:

 

cxf-2.0-incubator.jar

2. 编写自己的服务

eclipse里创建一个J2EE的动态Web项目

这里所有的例子代码都在 D:/cxf/samples/java_first_spring_support”路径下。“d:/cxf”CXF的安装路径。但是在这个路径下不包含Web Service的例子源代码(怀疑是开发人员忘记了),需要手工在项目中生成。

 

首先写一个服务接口,例子中的HelloWorld.java。我们要注意的是这个例子使用了JSR181规范中的声明“@WebService”。

package demo.spring;
 
import javax.jws.WebService;
 
@WebService
public interface HelloWorld {
    String sayHi(String text);
}

下一步实现这个服务接口,例子中的HelloWorldImpl.java。这个例子代码中的“@WebService”标签只包含一个endpointInterface的属性,这个属性让CXF知道根据哪个接口生成WSDL文件。这里有点和我们第一个例子不同,没有包含ServiceName属性。这是因为这个属性会在Spring的配置文件中声明,请参考下面的beans.xml这个配置文件。

package demo.spring;
 
import javax.jws.WebService;
 
@WebService(endpointInterface = "demo.hw.server.HelloWorld")
public class HelloWorldImpl implements HelloWorld {
 
    public String sayHi(String text) {
        return "Hello " + text;
    }
}

 

3. Spring中声明你的服务Beans

CXF中包含对Spring2.0很好的支持。对于JAX-WS这一类配置,我们有<jaxws:endpoint>bean作为服务端节点的配置说明。

让我们创建一个”beans.xml”文件在我们项目的WEB-INF路径下,注意这个文件的例子可以在“D:/cxf/samples/java_first_spring_support/”中找到。

<beans xmlns="http://www.springframework.org/schema/beans"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:jaxws="http://cxf.apache.org/jaxws"
      xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
 
      <import resource="classpath:META-INF/cxf/cxf.xml" />
      <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
      <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
 
      <jaxws:endpoint 
        id="helloWorld" 
        implementor="demo.spring.HelloWorldImpl" 
        address="/HelloWorld" />
        
</beans>

这里我们可以看到<jaxws:endpoint>的三个属性id, implementoraddress

id”指定这个BeanSpring上下文中唯一的标识。

implementor”指定了这个Web Service的实现类。

address”指定了服务在Web服务器上发布的地址。这个地址可以包含ip和端口的完整地址,也可以是只包含相对路径的地址。

 

1.       配置你的Servlet

配置的过程中我们需要在web.xml中添加如下两项:

第一个是SpringContextLoaderListerp类会在启动时加载上面配置beans.xml文件。我们需要设定context-param节点;第二个是增加一个CXF Servlet。配置文件如下,注意这个文件可以在“D:/cxf/samples/java_first_spring_support/”中找到。

<web-app>
   <context-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>WEB-INF/beans.xml</param-value>
   </context-param>
   <listener>
          <listener-class>
          org.springframework.web.context.ContextLoaderListener
          </listener-class>
   </listener>
   <servlet>
          <servlet-name>CXFServlet</servlet-name>
          <display-name>CXF Servlet</display-name>
          <servlet-class>
          org.apache.cxf.transport.servlet.CXFServlet
          </servlet-class>
          <load-on-startup>1</load-on-startup>
   </servlet>
   <servlet-mapping>
          <servlet-name>CXFServlet</servlet-name>
          <url-pattern>/*</url-pattern>
   </servlet-mapping>
</web-app>

这里需要注意的是你配置的endpoint的地址(address)属性必须和你在Beans.xml中定义的一致。尽管在我们的例子中没有在HelloWorldImpl.java中声明“address“属性,我们也需要在实际的配置中有所注意。

 

2.       CXF引入了一个JaxWsProxyFactory bean,他可以根据服务接口创建一个客户端程序。你只需要告诉服务类是什么(这个例子中是HelloWorld interface这个类)和服务的URL就可以了。你可以通过JaxWsProxyFactorycreate方法来生成一个客户端的bean

下面是配置bean的例子

<beans xmlns="http://www.springframework.org/schema/beans"

     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

     xmlns:jaxws="http://cxf.apache.org/jaxws"

     xsi:schemaLocation="

http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd

http://cxf.apache.org/jaxws http://cxf.apache.org/schema/jaxws.xsd">

 

    <bean id="client" class="demo.spring.HelloWorld"

      factory-bean="clientFactory" factory-method="create"/>

   

     <bean id="clientFactory" class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">

       <property name="serviceClass" value="demo.spring.HelloWorld"/>

       <property name="address" value="http://localhost:9002/HelloWorld"/>

     </bean>

      

</beans>

 

如果你在客户端代码要使用这个bean,代码会非常简单,例子如下

ApplicationContext context = ...; // your Spring ApplicationContext

HellWorld client = (HelloWorld) context.getBean("client");

 

客户端的例子代码Client.java和配置文件例子client-beans.xml都可以在“D:/cxf/samples/java_first_spring_support/src/demo/spring/client“中找到。

 

 

例子的运行,我们可以通过两种方式来运行我们完成的例子。

一.              利用ant来直接运行CXF安装路径下的samples。方法可以参考D:/cxf/samples/ReadMe.txt文件。

a)         首先在“D:/cxf/samples”创建了一个”setenv.cmd”文件,文件内容如下:

set CXF_HOME=d:/cxf

set JAVA_HOME=C:/Program Files/Java/jdk1.5.0_13

set ANT_HOME=d:/apache/ant

set PATH=%JAVA_HOME%/bin;%ANT_HOME%/bin;%CXF_HOME%/bin;%PATH%

set CLASSPATH=.;%CXF_HOME%/lib/cxf-manifest-incubator.jar;./build/classes

这个执行文件配置了运行CXF例子所需的环境变量。

b)      开始->运行,敲入“cmd”,进入dos命令输入界面,进入CXFspring例子的路径“D:/cxf/samples” 运行我们在上一步创建的“setenv.cmd”,

c)      进入“D:/cxf/samples/java_first_spring_support,编译服务的代码。运行“ant

d)      启动服务器“ant server

e)      开始->运行,敲入“cmd”,进入dos命令输入界面,进入CXFspring例子的路径“D:/cxf/samples” 运行我们在上一步创建的“setenv.cmd”,

f)      启动客户端“ant client

 

把我们上面eclipse中开发的Web项目打包为 war包的形式。部署到tomcat或者jetty服务器上。注意部署时访问的路径。比如我部署在Tomcat上,访问的路径就是:http://localhost:8080/CXFSpring/HelloWorld

cxf与xfire互相调用,并且加验证机制

最近做的项目要完成与第三方系统进行webservice对接。
  • luoluo_wjx
  • luoluo_wjx
  • 2014年09月03日 10:13
  • 1712

XFire与spring进行整合正确方式

前言:最近看的源码里有关于XFire与spring的整合,所以就想了解下这个整合的过程和配置方式,结果在网上找了很多配置的过程,许多不提供jar包,只是说用myeclipse自己加入XFire库,但我...
  • woshishuiaaaD
  • woshishuiaaaD
  • 2016年05月11日 16:58
  • 3774

axis和xfire以及CXF三种方式实现WebServices分别有什么优缺

1、JWS是Java语言对WebService服务的一种实现,用来开发和发布服务。而从服务本身的角度来看JWS服务是没有语言界限的。但是Java语言为Java开发者提供便捷发布和调用WebServic...
  • rockstar541
  • rockstar541
  • 2014年03月12日 18:32
  • 13110

xfire与cxf冲突包解决方案【发布时异常注意】

xfire 与 cxf冲突现象解决方案 【项目发布中遇到的异常情况】 Unable to create schema compiler   项目发布环境使用的是tomcat7 冲突说明项目发布在调...
  • zqd32
  • zqd32
  • 2017年04月26日 23:23
  • 649

采用spring,maven,xfire/cxf 实现SOAP的WebService,并用C#作为客户端调用

之前不懂xfire是什么,在网上搜了半天才知道,xfire就是现在的cxf。 由于xfire在几年前就已停止更新了,所以这里采用cxf来实现webService.下文主要是针对soap的. 1.服务端...
  • puhaiyang
  • puhaiyang
  • 2016年06月13日 23:00
  • 1269

Spring中整合Xfire发布webservice服务

一、web.xml中配置xfire的servlet交由spring管理 contextConfigLocation /WEB-INF/applicationContext-*.xml ...
  • BobChao0730
  • BobChao0730
  • 2016年04月20日 16:49
  • 1131

一个CXF集成SPRING的WEBSERVICE完整实例

      一个CXF集成SPRING的WEBSERVICE完整实例 1 首先准备以下JAR包 [java] view plain copy ...
  • shenxiuwen1989
  • shenxiuwen1989
  • 2016年05月27日 15:19
  • 620

Axis1、Axis2、Xfire、CXF的区别

CXF  最新版本: 2.2.2  开源服务框架,可以通过API ,如JAX-WS , 构建和开发服务。服务可以使多种协议的,例如SOAP, XML/HTTP, RESTful...
  • nmbvbvbvbv
  • nmbvbvbvbv
  • 2015年03月15日 20:32
  • 319

手把手教你 cxf3.1.4整合spring4.2

1、开发工具:Eclipse4.5   + tomcat8  + jdk8  + cxf3.1.4  + spring4.2 2、首先Eclipse新建两个web工程,,一个模拟server端发布w...
  • jQuerys
  • jQuerys
  • 2016年02月04日 13:32
  • 11312

java开发webservice的几种方式[待总结:cxf、xfire、axis2]

文章来源:http://langgufu.iteye.com/blog/2087116 java开发webservice的几种方式(转载) 博客分类:  Web Se...
  • buster2014
  • buster2014
  • 2015年08月07日 10:56
  • 1779
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:XFire的下一代产品CXF的入门(二) - 与Spring的集成
举报原因:
原因补充:

(最多只允许输入30个字)