cxf soap返回_cxf 解析调用外部soap类型的webservice

一、可用的请求wsdl的webservice路径

服务器提供一个外部可调用的webservice的wsdl路径,在浏览器中可直接反问道wsdl文件,在soapUI中可测试每个请求的有效的路径(该webservice是已发布可工外部调用的有效请求)

二、下载配置Apache CXF提供的生成Client的工具

1.下载:

http://cxf.apache.org/download.html官网 下载apache-cxf-3.0.10.zip(或者别的压缩包,建议使用较新的工具包),将下载到的zip解压到本地某个文件下,如我解压到D盘的tool文件夹下

2.配置环境变量:

将cxf所在路径配置到环境变量中,如CXF_HOME=D:\tools\apache-cxf-3.0.10,在Path变量中添加;%CXF_HOME%\bin(讲cxf的bin目录配置到path中)。

运行cmd dos命令,输入wsdl2java -v,输出为wsdl2java - Apache CXF 3.0.10这种版本信息表示安装配置成功,否则则可能安装失败

三、使用wsdl2java的命令生成客户端代码

1,简单使用命令生成代码到某目录下:

可在本地手动切换到需要生成代码的目录下,在路径中输入cmd回车即转到该目录下——》wsdl2java  -p '包名'  -encoding UTF-8 https://XXX.XX.XXXService?wsdl 回车即可生成

-p 生成代码放置的包,命令中建议加上,方便直接放到项目目录下,默认的包可能不符java包的命名规则(如可能生成以java、org等包)

-encoding 建议加上,不指定编码可能导致生成的文件产生编码冲突的错误而无法直接使用

-autoNameResolution当有两个或者多个wsdl需要生成到同一个目录下时,再次运行命令行需加入此参数,否则会提示“具有相同名称 "DemandBeginResponse" 的类/接口已在使用。请使用类定制设置来解决此冲突。”,无法正常生成

四、使用难点

cxf所依赖的包比较坑爹,包引用的版本不对会出现非常多的问题

(ws的插件可以使用比较新的版本)

org.jvnet.jax-ws-commons

jaxws-maven-plugin

2.3.1-b03

javax.xml

webservices-api

2.0

${project.build.directory}/generated-sources/jaxws-wsimport

true

true

true

${basedir}/src/jax-ws-catalog.xml

cxf的jar包依赖的版本如果出现问题会导致各种奇怪的报错:(因为cxf2.3.3所依赖的cxf-rt-frontend-jaxws、cxf-rt-transports-http-jetty都是2.2以上,如果这两个包是2.1hi报错)

2.2.3

org.apache.cxf

cxf

2.3.3

pom

org.apache.cxf

cxf-rt-frontend-jaxws

${cxf.version}

org.apache.cxf

cxf-rt-transports-http

${cxf.version}

org.apache.cxf

cxf-rt-transports-http-jetty

${cxf.version}

jaxb-api使用的版本也不可过高

javax.xml.bind

jaxb-api

2.2.12

五、成功案例

通过三生成的service可直接调用(XXXservice的注解为@WebServiceClient,注释中各种需要的参数都是已经生成的)

XXXService service=new XXXService(XXX.Service.WSDL_LOCATION);//WSDL_LOCATION是生成的类中已经赋值的路径http://XXX.XXX.XXService?wsdl

XXXPortType port=service.getXXXEndpoint();

//如果请求的wsdl有Bisic Authentication的认证,需要加下面这段

((BindingProvider) port).getRequestContext().put(BindingProvider.USERNAME_PROPERTY, "username");

((BindingProvider) port).getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, "password");

//然后直接调用port中的方法,即可拿到数据

port.getCaptcha().getImagePath().getValue();

---------------------wso2

忘记密码:

getUserList("",18666666666,null)

有用户名,验证验证码

VerificationBean ver = user.verifyUser(userName, null);

VerificationBean ver2 = user.sendRecoveryNotification(userName, ver.key, "");

VerificationBean ver3 = user.verifyConfirmationCode(userName, ver2.notificationData.notificationCode, null);

VerificationBean ver4 = user.updatePassword(userName, ver3.key, password);

修改密码:

updateCredential

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值