webService教程之cxf框架
一:简介Apache CXF = Celtix + Xfire 二:目录结构下载地址:http://cxf.apache.org/download.html bin(目录) docs(目录) etc(目录) lib(目录) 以下的 jar 包是所有 CXF 项目所必需的: 对于 Java2WSDL 和 WSDL2Java,除了必需的之外,还需要再增加如下 jar 包: 为了支持 JAX-WS ,除了必需的之外,还需要再增加如下 jar 包: 为了支持 XML 配置,除了必需的之外,还需要再增加如下 jar 包:aopalliance.jar 为了独立的 HTTP 服务支持,除了必需的之外,还需要再增加如下 jar 包:geronimo-servlet.jar 为了支持 Aegis ,除了必需的之外,还需要再增加如下 jar 包: 为了支持 WS-Security ,除了必需的之外,还需要再增加如下 jar 包:bcprov-jdk14.jar 为了支持 HTTP Binding ,除了必需的之外,还需要再增加如下 jar 包:jra.jar licenses(目录) modules(目录) samples(目录) 使用的方法。可以通过 samples 目录和它各个子目录下的 README.txt 的文件来详细了解示例的编译与运行的步骤。 三:环境搭建1、需要jdk环境 3、ANT_HOME 4、CATALINA_HOME 5、 四:案例一
public class HelloService {
public static void main(String[] args) {
//创建服务工厂对象
//ServerFactoryBean sfb = new ServerFactoryBean();
JaxWsServerFactoryBean sfb = new JaxWsServerFactoryBean ();
//设置服务地址
sfb.setAddress("http://127.0.0.1:8888/hello");
//设置服务类
sfb.setServiceClass(HelloService.class);
//设置服务对象的实例
sfb.setServiceBean(new HelloService());
//发布服务
sfb.create();
}
@WebService
public String sayHello(String name){
return name+ " hello";
}
五:wsdl2java使用在cxf中,也提供了一个用于生成客户端调用代码的工具。它的功能就如同wsimport一样。 SOAP1.2消息 POST /WebServices/MobileCodeWS.asmx HTTP/1.1
Host: webservice.webxml.com.cn
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length
<?xml version="1.0" encoding="utf-8"?> <soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"> <soap12:Body> <getMobileCodeInfo xmlns="http://WebXml.com.cn/"> <mobileCode>string</mobileCode> <userID>string</userID> </getMobileCodeInfo> </soap12:Body> </soap12:Envelope> HTTP/1.1 200 OK Content-Type: application/soap+xml; charset=utf-8 Content-Length: length <?xml version="1.0" encoding="utf-8"?> <soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"> <soap12:Body> <getMobileCodeInfoResponse xmlns="http://WebXml.com.cn/"> <getMobileCodeInfoResult>string</getMobileCodeInfoResult> </getMobileCodeInfoResponse> </soap12:Body> </soap12:Envelope>
六:使用JaxWsServerFactoryBean调用接口服务类1.创建服务接口 @WebService//注意注解加在接口上
public interface HI {
public String sayHi(String name);
}
2.创建接口实现类 public class HIImpl implements HI {
@Override
public String sayHi(String name) {
// TODO Auto-generated method stub
return name + " hello";
}
}
3.创建发布服务类 public static void main(String[] args) {
JaxWsServerFactoryBean jf = new JaxWsServerFactoryBean();
jf.setAddress("http://127.0.0.1:4345/hi");
jf.setServiceClass(HI.class);
jf.setServiceBean(new HIImpl());
jf.create();
}
4.4 生成客户端代码 5.调用客户端 public class Client {
public static void main(String[] args) {
HIService hs = new HIService();
HI serviceClass = hs.getHIPort();
System.out.println(serviceClass.sayHi("张三"));
}
}
七:拦截输入输出消息LoggingInInterceptor – 信息输入时的拦截器 –请求 public class InterServer {
public static void main(String[] args) {
JaxWsServerFactoryBean jf = new JaxWsServerFactoryBean();
jf.getInInterceptors().add(new LoggingInInterceptor());
jf.getOutInterceptors().add(new LoggingOutInterceptor());
jf.setAddress("http://127.0.0.1:5434/hi");
jf.setServiceClass(HI.class);
jf.setServiceBean(new HIImpl());
jf.create();
}
}
八:在web项目中创建类的cxf服务1.创建web项目 <!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>cxf</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>cxf</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>60</session-timeout>
</session-config>
</web-app>
5、创建cxf的核心配置文件cxf-servlet.xml <?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" />
<jaxws:endpoint id="hello" address="/hello" implementor="com.rl.cxf.web.server.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>
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |