包含webservicecxf的词条
基于CXF的WebService服务
CXF是Apache的一个开源框架,使用它可以发布一个类服务,其他应用程序可以调用接口,以下是我搭建webservice服务的步骤,主要是与spring整合搭建,用的是cxf 3.x和spring 4.x。
这里需要说明的一点是cxf-core包在2.x版本中命名为cxf-rt-core,低版本的spring用的都是cxf-rt-core,刚开始我引的包也是这个,maven库中维护到2.7版之后这个包就以cxf-core的命名开始3.x的版本维护,由于与其他包的版本冲突造成服务一直搭不起来,浪费了很多时间。
引入cxf.jaxws jar包

什么叫做基于cxf的webservice
Apache CXF是一个开源的Service框架,可以用于简化用户的service开发,基于CXF开发的应用可提供SOAP、XML/HTTP、RESTFUL HTTP或CORBA等服务。CXF底层页可以使用不同的传输协议,包括HTTP、JMS或JBI等。
根据CXF官方的说明,CXF包含以下特性:
支持大量的Web Service标准,包括SOAP、WS-I Basic Profile、WSDL、WS-Addressing、WS-Policy、WS-ReliableMessaging和WS-Security。
CXF支持大量的前端(frontend)编程模型。CXF实现了标准的JAX-WS API,它也包括一种被称为简单前端(simple frontend)的模型,这种模型无需annotation支持。
cxf如何创建webservice客户端
public static void main(String[] args) throws Exception {
//这个是用cxf 客户端访问cxf部署的webservice服务
//千万记住,访问cxf的webservice必须加上namespace ,否则通不过
//现在又另外一个问题,传递过去的参数服务端接收不到
JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
org.apache.cxf.endpoint.Client client = dcf.createClient("");
//url为调用webService的wsdl地址
QName name=new QName("","getAlbumList");
//namespace是命名空间,methodName是方法名
String xmlStr = "?xml version=\"1.0\" encoding=\"UTF-8\"?"
+ " facelook"
+ " condition"
+ " name家/name"
+ " description/description"
+ " pageno/pageno"
+ " pagesize/pagesize"
+ " /condition"
+ " /facelook";
//paramvalue为参数值
Object[] objects=client.invoke(name,xmlStr);
//调用web Service//输出调用结果
System.out.println(objects[0].toString());
}
如何使用CXF调用webservice接口
axis的接口生成的是wsdl cxf的接口wsdl或wadl都可以 看生成的是wsdl还是wadl、wsdl用JaxWsDynamicClientFactory这种方式 wadl用httpclient就可以 工具的话可以用soapui直接调用
WebService CXF 怎么设置 timeout
由于用CXF构建的webservice使用的是spring配置方式很简单
但是由于客户端使用jaxws:client方式请求的,这个请求方式不能直接配置timeout的
用spring配置jaxws客户端请求的的配置:
Xml代码
jaxws:client id="" serviceClass="" address="" /
如果使用这种方式配置直接有timeout属性
Xml代码
http-conf:conduit
http-conf:client ConnectionTimeout="30000"/
/http-conf:conduit
那我们继续使用jaxws:client配置方式如何设置timeout呢?
只需在我们调用web service的代码之处加上:
Java代码
long timeout = 10000L;
client = ClientProxy.getClient(对应spring配置文件里你配置的clientid);
if (client != null) {
HTTPConduit conduit = (HTTPConduit) client.getConduit();
HTTPClientPolicy policy = new HTTPClientPolicy();
policy.setConnectionTimeout(timeout);
policy.setReceiveTimeout(timeout);
conduit.setClient(policy);
}
web services和cxf的区别
新一代的 Web Services 框架如 Axis2、CXF 都是由现有的项目中逐渐演化而来的,Axis2 是由大家熟悉的 Axis 1.x 系列演化过来,而 Apache CXF 则是由 Celtix 和 XFire 项目整合而生,并且刚刚发布了 2.0.2 的最新版本,不过仍是 Apache 的一个孵.