WebService之CXF使用

本文介绍了ApacheCXF框架的概念、特点,包括与Spring和Servlet的集成,以及如何使用wsdl2java工具生成客户端代码并实现接口调用,包括认证和数据处理示例。
摘要由CSDN通过智能技术生成

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

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

图片.png

3.4.设置PATH:%CXF_HOME%\bin

图片.png

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

图片.png

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

图片.png

图片.png

3.7.运行命令解析

wsdl2java -keep -verbose -encoding utf-8 CreateNMSF.wsdl

图片.png

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

图片.png

图片.png

图片.png

4、测试

    @Test
        void test() {
            /**
             * 通过认证(调用的时候只需要在调用接口之前调用执行该方法即可:)
             * 最后是用 Java.Net的Authenticator类 把Username和Password直接投过去(他之后对位流的处理遵守http的basic身份验证机制)
             */
            Authenticator.setDefault(new Authenticator() {
                @Override
                protected 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);
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值