soapui调用接口参数传递嵌套xml,多层CDATA表达形式验证

news2024/9/19 11:21:27

1.环境信息

开发工具:idea

接口测试工具:soapui

编程语言:java

项目环境:jdk1.8

webservice:jdk自带的jws

处理xml:jdk自带的jaxb

2.涉及代码

package org.example.webdemo;

import javax.jws.WebMethod;
import javax.jws.WebService;

@WebService
public interface JaxbWebService {
    @WebMethod
    public String dealXml(String xml);
}
package org.example.webdemo;
import javax.jws.WebService;

@WebService
public class JaxbWebServiceImpl implements JaxbWebService {
    @Override
    public String dealXml(String xml) {
        String result ="";
        if(xml !=null && xml.length()!=0){
            RootBean rootBean = (RootBean)JaxbUtil.convertXmlToObject(xml, RootBean.class);
            String bussinessBody = rootBean.getBody();
            BussinessBean bussinessBean = (BussinessBean)JaxbUtil.convertXmlToObject(bussinessBody, BussinessBean.class);
            result = bussinessBean.getName();
            System.out.println(String.format("成功获取到第二层的标签name的值:%s",result));
        }
        return result;
    }
}
package org.example.webdemo;
import lombok.extern.slf4j.Slf4j;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Unmarshaller;
import java.io.StringReader;

@Slf4j
public class JaxbUtil {
    public static Object convertXmlToObject(String xml,Class<?> clazz) {
        Object xmlObj = null;
        try {
            JAXBContext context = JAXBContext.newInstance(clazz);
            Unmarshaller unmarshaller = context.createUnmarshaller();
            StringReader sReader = new StringReader(xml);
            xmlObj = unmarshaller.unmarshal(sReader);
        } catch (Exception e) {
            log.error("Xml转换对象失败", e);
        }
        return xmlObj;
    }
}
package org.example.webdemo;
import lombok.Data;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@Data
@XmlRootElement(name = "Root")
@XmlAccessorType(XmlAccessType.FIELD)
public class RootBean {
    @XmlElement(name = "Body")
    public String body;
}
package org.example.webdemo;
import lombok.Data;
import javax.xml.bind.annotation.*;

@Data
@XmlRootElement(name = "Bussiness")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(propOrder = { "name", "action"})
public class BussinessBean {
    @XmlElement(name = "Name")
    public  String name;
    @XmlElement(name = "Action")
    public  String action;
}
package org.example.webdemo;
import javax.xml.ws.Endpoint;

public class JaxbWebServicePublish {
    public static void main(String[] args) {
        Endpoint.publish("http://localhost:8080/websevice",new JaxbWebServiceImpl());
    }
}

3.测试验证

  3.1启动 webservice服务

     

3.2 soapui调用接口

    3.2.1 传递报文信息

<![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<Root>
    <Body><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
    <Bussiness>
     <Name>xiaoming</Name>
     <Action>run</Action>
    </Bussiness>]]]]>><![CDATA[</Body></Root>]]>

    3.2.2 soapui工具调用接口

      

4.最终总结

   4.1 传递参数的xml声明行前面存在换行或空格出错

      声明行:<?xml version="1.0" encoding="UTF-8"?>

     根节点的上面这个声明行不允许出现空格与空行,如果出现空行或空格后端会解析出错。

      4.1.1 复现问题

  

拿到的报文在xmlspy验证也不通过的

 4.2 CDATA标签不匹配导致解析失败

  4.2.1复现问题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2039898.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python,Spire.Doc模块,处理word、docx文件,极致丝滑

Python处理word文件&#xff0c;一般都是推荐的Python-docx&#xff0c;但是只写出一个&#xff0c;一句话的文件&#xff0c;也没有什么样式&#xff0c;就是36K。 再打开word在另存一下&#xff0c;就可以到7-8k&#xff0c;我想一定是python-docx的问题&#xff0c;但一直没…

汽车免拆诊断案例 | DAF(达富)汽油尾气处理液故障警示

故障现象 距离我上次在货卡上工作已经有一段时间了&#xff0c;让它们在道路上保持安全行驶是非常重要的。因此&#xff0c;当故障警示灯亮起时&#xff0c;我们需要迅速找到问题方向以及排除故障。 车辆的仪表板亮起多个故障灯以及警示灯&#xff0c;我们需要用解码器查找触…

数据分析与应用:微信-情人节红包流向探索分析

目录 0 需求描述 1 红包发送方用户的基本信息缺失率有多高?(即有多少红包发送方用户无法在用户基本信息表中匹配? 2 哪一组红包金额的拒收率最高? 3、最受二线城市欢迎的红包金额为?(即发出次数最多) 4 北上广深 4 大城市中,哪座城市的男性用户发出的 520 红包比例…

《密码编码学与网络安全原理与实践》第十四章第十五章密钥管理和用户认证

密钥管理与分发 密钥分发管理 传统上&#xff0c;对称加密被用于实现消息的保密性&#xff08;confidentiality&#xff09; 面临的攻击&#xff1a;局域网内监听、搭线窃听 传输媒介&#xff1a;线缆(双绞线、同轴电缆、光纤) (电磁波干扰)、微波链路、卫星信道 保密通信…

windows11-ubuntu-可爱的截图-启动时按F2可以选简体中文

windows11-ubuntu-可爱的截图-启动时按F2可以选简体中文

c++ 46 const

const伪命题 可以间接修改

Java-自定义注解中成员变量是Class<?>

在Java中,自定义注解可以包含各种类型的成员变量,包括 Class<?> 类型。这种类型的成员变量 通常用于表示某个类的类型信息。下面我将详细介绍如何定义一个包含 Class<?> 类型成员变量的 自定义注解,并给出一些示例代码。 1. 定义自定义注解 定义一个自定义…

jmeter使用while控制器时防止死循环

while 控制器&#xff1a;当前条件为true会一直循环&#xff0c;直到条件为false时退出循环 如果环境出现问题&#xff0c;可能导致死循环&#xff0c;需要进行设置 本次结合计时器进行组合配置&#xff0c;防止死循环 配置while控制器 条件&#xff1a;${__jexl3("${i…

libnl教程(2):发送请求

文章目录 前言示例示例代码构造请求创建套接字发送请求 简化示例 前言 前置阅读要求&#xff1a;libnl教程(1):订阅内核的netlink广播通知 本文介绍&#xff0c;libnl如何向内核发送请求。这包含三个部分&#xff1a;构建请求&#xff1b;创建套接字&#xff1b;发送请求。 …

milvus helm k8s开启监控

https://milvus.io/docs/monitor.md 文章写的很清晰 &#xff0c;我这边做一下个人补充&#xff0c;初版可能只是配置&#xff0c;具体的grafana 监控报表后期补一下。 架构如下&#xff1a; values.yaml 配置 enabled: true 改为true metrics:enabled: trueserviceMonitor:…

F.Enchanted

https://codeforces.com/gym/105139/problem/F24湖北省赛F 看了一下前面两种操作&#xff0c;做法不是很明显 后面两种操作&#xff0c;一看就是可持久化线段树&#xff0c;单点修改&#xff0c;版本复制 接下来解决前面的两种操作 第一个操作 两个相同的合成一个新的(33-&…

Linux基础-磁盘管理

基于Ubuntu 20.04环境测试验证。 一、磁盘空间查看 1.1 磁盘分区管理 - fdisk fdisk通常被用来查看系统磁盘的分区信息&#xff0c;同时fdisk也支持对磁盘空间进行分区&#xff08;下一章节介绍&#xff09;。 命令参数&#xff1a; Usage:fdisk [options] <disk> …

科普----Linux的前世今生

提到电脑的操作系统 相信大多数人会脱口而出&#xff1a;Windows&#xff01;MacOS&#xff01; 没错&#xff0c;这确实是目前市场上主流的两款操作系统。 但对于从事IT相关工作的人们来说&#xff0c;还有一种系统也必须拥有姓名 那就是Linux 看到这个词&#xff0c;大家…

unity游戏开发003:深入理解Unity中的坐标系

Unity游戏开发 “好读书&#xff0c;不求甚解&#xff1b;每有会意&#xff0c;便欣然忘食。” 本文目录&#xff1a; Unity游戏开发 Unity游戏开发深入理解Unity中的坐标系前言1. 坐标轴2. 左手坐标系3. 世界坐标系 vs. 局部坐标系4. 坐标变换5. 注意事项 总结 深入理解Unity中…

虚幻5|简单装备武器

一&#xff0c;首先我们要创建一个actor蓝图类 打开组件添加一个静态网格体&#xff0c;点击该组件&#xff0c;右侧细节找到网格体资产&#xff0c;选择需要的武器 三&#xff0c;打开角色的骨骼网格体&#xff0c;添加武器插槽 这个有些动作包里的骨骼网格体是加了骨骼&…

10 - Linux系统安全及应用

目录 一、账号安全控制 1.系统账号清理 2.密码安全控制 3.命令历史限制 4.终端自动注销 二、用户切换和用户提权 1. su 命令 - 切换用户 1.1 su 命令的用途及用法 1.2 限制使用su 命令的用户 1.3 查看su操作记录 2. sudo 命令 - 用户提权 2.1 sudo 命令的用途及用法…

Unity转Unreal5从入门到精通之如何实现一个简单的AI寻路

前言 我们今天使用最基础的引擎知识&#xff0c;来给大家创建一个简单的AI&#xff0c;可以追踪目标&#xff0c;攻击目标。 使用Unity类比的话&#xff0c;就是一个怪物预制体&#xff0c;放到了寻路上&#xff0c;当他视野看到目标后&#xff0c;就一直追踪目标&#xff0c;…

转账记录是怎样使用ZK实现证明的

目录 转账记录是怎样使用ZK实现证明的 1. 准备阶段 2. 生成证明 3. 转账记录的验证过程 4. 隐私保护 5. 应用场景 结论 转账记录是怎样使用ZK实现证明的 转账记录使用ZK(零知识证明)实现证明的过程,主要依赖于零知识证明技术中的协议,如ZK-SNARKs(Zero-Knowledge S…

72、docker资源管理

一、docker数据卷 容器和宿主机之间数据共享-----------挂载卷------------容器内的目录和宿主机的目录进行挂载。实现数据文件共享。 容器的生命周期是有限的&#xff0c;一旦重启所有对容器内部文件数据的修改以及保存的数据会被初始化&#xff0c;所以为了防止数据丢失&am…

Java语言程序设计基础篇_编程练习题16.22(播放、循环播放和停止播放一个音频剪辑)

题目&#xff1a;16.22&#xff08;播放、循环播放和停止播放一个音频剪辑&#xff09; 编写一个满足下面要求的程序&#xff1a; 使用AudioClip获取一个音频文件&#xff0c;该文件存放在类目录下。放置三个标记为Play、Loop和Stop的按钮&#xff0c;如图16-46a所示。单击Pla…