游戏网站制作,山东省工程建设信息网官网,做最好的在线看片网站,网站建设行业衰落基础架构 CXF旨在为服务创建必要的基础设施#xff0c;它的整体架构主要由以下几个部分组成#xff1a; 1.Bus 它是C X F架构的主干#xff0c;为共享资源提供了一个可配置的场所#xff0c;作用非常类似于S p r i n g的ApplicationContext。这些共享资源包括WSDL管理器… 基础架构 CXF旨在为服务创建必要的基础设施它的整体架构主要由以下几个部分组成 1.Bus 它是C X F架构的主干为共享资源提供了一个可配置的场所作用非常类似于S p r i n g的ApplicationContext。这些共享资源包括WSDL管理器、绑定工厂等。通过对Bus进行扩展可以方便地容纳自己的资源或替换现有的资源。默认Bus实现是基于Spring的通过依赖注入将运行时组件串起来。Bus的创建由BusFactory负责默认是 SpringBusFactory对应于默认Bus实现。在构造过程中SpringBusFactory会搜索META-INF/cxf就包含在 CXF的Jar中下的所有Bean配置文件根据它们构建一个ApplicationContext。开发者也可提供自己的配置文件来定制Bus。 2.消息传递和拦截器Interceptor CXF建立于一个通用的消息层之上主要由消息、拦截器和拦截器链InterceptorChain组成。CXF是以消息处理为中心的熟悉 JSP/Servlet的开发者可以将拦截器视为CXF架构中的“Filter”拦截器链也与“FilterChain”类似。通过拦截器开发者可以方便地在消息传递、处理的整个过程中对CXF进行扩展。拦截器的方法主要有两个handleMessage和handleFault分别对应消息处理和错误处理。在开发拦截器的时候需要注意两点 拦截器不是线程安全的不建议在拦截器中定义实例变量并使用它。这一点跟JSP/Servlet中对于Filter的处理是一样的 不要调用下一个拦截器的handleMessage或handleFault这个工作由InterceptorChain来完成。 3.前端Front End 它为CXF提供了创建服务的编程模型当前主要的前端就是JAX-WS。 4.服务模型 CXF中的服务通过服务模型来表示。它主要有两部分ServiceInfo和服务本身。ServiceInfo作用类似WSDL包含接口信息、绑定、端点EndPoint等信息服务则包含了ServiceInfo、数据绑定、拦截器和服务属性等信息。可使用Java类和WSDL来创建服务。一般是由前端负责服务的创建它通过ServiceFactory来完成。 5.绑定Binding 绑定提供了在传输之上映射具体格式和协议的方法主要的两个类是Binding和BindingFactory。BindingFactory负责创建Binding。 6.传输Transport 为了向绑定和前端屏蔽传输细节CXF提供了自己的传输抽象。其中主要有两个对象Conduit和Destination。前者是消息发送的基础后者则对应消息接收。开发者还可以给Conduit和Destination注册MessageObserver以便在消息发送和接收时获得通知。 开发方法 CXF 可以创建的Web 服务应用有两种服务提供者和服务消费者。这种结构可类比客户端/ 服务器结构服务消费者类似于客户端服务提供者类似于服务器。使用CXF 创建应用时服务提供者和服务消费者并不需要同时出现因为有可能应用只是作为服务提供者或服务消费者单独出现。 为了说明使用CXF 如何创建这两种类型的应用本教程将同时给出它们的例子。另外由于Groovy在Java 世界中变得越来越流行本教程会给出使用Groovy 的CXF 插件GroovyWS 的实现例子。例子使用JDK 1.5.X 和Groovy 1.0 完成包含以下几部分 1.User用户对象在消费者和提供者之间传递 2.UserService用户管理服务它提供增加和获取所有用户的功能 3.Client服务消费者它向UserService发起服务请求。 Java 实现的步骤包括以下几点。 服务端包含UserService、UserServiceImpl和User。其中UserService是接口定义UserServiceImpl是它的实现并负责服务的发布服务只有发布之后才能被消费。例子使用了JAX-WS它们的主要内容如下 UserService package server;
import javax.jws.WebService;
WebService
public interface UserService {
void add(User user);
User[] findAllUsers();
} WebService 指明接口是Web 服务 UserServiceImpl import java.util.List;
import java.util.Vector;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;
WebService(endpointInterface server.UserService,
serviceName UserService,
portNameUserServicePort)
public class UserServiceImpl implements UserService {
static ListUser UserRepository new VectorUser();
public void add(User user) {
UserRepository.add(user);
}
public User[] findAllUsers() {
User[] users new User[UserRepository.size()];
UserRepository.toArray(users);
return users;
}
public static void main(String[] args){
UserServiceImpl userService new UserServiceImpl();
Endpoint.publish(http://localhost:9000/userService
, userService);
}
} WebService中的serviceName、portName分别指定了其产生的WSDL中的服务名和端口名。endpointInterface为接口的类名。服务发布代码也可以放在另一个类中。 User package server;
public class User {
String first;
String last;
public String getFirst() {
return first;
}
public void setFirst(String first) {
this.first first;
}
public String getLast() {
return last;
}
public void setLast(String last) {
this.last last;
}
} 2.客户端只有一个类Client其他的User、UserService引用server包中的对象。 package client;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import javax.xml.ws.soap.SOAPBinding;
import server.User;
import server.UserService;
public class Client {
public static void main(String[] arg){
Service service Service.create(
new QName(http://server/
, UserService));
service.addPort(new QName(http://server/
, UserServicePort)
, SOAPBinding.SOAP11HTTP_BINDING
, http://localhost:9000/userService
);
UserService userService service.getPort(UserService.class);
User user new User();
user.setFirst(James);
user.setLast(Bond);
userService.add(user);
User[] users userService.findAllUsers();
for(User u : users){
System.out.println(u.getFirst().u.getLast());
}
}
} 注意QName 的第一个参数指明了WSDL 的目标名字空间可以通过“服务地址?wsdl”方式获取服务的WSDL来查看服务的目标名字空间。对于由CXF 创建的服务目标名字空间的默认构造规则是http:// 包名的倒序/。即如果包名是a.b.c那么名字空间就为http://c.b.a/ 。GroovyWS 的实现步骤包括以下几点。 1.服务端包括User、UserService、User.aegis.xml。由于Groovy类包含一个metaClass属性该属性不应该被序列化在服务端和客户端之间传递User.aegis.xml用来指定将该属性忽略掉。 User package server;
class User {
String first
String last
} UserService package server;
import groovyx.net.ws.WSServer
class UserService {
private static List users new Vector()
void add(User user){
users.add(user)
}
User[] findAllUsers(){
User[] u new User[users.size()]
users.toArray(u)
return u
}
static void main(args) {
def server new WSServer()
server.setNode(server.UserService,
http://localhost:9000/UserService
)
}
} 注意它的发布。 Use.aegis.xml ?xml version1.0 encodingUTF-8?
mappings xmlns:samplehttp://DefaultNamespace
mapping namesample:User
property namemetaClass ignoretrue/
/mapping
/mappings 2.客户端包含Client和User.aegis.xmlUser.aegis.xml的内容和服务端的一样。Client的内容如下 package client;
import groovyx.net.ws.WSClient
class Client {
static void main(args) {
def proxy new WSClient(
http://localhost:9000/UserService?wsdl
, Client.class.classLoader)
def user proxy.create(defaultnamespace.User);
user.firstJames
user.lastBond
proxy.add(user)
def result proxy.findAllUsers()
result.users.each{
println it.first.it.last
}
}
} 相关建议 CXF 的功能特性非常多要熟练使用它非得花些功夫才行。笔者在此给出一些建议期望能对读 者在今后学习和使用CXF 的过程中有所帮助 1.熟悉工具涉及领域的协议是个不错的主意。虽然CXF提供了简化服务创建的编程模型但是如果不了解WS-*协议在遇到问题调试时必然会花不少时间。尤其是在SOA的环境中客户端和服务不一定是使用同一语言、同一工具实现的情况下互操作问题经常是由于对协议的不同支持造成的 2.作为CXF实现内容的一个重点JAX-WS是值得关注的 3.在Java的环境中Spring几乎已经成为开发服务器端应用的首选应重点关注CXF和Spring的配合使用 4.近些年来Java世界的动态语言旋风愈演愈烈。Groovy由于其语法和Java兼容且提供了不少方便的语法吸引了不少Java开发者。更何况新兴的Grails框架逐渐引人注目其前途不可限量。GroovyWS专为Groovy开发且底层就是CXF作为CXF的开发者没有理由不去使用可以使自己生活过得舒适的工具 5.CXF携带了大量的例程它们是熟悉和了解CXF的大门的 6.参与社区参与讨论往往比起自己单干要有用得多。 版本信息 在官方网站上CXF 公布了其2.0.4 版和2.1版的开发计划。2.0.4 版于2008 年1 月15 日发布2.1 版则是2 月28 日发布。2.0.4 版的计划主要是修正2.0.3 版的错误以及工具迁移的问题。2.1 版则引入一些新特性包括 1.支持JAX-WS 2.1包括JAXB 2.1、API中的WS-A、SEI接口方法的JAXB标注、WebServiceFeature标注 2.XmlBeans、JiBX数据绑定 3.新的java2ws工具 4.更好地支持RESTJSR-311 5.支持js 6.OSGi bundling。 除了上述计划有可能包含在2.1 版但是肯定会在2.2 版的特性包括 1.通过继承Yoko 的代码来支持CORBA 2.更好地集成Acegi 3.WS-SecureConversation/Trust 4.其他WS-*协议。 社区视角 在Celtix 和XFire 宣布合并的同年另一个著名开源Web 服务框架Axis 的后继者Axis2 也诞生了。Axis2 并非Axis 的2.0 版而是完全重写了Axis 的新项目。作为功能和背景都极其相似的两个项目人们难免会将它们相提并论。在著名的Java 企业开发站点TheServiceSide 上就有一篇名为“Axis, Axis2 and CXF: Survey theWS Landscape”地址http://www.theserverside.com/tt/articles/content/AxisAxis2andCXF/article.html 的文章对这两个项目进行了比较主要内容如下。 1.在特性方面 C X F 支持W S - A d d r e s s i n g 、W S -Policy、WS-RM、WS-Security和WS-I BasicProfile。Axis2支持除了WSPolicy之外的所有这些标准WS-Policy预计会在未来版本中得到支持 CXF可以方便地和Spring集成在一起Axis2不行; Axis2支持范围更广的数据绑定包括XMLBeans、JiBX、JaxMe、JaxBRI以及它自己的数据绑定ADB。在 Axis21.2 版中JaxME和JaxBRI尚处于试验阶段。目前C X F只支持J A X B和Aegis对XMLBeans、JiBX和Castor的支持将在CXF 2.1版中实现 Axis2支持多语言除了Java版本尚有C/C版本。 2.在开发方面 Axis2更像一个微型服务器。Axis2被打包成一个WAR可部署到任何Servlet容器中为了更方便地在运行中管理和部署服务进行专门的设计。 CXF更专注于对开发人员友好及可嵌入性。大部分配置只需使用API即可完成与Spring紧密集成。CXF强调代码优先的服务开发方式。 3.建议如果需要多语言支持那么就采用Axis2如果考虑到使用Java、与Spring集成或将服务嵌入到其他程序中那么CXF更好。 当然并不是所有人都说好。例如在国内的一些论坛上就有开发者抱怨CXF 的入门比起XFire 来要复杂得多。这是可以理解的毕竟CXF本身也比XFire 要复杂得多。为了帮助Celtix 和XFire 的开发者向新工具的迁移其官方网站也提供了相应的迁移指南。另外一个常见的问题是和Spring AOP 相关的如事务、安全这在官方网站的FAQ 中也有说明。
文章转载自: http://www.morning.ptzf.cn.gov.cn.ptzf.cn http://www.morning.bgygx.cn.gov.cn.bgygx.cn http://www.morning.jbztm.cn.gov.cn.jbztm.cn http://www.morning.htbsk.cn.gov.cn.htbsk.cn http://www.morning.ddqdl.cn.gov.cn.ddqdl.cn http://www.morning.ltywr.cn.gov.cn.ltywr.cn http://www.morning.pdmc.cn.gov.cn.pdmc.cn http://www.morning.znmwb.cn.gov.cn.znmwb.cn http://www.morning.zxybw.cn.gov.cn.zxybw.cn http://www.morning.xrtsx.cn.gov.cn.xrtsx.cn http://www.morning.fqpyj.cn.gov.cn.fqpyj.cn http://www.morning.fkmyq.cn.gov.cn.fkmyq.cn http://www.morning.qydgk.cn.gov.cn.qydgk.cn http://www.morning.zrkws.cn.gov.cn.zrkws.cn http://www.morning.knryp.cn.gov.cn.knryp.cn http://www.morning.nptls.cn.gov.cn.nptls.cn http://www.morning.gtcym.cn.gov.cn.gtcym.cn http://www.morning.qzglh.cn.gov.cn.qzglh.cn http://www.morning.lysrt.cn.gov.cn.lysrt.cn http://www.morning.bfmq.cn.gov.cn.bfmq.cn http://www.morning.zwckz.cn.gov.cn.zwckz.cn http://www.morning.jjmrx.cn.gov.cn.jjmrx.cn http://www.morning.lpyjq.cn.gov.cn.lpyjq.cn http://www.morning.nytgk.cn.gov.cn.nytgk.cn http://www.morning.tkyry.cn.gov.cn.tkyry.cn http://www.morning.rmfwh.cn.gov.cn.rmfwh.cn http://www.morning.hxlpm.cn.gov.cn.hxlpm.cn http://www.morning.fqssx.cn.gov.cn.fqssx.cn http://www.morning.cqwb25.cn.gov.cn.cqwb25.cn http://www.morning.bpmz.cn.gov.cn.bpmz.cn http://www.morning.sgbjh.cn.gov.cn.sgbjh.cn http://www.morning.pzjrm.cn.gov.cn.pzjrm.cn http://www.morning.zntf.cn.gov.cn.zntf.cn http://www.morning.rbsxf.cn.gov.cn.rbsxf.cn http://www.morning.jhgxh.cn.gov.cn.jhgxh.cn http://www.morning.dsxgc.cn.gov.cn.dsxgc.cn http://www.morning.nktgj.cn.gov.cn.nktgj.cn http://www.morning.nkrmh.cn.gov.cn.nkrmh.cn http://www.morning.pshpx.cn.gov.cn.pshpx.cn http://www.morning.lwqst.cn.gov.cn.lwqst.cn http://www.morning.dtzxf.cn.gov.cn.dtzxf.cn http://www.morning.hxftm.cn.gov.cn.hxftm.cn http://www.morning.qdsmile.cn.gov.cn.qdsmile.cn http://www.morning.aa1585.com.gov.cn.aa1585.com http://www.morning.nwynx.cn.gov.cn.nwynx.cn http://www.morning.zdzgf.cn.gov.cn.zdzgf.cn http://www.morning.wlgpz.cn.gov.cn.wlgpz.cn http://www.morning.nsncq.cn.gov.cn.nsncq.cn http://www.morning.grynb.cn.gov.cn.grynb.cn http://www.morning.ttfh.cn.gov.cn.ttfh.cn http://www.morning.pwdmz.cn.gov.cn.pwdmz.cn http://www.morning.mlyq.cn.gov.cn.mlyq.cn http://www.morning.mprpx.cn.gov.cn.mprpx.cn http://www.morning.bfycr.cn.gov.cn.bfycr.cn http://www.morning.ktdqu.cn.gov.cn.ktdqu.cn http://www.morning.rblqk.cn.gov.cn.rblqk.cn http://www.morning.bcngs.cn.gov.cn.bcngs.cn http://www.morning.xylxm.cn.gov.cn.xylxm.cn http://www.morning.wjhqd.cn.gov.cn.wjhqd.cn http://www.morning.cwzzr.cn.gov.cn.cwzzr.cn http://www.morning.lfdzr.cn.gov.cn.lfdzr.cn http://www.morning.qpqcq.cn.gov.cn.qpqcq.cn http://www.morning.yltyr.cn.gov.cn.yltyr.cn http://www.morning.kjkml.cn.gov.cn.kjkml.cn http://www.morning.zmnyj.cn.gov.cn.zmnyj.cn http://www.morning.shxmr.cn.gov.cn.shxmr.cn http://www.morning.gycyt.cn.gov.cn.gycyt.cn http://www.morning.nclbk.cn.gov.cn.nclbk.cn http://www.morning.pdmsj.cn.gov.cn.pdmsj.cn http://www.morning.ynstj.cn.gov.cn.ynstj.cn http://www.morning.wncb.cn.gov.cn.wncb.cn http://www.morning.nqrdx.cn.gov.cn.nqrdx.cn http://www.morning.snzgg.cn.gov.cn.snzgg.cn http://www.morning.qxmnf.cn.gov.cn.qxmnf.cn http://www.morning.nlgyq.cn.gov.cn.nlgyq.cn http://www.morning.frmmp.cn.gov.cn.frmmp.cn http://www.morning.mflhr.cn.gov.cn.mflhr.cn http://www.morning.hnmbq.cn.gov.cn.hnmbq.cn http://www.morning.gmplp.cn.gov.cn.gmplp.cn http://www.morning.junyaod.com.gov.cn.junyaod.com