备忘录

记录学习过、研究过、使用过和总结过的内容,以备不时之需

统计

留言簿(4)

积分与排名

其它

技术网站

牛人博客

阅读排行榜

评论排行榜

apache cxf入门(转)

一、入门
1.下载apache cxf框架

     是人都知道去官方网站去下载就行了。

2.配置过程

2.1 web.xml文件

配置为以下内容即可:

<?xml version="1.0" encoding="UTF-8"?> <!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>

 <display-name>WebServicesClient</display-name>  <description>Hebbn WebServices Client</description>

 <context-param>   <param-name>webAppRootKey</param-name>   <param-value>HebbnClient.root</param-value>  </context-param>  <context-param>   <param-name>log4jConfigLocation</param-name>   <param-value>/WEB-INF/log4j.properties</param-value>  </context-param>  <context-param>   <param-name>log4jRefreshInterval</param-name>   <param-value>60000</param-value>  </context-param>  <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>  <listener>   <listener-class>    org.springframework.web.context.request.RequestContextListener   </listener-class>  </listener>  <listener>   <listener-class>    org.springframework.web.util.Log4jConfigListener   </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>/services/*</url-pattern>  </servlet-mapping>  <session-config>   <session-timeout>30</session-timeout>  </session-config>

 <!-- MIME mapping -->  <mime-mapping>   <extension>inc</extension>   <mime-type>text/plain</mime-type>  </mime-mapping>

 <mime-mapping>   <extension>doc</extension>   <mime-type>application/vnd.ms-word</mime-type>  </mime-mapping>  <mime-mapping>   <extension>gif</extension>   <mime-type>image/gif</mime-type>  </mime-mapping>  <mime-mapping>   <extension>htm</extension>   <mime-type>text/html</mime-type>  </mime-mapping>  <mime-mapping>   <extension>html</extension>   <mime-type>text/html</mime-type>  </mime-mapping>  <mime-mapping>   <extension>jad</extension>   <mime-type>text/vnd.sun.j2me.app-descriptor</mime-type>  </mime-mapping>  <mime-mapping>   <extension>jnlp</extension>   <mime-type>application/x-java-jnlp-file</mime-type>  </mime-mapping>  <mime-mapping>   <extension>jpeg</extension>   <mime-type>image/jpeg</mime-type>  </mime-mapping>  <mime-mapping>   <extension>jpg</extension>   <mime-type>image/jpeg</mime-type>  </mime-mapping>  <mime-mapping>   <extension>js</extension>   <mime-type>application/x-javascript</mime-type>  </mime-mapping>  <mime-mapping>   <extension>pdf</extension>   <mime-type>application/pdf</mime-type>  </mime-mapping>  <mime-mapping>   <extension>png</extension>   <mime-type>image/png</mime-type>  </mime-mapping>  <mime-mapping>   <extension>rar</extension>   <mime-type>application/x-rar-compressed</mime-type>  </mime-mapping>  <mime-mapping>   <extension>txt</extension>   <mime-type>text/plain</mime-type>  </mime-mapping>  <mime-mapping>   <extension>xls</extension>   <mime-type>application/vnd.ms-excel</mime-type>  </mime-mapping>  <mime-mapping>   <extension>xml</extension>   <mime-type>text/xml</mime-type>  </mime-mapping>  <mime-mapping>   <extension>xul</extension>   <mime-type>application/vnd.mozilla.xul-xml</mime-type>  </mime-mapping>  <mime-mapping>   <extension>zhtml</extension>   <mime-type>text/html</mime-type>  </mime-mapping>  <mime-mapping>   <extension>zip</extension>   <mime-type>application/x-zip</mime-type>  </mime-mapping>  <mime-mapping>   <extension>zul</extension>   <mime-type>text/html</mime-type>  </mime-mapping>  <mime-mapping>   <extension>wsdl</extension>   <mime-type>text/xml</mime-type>  </mime-mapping>

 <mime-mapping>   <extension>xsd</extension>   <mime-type>text/xml</mime-type>  </mime-mapping>  <welcome-file-list>   <welcome-file>index.jsp</welcome-file>  </welcome-file-list> </web-app>

主要的就是apace cxf那个servlet的配置参数以及spring的一些配置参数要搞对就行了。

2.2 spring的配置文件

<?xml version="1.0" encoding="UTF-8"?> <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" />

 <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">   <property name="locations">    <list>     <value>WEB-INF/jdbc.properties</value>    </list>   </property>  </bean>

 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">   <property name="driverClassName" value="${jdbc.driverClassName}"/>   <property name="url" value="${jdbc.url}"/>   <property name="username" value="${jdbc.username}"/>   <property name="password" value="${jdbc.password}"/>   <property name="maxActive" value="${jdbc.maxActive}"/>   <property name="initialSize" value="${jdbc.initialSize}"/>   <property name="maxWait" value="${jdbc.maxWait}"/>   <property name="minIdle" value="${jdbc.minIdle}"/>   <property name="testOnBorrow" value="true"/>   <property name="testOnReturn" value="true"/>   <property name="testWhileIdle" value="true"/>   <property name="validationQuery" value="select 1 from dual"/>  </bean>

 <!-- Transaction manager for a single JDBC DataSource -->  <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">   <property name="dataSource" ref="dataSource"/>  </bean>

 <jaxws:endpoint id="testServices" implementor="com.tsxd.hebbn.services.TestServices" address="/testServices" />   </beans>

如果要操作数据库的话就带着配置参数中数据库相关的部分,但是在apace cxf的下载包中不包含数据库相关的spring库文件,需要自己下载。单纯的想测试Apache CXF的话就留着最后一行就得了。

2.3 Java测试代码

2.3.1 接口类源代码

注意那个@WebService

package com.tsxd.hebbn.services;

import javax.jws.WebService; @WebService public interface ITestServices {

   public java.util.Date getServerDate();    public String sayHello(String name); }

2.3.2 实现类代码

package com.tsxd.hebbn.services;

import java.util.Date;

import javax.jws.WebService;

@WebService(endpointInterface="com.tsxd.hebbn.services.ITestServices") public class TestServices implements ITestServices {

 public Date getServerDate() {   return new Date();  }

 public String sayHello(String name) {   if (null==name){    return "fuck u";   }   return "hello :"+name;  }

}

也是注意那个@WebService声明。

2.4 测试

部署到tomcat中去,因为在web.xml文件中配置了cxf servlet 类mapping到/services路径,所以访问时

http://IP地址:端口号/应用程序上下文/services/就行了

应该会有已经配置好的services的列表,像下边这样:

{http://services.hebbn.tsxd.com/}TestServicesPort

点击联接可以查看WSDL描述

2.5 最后

    这个破Apache CXF和spring绑的也太紧密了,用spring的话就会造成生成的wsdl描述中参数名称都变成args0这样无意义的名称,不好,不喜欢,结论,还是直接用xfire就行了,没必要用这个巨大的CXF.





二、入门

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, implementor和address。

“id”指定这个Bean在Spring上下文中唯一的标识。

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

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

 

1.       配置你的Servlet

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

第一个是Spring的ContextLoaderListerp类会在启动时加载上面配置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就可以了。你可以通过JaxWsProxyFactory的create方法来生成一个客户端的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命令输入界面,进入CXF的spring例子的路径“D:\cxf\samples” 运行我们在上一步创建的

“setenv.cmd”,

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

d)      启动服务器“ant server”

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

“setenv.cmd”,

f)      启动客户端“ant client”

 

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

,访问的路径就是:http://localhost:8080/CXFSpring/HelloWorld

posted on 2008-09-09 11:18 雪山飞狐 阅读(1299) 评论(0)  编辑  收藏 所属分类: 开源框架


只有注册用户登录后才能发表评论。


网站导航: