WebService之CXF使用
1、CXF框架概念介绍
Apache CXF 是一个开源的 WebService 框架,CXF可以用来构建和开发 WebService,这些服务可以支持多种协议,比如:SOAP、POST/HTTP、HTTP ,CXF 大大简化了WebService并且可以天然地和 Spring 进行无缝集成。CXF是 Celtrix (ESB框架)和 XFire(webserivice) 合并而成,核心是org.apache.cxf.Bus(总线),类似于Spring的 ApplicationContext,CXF默认是依赖于Spring的,另 CXF 发行包中的jar,如果全部放到lib中,需要 JDK1.6 及以上,否则会报JAX-WS版本不一致的问题。CXF 内置了Jetty服务器 ,它是servlet容器。
2、CXF框架特点
- 与Spring、Servlet做了无缝对接,cxf框架里面集成了Servlet容器Jetty
- 支持注解的方式来发布webservice
- 能够显示一个webservice的服务列表
- 能够添加拦截器:输入拦截器、输出拦截器 :输入日志信息拦截器、输出日志拦截器、用户权限认证的拦截器
3、用CXF完成接口调用
利用wsdl2java工具生成webservice的客户端代码
3.1. 要有JDK环境
3.2. 载安装apache-cxf

3.3. 解压安装包,设置CXF_HOME:解压后的文件路径

3.4.设置PATH:%CXF_HOME%\bin

3.5.验证:CMD命令行(管理员权限)输入wsdl2java -help,有正常提示说明环境已经正确配置

3.6.解析WSDL文件(保存在线WebService接口(ctrl+s)为CreateNMSF.wsdl)

3.7.运行命令解析
wsdl2java -keep -verbose -encoding utf-8 CreateNMSF.wsdl

3.8.把多出来的两个目录加入到我们工程中


4、测试
@Testvoid test() {/*** 通过认证(调用的时候只需要在调用接口之前调用执行该方法即可:)* 最后是用 Java.Net的Authenticator类 把Username和Password直接投过去(他之后对位流的处理遵守http的basic身份验证机制)*/Authenticator.setDefault(new Authenticator() {@Overrideprotected PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication("demo","1qaz2wsx".toCharArray());}});SICreateNMSFOutSynService siCreateNMSFOutSynService = new SICreateNMSFOutSynService();SICreateNMSFOutSyn siCreateNMSFOutSyn = siCreateNMSFOutSynService.getHTTPPort();MESSAGEHEADER messageheader = new MESSAGEHEADER();// 接口标识messageheader.setINTERFACEID("");// 相关标识messageheader.setCORRELATIONID("");// 货物移动抬头数据ZISMMKPF zismmkpf = new ZISMMKPF();// GM代码zismmkpf.setGMCODE("03");// 凭证中的凭证日期zismmkpf.setBLDAT("2023-08-07");// 凭证中的过账日期zismmkpf.setBUDAT("2023-08-07");// 用户名zismmkpf.setUNAME("");// 凭证抬头文本zismmkpf.setBKTXT("");// 移动类型(库存管理)zismmkpf.setBWART("");// 工厂zismmkpf.setWERKS("");// G/L科目号zismmkpf.setKONTO("");// 成本中心zismmkpf.setKOSTL("");// 收货方zismmkpf.setWEMPF("");// 主资产号zismmkpf.setANLN1("");// 销售订单数zismmkpf.setKDAUF("");// 采购凭证编号zismmkpf.setEBELN("");// 订单编号zismmkpf.setAUFNR("");// 预留/相关需求的编号zismmkpf.setRSNUM("");// 客户的帐户编号zismmkpf.setKUNNR("");// 供应商帐户号zismmkpf.setLIFNR("");// 特殊库存标识zismmkpf.setSOBKZ("");// 收货工厂/发货工厂zismmkpf.setUMWRK("");// 收货/发货库存地点zismmkpf.setUMLGO("");// 货物移动行项目数据ZITFGOODSMVTCREATE.ITMSEG itmseg = new ZITFGOODSMVTCREATE.ITMSEG();ZISMMSEG zismmseg = new ZISMMSEG();// 物料编号zismmseg.setMATNR("01001");// 工厂zismmseg.setWERKS("");// 存储位置zismmseg.setLGORT("");// 批号zismmseg.setCHARG("");// 特殊库存标识zismmseg.setSOBKZ("");// 移动类型(库存管理)zismmseg.setBWART("");// 以录入项单位表示的数量BigDecimal bigDecimal = BigDecimal.valueOf(10);zismmseg.setERFMG(bigDecimal);// 条目单位zismmseg.setERFME("");// 订单编号zismmseg.setAUFNR("");// 订单项目编号zismmseg.setPOSNR("");// 销售订单数zismmseg.setKDAUF("");// 销售订单中的项目编号zismmseg.setKDPOS("");// 采购订单号zismmseg.setEBELN("");// 采购凭证的项目编号zismmseg.setEBELP("");// 采购订单数量(无值填0)BigDecimal zero = BigDecimal.ZERO;zismmseg.setMENGE(zero);// 采购订单计量单位zismmseg.setMEINS("");// 凭证口采用的项目zismmseg.setTAKEIT("");// 收货方zismmseg.setWEMPF("");// 预留/相关需求的编号zismmseg.setRSNUM("");// 预留 / 相关需求的项目编号zismmseg.setRSPOS("");itmseg.getItem().add(zismmseg);ZITFGOODSMVTCREATE zitfgoodsmvtcreate = new ZITFGOODSMVTCREATE();zitfgoodsmvtcreate.setMESSAGEHEADER(messageheader);// 流程编号zitfgoodsmvtcreate.setFLOWID("");// 是否测试运行,X测试,''执行zitfgoodsmvtcreate.setITESTRUN("X");// 关联的SAP创建人账号zitfgoodsmvtcreate.setERNAM("");// 货物移动抬头数据zitfgoodsmvtcreate.setIMKPF(zismmkpf);// 货物移动行项目数据zitfgoodsmvtcreate.setITMSEG(itmseg);ZITFGOODSMVTCREATEResponse zitfgoodsmvtcreateResponse = siCreateNMSFOutSyn.siCreateNMSFOutSyn(zitfgoodsmvtcreate);String msgtype = zitfgoodsmvtcreateResponse.getMSGTYPE();String message = zitfgoodsmvtcreateResponse.getMESSAGE();String matdoc = zitfgoodsmvtcreateResponse.getMATDOC();String format = String.format("msgtype=%s, message=%s, matdoc=%s", msgtype, message, matdoc);System.out.println(format);}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
