【webservice】cxf多种调用webservice服务的方式
本文已经同步发布到新博客:http://fengchenluoyu.duapp.com/ 要调用已经发布的webservice服务,cxf有多种调用方式,现例举几种,留作参考!获取版本包和获取wsdl2java文件都可以通过官方网站apache cxf下载!
1、利用wadl2java生成客户端调用,此方法最符合面向对象原理!适用范围最广,只有wsdl文件,只拥有服务访问地址,不知道接口定义等都能够胜任。首先生成客户端(window下生成):进入下载的cxf包的bin目录下,然后cmd到此目录下: 指令:
参数说明: -p 也就是package 对应生成之后java文件中的包名称 -d 输入目录,生成.java文件会在该目录,会自动添加-p参数配置的包路径 -client 生成客户端测试web service的代码. -server 生成服务器启动web service的代码. -impl 生成web service的实现代码. -ant 生成build.xml文件. -all 生成上面-client -server -impl -ant 对应的所有文件. ?生成之后?能够发现会在这个目录下生成一些*_client.java的文件,打开它,原来里面都是main方法,都给出示例了。这也是能够执行的方法,跑一下main写入正确的地址,能够访问到则表示调用成功了。 ?
2、动态生成客户端方式(JaxWsDynamicClientFactory),适用于有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
(
"http://localhost:8080/facelook/services/facelookWebService?wsdl"
)
;
??
//url为调用webService的wsdl地址??
????????
QName
name
=
new
QName
(
"http://server.webservice.facelook.com/"
,
"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
(
)
)
;
??
}
|
说明:namespace 必须写上,获取位置为wsdl描叙文件 <wsdl:definitions ?节点的?targetNamespace 属性值!
?
?3、通过ClientProxyFactoryBean生成动态生成服务的方式,适用自己发布自己调用,需要知道class和url方式。
以上为常用到的3种调用方式,本人不才,如果还有请大家不吝赐教!谢谢!!
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!