package com.asiainfo.soaptransform;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
public class SoapUtil {
public static void main(String[]args){
String soap ="<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:acc=\"http://www.huawei.com/bme/cbsinterface/cbs/accountmgrmsg\" xmlns:com=\"http://www.huawei.com/bme/cbsinterface/common\" xmlns:acc1=\"http://www.huawei.com/bme/cbsinterface/cbs/accountmgr\"><soapenv:Header/><soapenv:Body><acc:adjustAccountRequestMsg><requestHeader><com:commandId>AdjustAccountRequest</com:commandId><com:version>1</com:version><com:TransactionId>a2012022322</com:TransactionId><com:SequenceId>2012022322</com:SequenceId><com:requestType>Event</com:requestType><com:serialNo>2012022322</com:serialNo></requestHeader><adjustAccountRequest><acc1:subscriberNo>13326461658 </acc1:subscriberNo><acc1:OperateType>1</acc1:OperateType><acc1:modifyAcctFeeList><acc1:modifyAcctFee><acc1:accountType>2000</acc1:accountType><acc1:CurrAcctChgAmt>-2000</acc1:CurrAcctChgAmt></acc1:modifyAcctFee></acc1:modifyAcctFeeList></adjustAccountRequest></acc:adjustAccountRequestMsg></soapenv:Body></soapenv:Envelope>"; //初始化报文,调用parse方法,获得结果map,然后按照需求取得字段,或者转化为其他格式
String soapText;
try {
soapText = new SoapUtil().parse(soap);//soap转换入口
System.out.println("变更后的soap="+soapText);
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//报文转换
public String parse(String soap) throws DocumentException{
Document doc = DocumentHelper.parseText(soap);//报文转成doc对象
Element root = doc.getRootElement();//获取根元素,准备递归解析这个XML树
//chageSoap(root,doc);//soap报文转换,不包含前缀名字空间,和默认名字空间
chageSoapWithPrefix(root,doc);//soap报文转换,包含前缀名字空间,和默认名字空间
String soapText = doc.asXML();//Document转String
return soapText;
}
//soap报文转换,不含前缀名字空间,和默认名字空间
@SuppressWarnings({"unchecked"})
public void chageSoap(Element root,Document doc){
if(root.elements()!=null){
List<Element>list = root.elements();//如果当前跟节点有子节点,找到子节点
for(Element e:list){//遍历每个节点
if(e.elements().size()>0){//非叶子节点,即有子节点
//System.out.println("前缀"+e.getNamespacePrefix());
String newNode=decapitalize(e.getName());//首字母小写转大写转换
e.setName(newNode);//修改当前节点
//System.out.println(e.getName()+"========"+newNode);
chageSoap(e,doc);//当前节点不为空的话,递归遍历子节点;
}
if(e.elements().size()==0){//叶子节点
//System.out.println("前缀"+e.getNamespacePrefix());
String newNode=decapitalize(e.getName());//首字母小写转大写转换
e.setName(newNode);//修改当前节点
//System.out.println(e.getName()+"========"+newNode);
}
}
}
}
//soap报文转换,包含前缀名字空间,和默认名字空间
@SuppressWarnings({"unchecked"})
public void chageSoapWithPrefix(Element root,Document doc){
if(root.elements()!=null){
List<Element>list = root.elements();//如果当前跟节点有子节点,找到子节点
for(Element e:list){//遍历每个节点
if(e.elements().size()>0){//非叶子节点,即有子节点
//System.out.println("前缀"+e.getNamespacePrefix());
String newNode=decapitalize(e.getName());//首字母小写转大写转换
//System.out.println(e.getName()+"========"+newNode);
String prefix=e.getNamespacePrefix();
if(prefix.equals("")||prefix==null){
e.setName(newNode);//修改当前节点,原来没有前缀的就无需添加前缀
}else{
e.setName(e.getNamespacePrefix()+":"+newNode);//修改当前节点,原来有前缀的需要加前缀
}
chageSoapWithPrefix(e,doc);//当前节点不为空的话,递归遍历子节点
}
if(e.elements().size()==0){//叶子节点
//System.out.println("前缀"+e.getNamespacePrefix());
String newNode=decapitalize(e.getName());//首字母小写转大写转换
//System.out.println(e.getName()+"========"+newNode);
String prefix=e.getNamespacePrefix();
if(prefix.equals("")||prefix==null){
e.setName(newNode);//修改当前节点
}else{
e.setName(e.getNamespacePrefix()+":"+newNode);//修改当前节点
}
}
}
}
}
//首字母小写转大写转换
public static String decapitalize(String name) {
if (name == null || name.length() == 0) {
return name;
}
if (Character.isUpperCase(name.charAt(0))){
return name;
}
char chars[] = name.toCharArray();
chars[0] = Character.toUpperCase(chars[0]);
return new String(chars);
}
}
Axis2 SOAP XML报文节点首字母小写转大写,节点命名空间前缀添加与剔除(JAVA)
需积分: 50 7 浏览量
2018-06-29
15:13:32
上传
评论
收藏 7KB ZIP 举报
月光_水岸
- 粉丝: 1
- 资源: 8
最新资源
- AIS2024 valid
- 最入门的爬虫代码 python.docx
- 爬虫零基础入门-爬取天气预报.pdf
- 最通俗易懂的 MongoDB 非结构化文档存储数据库教程.zip
- 以mongodb为数据库的订单物流小项目.zip
- 腾讯云-mongodb数据库, 项目部署.zip
- 腾讯 APIJSON 的 MongoDB 数据库插件.zip
- 理解非关系型数据库和关系型数据库的区别.zip
- 操作简单的Mongodb网页web管理工具,基于Spring Boot2.0支持mongodb集群.zip
- tms-mongodb-web,提供访问mongodb数据的REST API和可灵活扩展的mongodb web 客户端.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈