Apache CXF =Celtix + Xfire
支持多种协议:
a) SOAP1.1,1,2
b) HTTP
c) CORBA(CommonObject Request Broker Architecture公共对象请求代理体系结构,早期语言使用的WS。C,c++,C#)
d) 并可以与Spring进行快速无缝的整合
e) 灵活的部署:可以运行有Tomcat,Jboss,Jetty(内置),IBMWS,BeaWS上面。
最后配置path和classpath
a) Path = %JAVA_HOME%\bin;%CXF_HOME%\bin;
b) CLASSPATH=.;%CXF_HOME%\lib\cxf-manifest.jar;.\build\classes
3.整合Spring+CXF
3.1 新建web项目
项目目录结构为
放置Spring中的jar包,至于需要那些jar包,手把手搭建SSH+Activiti(附加源码)
4.客户端访问CXF中的jar包为CXF_HOME\lib下面的全部jar包
3.2 Dao————Service
其中Dao至Service包,就不在多说了,就是一个简单的Spring注入的层级管理,不太懂的,到时候看下面的源码,例如Servcie实现类
<span style="font-family:Comic Sans MS;font-size:18px;"><span style="font-family:Comic Sans MS;font-size:18px;">package com.service.impl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.Model.Person; import com.dao.PersonDao; import com.service.PersonService; @Service public class PersonServiceImpl implements PersonService{ @Autowired PersonDao personDao; public void add(Person person) { personDao.add(person); } } </span></span>3.3 配置文件讲解
bean.xml:为Spring的配置文件,用来通过扫描包结构,通过注解进行管理依赖
cxf.xml:是CXF的核心配置文件,主要的有关CXF都在这里配置,如下
<span style="font-family:Comic Sans MS;font-size:18px;"><span style="font-family:Comic Sans MS;font-size:18px;"><?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" xmlns:jaxrs="http://cxf.apache.org/jaxrs" xmlns:cxf="http://cxf.apache.org/core" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd"> <!-- 引入CXF Bean定义如下,早期的版本中使用 --> <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" /> <!-- ===============配置带有接口的webservice服务================= address:tomcat的host http://ip:port/projectName/service/后面的一端路径 http://ip:port/projectName/service/bye serviceClass:服务接口的类 --> <jaxws:server address="/person" serviceClass="com.service.PersonService"> <!-- 服务接口的实现类 --> <jaxws:serviceBean> <bean class="com.service.impl.PersonServiceImpl"></bean> </jaxws:serviceBean> <jaxws:inInterceptors> <bean class="org.apache.cxf.interceptor.LoggingInInterceptor"></bean> </jaxws:inInterceptors> <jaxws:outInterceptors> <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"></bean> </jaxws:outInterceptors> </jaxws:server> <!-- ===============配置类的形式webservice服务================= address:tomcat的host http://ip:port/projectName/service/后面的一端路径 http://ip:port/projectName/service/hello implementor:指定具体的服务的类 --> <!-- <jaxws:endpoint id="hello" address="/hello" implementor="com.web.service.HelloService"> <jaxws:outInterceptors> <bean class="org.apache.cxf.interceptor.LoggingInInterceptor"></bean> </jaxws:outInterceptors> <jaxws:inInterceptors> <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"></bean> </jaxws:inInterceptors> </jaxws:endpoint> --> </beans> </span></span>
上述文件中,有两种服务发布,一种是以接口形式,一种是以类的形式web.xml:配置的是CXF的核心过滤器以及Spring的监听器
<span style="font-family:Comic Sans MS;font-size:18px;"><span style="font-family:Comic Sans MS;font-size:18px;"><?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:cxf-servlet.xml</param-value> </context-param> <servlet> <servlet-name>cxf</servlet-name> <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> <!-- <init-param> <param-name>config-location</param-name> <param-value>classpath:cxf.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> --> </servlet> <servlet-mapping> <servlet-name>cxf</servlet-name> <url-pattern>/service/*</url-pattern> </servlet-mapping> </web-app> </span></span>
上面就是整个CXF+Spring的整合,部署到Tomact中,进行访问,访问地址如下http://localhost:8080/Spring_CXF/service/person?wsdl
如果要通过客户端访问的话,就需要把服务的代码给Down下来,如果CXF_HOME配置正确的话,通过以下来Down下来服务的代码
关于WSDL2JAVA解释如下
在cxf中,也提供了一个用于生成客户端调用代码的工具。它的功能就如同wsimport一样。
先让我们了解一下cxf的wsdl2java工具,可以生成一堆客户端调用的代码。既可以生成SOAP1.1也可以生成SOAP1.2
此工具位于cxf_home/bin目录下。参数与wsimport有所不同。
它包含以下参数:
a) -d参数,指定代码生成的目录。
b) -p参数,指定生成的新的包结构。
Down下服务端代码后,直接放置到客户端中调用即可,客户端代码如下
<span style="font-family:Comic Sans MS;font-size:18px;"><span style="font-family:Comic Sans MS;font-size:18px;">package com.client; import com.server.Person; import com.server.PersonService; import com.server.PersonServiceService; import com.service.HelloService; import com.service.HelloServiceService; public class client { public static void main(String[] args) { PersonServiceService personServiceService = new PersonServiceService(); PersonService personService = personServiceService .getPersonServicePort(); Person person=new Person(); person.setAge(30); person.setName("张三"); personService.add(person); } } </span></span>