CXF-01:使用CXF开发Web Service服务端

CXF难点:会使用CXF开发服务端与客户端应用
CXF重点:通过wsdl描述文件就能开发出客户端应用
CXF页面有什么,特点:CXF网页是多种信息共存,新老工程同步,多个系统组合的多信息的页面
一 、 CXF简介:
          CXF 是Celtix + Xfire的结合体,Apache CXF 的前身叫Apache CeltiXfire。CXF 继承了Celtix 和XFire 两大开源项目的精华,提供了对JAX-WS 全面的支持,并且提供了多种Binding 、DataBinding、Transport 以及各种 Format 的支持,并且可以根据实际项目的需要,采用代码优先(Code First)或者WSDL 优先(WSDL First)来轻松地实现Web Services 的发布和使用。
CXF属于SOA框架,SOA(面向服务的架构),IBM主推的架构。
          Service1、Service2、Service3————SOA中所有组件都是"即插即用"的。类似于台式机CPU不快了,换CPU,内存换内存,升级电脑某一个部件时只需要升级某一个部件。
          IBM提倡SOA架构:希望以“组织电脑”的方式来开发软件。想视频聊天,买个摄像头。想打印东西买一个打印机安上。SOA也是这样的。
          CXF的组成*电脑中有哪几部件
                   ---XFire(Web Service框架)*各种提供服务的组件。
                   ---Celtrix (ESB框架)*主板提供:通信总线(Communicate Bus)的服务 -> 企业应用中叫:企业服务总线(Enterprise Service Bus , ESB。
         * CXF支持多种协议标准:JAX-WS、 JAX-WSA、JSR-181 和 SAAJ;支持 SOAP 1.1、1.2、WS-I BasicProfile、WS-Security、WS-Addressing、WS-RM 和WS-Policy;支持WSDL 1.1 、2.0;支持MTOM;
         * CXF支持多种协议传输方式:Bindings:SOAP、REST/HTTP; Data Bndings:目前支持 JAXB 2.0、Aegis 两种,默认是 JAXB 2.0。XMLBeans、Castor 和 JiBX 数据绑定方式将在 CXF 2.1 版本中得到支持;格式(Format):XML、JSON;传输方式:HTTP、Servlet、JMS 和 Jabber; 可扩展 API :允许为 CXF 增加其它的 Bindings,以能够支持其它的消息格式,比如:CSV 和固定记录长度。
         * CXF 灵活部署
        轻量级容器:可在 Tomcat 或基于 Spring 的容器中部署 Services;集成 JBI:可以在如 ServiceMix, OpenESB or Petals 等等的 JBI 容器中将它部署为一个服务引擎;集成 SCA:可以部署在如 Tuscany 之类的 SCA 容器中;集成 J2EE:可以在 J2EE 应用服务器中部署 Services,比如:Geronimo、JOnAS、JBoss、WebSphere Application Server 和 WebLogic Application Server,以及 Jetty 和 Tomcat;独立的 Java 客户端/服务器。
         * 支持多种编程语言:全面支持 JAX-WS 2.0 客户端/服务器编程模型;支持 JAX-WS 2.0 synchronous、asynchronous 和 one-way API's;支持 JAX-WS 2.0 Dynamic Invocation Interface (DII) API;支持 wrapped and non-wrapped 风格;支持 XML messaging API;支持 JavaScript 和 ECMAScript 4 XML (E4X) ,客户端与服务端均支持;通过 Yoko 支持 CORBA;通过 Tuscany 支持 SCA;通过 ServiceMix 支持 JBI ;

         * 代码生成:Java to WSDL;WSDL to Java;XSD to WSDL;WSDL to XML;WSDL to SOAP;WSDL to Service;

二 、 使用CXF开发Web Service服务端

         * jar 包地址 http://pan.baidu.com/s/1jHJ56BW    (Apache官网上也可以下载)

         

        1.开发一个Web Service业务接口,该接口要用@WebService修饰;

package org.fjava.cxf.ws;
import javax.jws.WebService;
@WebService//J2EE文档里查看WebService
public interface HelloWorld {
	String sayHello(String name);
}
        2.开发一个Web Service实现类,实现类也需要用@WebService修饰;
package org.fjava.cxf.ws.impl;
import java.util.Date;
import javax.jws.WebService;
import org.fjava.cxf.ws.HelloWorld;
@WebService(endpointInterface="org.fjava.cxf.ws.HelloWorld", serviceName="HelloWorldWs")
//endpointInterface=""表示实现的接口
public class HelloWorldWs implements HelloWorld {
	@Override
	public String sayHello(String name) {
		return "Hello ! " + name + ",您好" + "现在时间是:" + new Date();
	}
}
        3.发布Web Service,写完后运行以下代码,若打印出  "Web Service暴露成功!" 则暴露成功

package lee;
import javax.xml.ws.Endpoint;
import org.fjava.cxf.ws.HelloWorld;
import org.fjava.cxf.ws.impl.HelloWorldWs;
//发布Web Service
public class ServiceMain {
	public static void main(String[] args){
		HelloWorld hw = new HelloWorldWs();
		//调用Endpoint的publish("本机地址","服务的提供者:一个Web Service对象")方法发布Web Service
		Endpoint.publish("http://localhost/sayHello", hw);
		System.out.println("Web Service暴露成功!");
		//暴露成功后可以被任何平台的任何语言调用
		//http://192.168.*.*/sayHello?wsdl
	}
}
异常点:
/**发布Web Service:/调用Endpoint的publish("本机地址","服务的提供者:一个Web Service对象")方法时/错误为:'本机地址不正确' 或 '重复发布'
 * Exception in thread "main" com.sun.xml.internal.ws.server.ServerRtException: Server Runtime Error: java.net.BindException: Cannot assign requested address: bind
 * 	at com.sun.xml.internal.ws.transport.http.server.ServerMgr.createContext(ServerMgr.java:102)
 * 	at com.sun.xml.internal.ws.transport.http.server.HttpEndpoint.publish(HttpEndpoint.java:63)
 * 	at com.sun.xml.internal.ws.transport.http.server.EndpointImpl.publish(EndpointImpl.java:171)
 * 	at com.sun.xml.internal.ws.spi.ProviderImpl.createAndPublishEndpoint(ProviderImpl.java:118)
 * 	at javax.xml.ws.Endpoint.publish(Endpoint.java:240)
 * 	at lee.ServiceMain.main(ServiceMain.java:12)
 * Caused by: java.net.BindException: Cannot assign requested address: bind
 * 	at sun.nio.ch.Net.bind0(Native Method)
 * 	at sun.nio.ch.Net.bind(Net.java:444)
 * 	at sun.nio.ch.Net.bind(Net.java:436)
 * 	at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:214)
 * 	at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
 * 	at sun.net.httpserver.ServerImpl.<init>(ServerImpl.java:100)
 * 	at sun.net.httpserver.HttpServerImpl.<init>(HttpServerImpl.java:50)
 * 	at sun.net.httpserver.DefaultHttpServerProvider.createHttpServer(DefaultHttpServerProvider.java:35)
 * 	at com.sun.net.httpserver.HttpServer.create(HttpServer.java:129)
 * 	at com.sun.xml.internal.ws.transport.http.server.ServerMgr.createContext(ServerMgr.java:84)
 * 	... 5 more
 * /

希望对你有帮助,祝你有一个好心情,加油!

若有错误、不全、可优化的点,欢迎纠正与补充;转载请注明出处!


猜你喜欢

转载自blog.csdn.net/cheng_feng_xiao_zhan/article/details/52588882