CXF 与 spring 集成
1 . 新建 web project , 并加入 a pache-cxf-2.0.7/lib 所有包 ,编写要发布的 web service 接口和实现 . 这一步,与前面一样。
import javax.jws.WebService;
@WebService
public interface HelloWorld {
public String sayHello(String text);
}
import javax.jws.WebService;
@WebService(endpointInterface="test.HelloWorld")
public class HelloWorldImpl implements HelloWorld {
public String sayHello(String text) {
return "Hello" + text ;
}
}
@WebService 注解表示是要发布的 web 服务
2. 在 spring-cxf.xml 配置发布的 web service
<? 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 = "hello" class = "test.HelloWorldImpl" />
< jaxws:endpoint id = "helloWorld" implementor = "#hello"
address = "/HelloWorld" />
</ beans >
注意: < jaxws:endpoint id = "helloWorld" implementor = "#hello"
address = "/HelloWorld" />
id :指在 spring 配置的 bean 的 ID.
Implementor: 指明具体的实现类 .
Address: 指明这个 web service 的相对地址,
3. 配置 web.xml 文件:
<? xml version = "1.0" encoding = "UTF-8" ?>
< web-app version = "2.4" xmlns = "http://java.sun.com/xml/ns/j2ee"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" >
< context-param >
< param-name > contextConfigLocation </ param-name >
< param-value > classpath:spring-cxf.xml </ param-value >
</ context-param >
< listener >
< listener-class >
org.springframework.web.context.ContextLoaderListener
</ listener-class >
</ listener >
< servlet >
< servlet-name > CXFServlet </ servlet-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 > /ws/* </ url-pattern >
</ servlet-mapping >
</ web-app >
4 . 部署到 tomcat 服务器 , 输入 :http://localhost:8080/<web-app-name>/ HelloWorld?wsdl, 将显示这个 web service 的 wsdl.
注意:如果web.xml 配置 < servlet-name > CXFServlet </ servlet-name >
< url-pattern > /ws/* </ url-pattern >
则访问地址为: http://localhost:8080/<web-app-name>/ws/ HelloWorld?wsdl
5. 下面就开始创建一个客户端程序,访问这个web service, 同样新建 java project , 并加入 a pache-cxf-2.0.7/lib 所有包 . 创建与具体webservice 技术无关的业务接口HelloWorld.java
public interface HelloWorld {
public String sayHello(String text);
}
6. 配置 spring-client.xml
< 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 = "test.HelloWorld"
factory-bean = "clientFactory" factory-method = "create" />
< bean id = "clientFactory" class = "org.apache.cxf.jaxws.JaxWsProxyFactoryBean" >
< property name = "serviceClass" value = "test.HelloWorld" />
< property name = "address" value = "http://localhost:9000/helloWorld" />
<!-- 这个地方的地址一定要注意,正确的 -->
</ bean >
</ beans >
7 .测试:
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import test.HelloWorld;
public class Test {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext(
"spring-client.xml" );
HelloWorld client = (HelloWorld) ctx.getBean( "client" );
String result = client.sayHello( " 你好 !" );
System. out .println(result);
}
}