欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > soapui调用接口参数传递嵌套xml,多层CDATA表达形式验证

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

2024/10/25 2:25:26 来源:https://blog.csdn.net/qq_16170703/article/details/141092863  浏览:    关键词:soapui调用接口参数传递嵌套xml,多层CDATA表达形式验证

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 {@WebMethodpublic String dealXml(String xml);
}
package org.example.webdemo;
import javax.jws.WebService;@WebService
public class JaxbWebServiceImpl implements JaxbWebService {@Overridepublic 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复现问题

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com