`

HASH的解析

    博客分类:
  • xml
阅读更多
原始方法:
$GroupObject->GroupMemberAdd(
        GID => 12,
        UID => 6,
        Permission => {
            ro        => 1,
            move_into => 1,
            create    => 1,
            owner     => 1,
            priority  => 0,
            rw        => 0,
        },
        UserID => 123,
    );
要解析的xml内容如下:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:enc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:env="http://schemas.xmlsoap.org/soap/envelop/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<Dispatch xmlns="/Core">
<Username xsi:type="xsd:string">user</Username>
<Password xsi:type="xsd:string">pass</Password>
<Object xsi:type="xsd:string">GroupObject</Object>
<Method xsi:type="xsd:string">GroupMemberAdd</Method>
<Param1_Name xsi:type="xsd:string">GID</Param1_Name>
<Param1_Value xsi:type="xsd:int">12</Param1_Value>
<Param2_Name xsi:type="xsd:string">UID</Param2_Name>
<Param2_Value xsi:type="xsd:int">11</Param2_Value>
<Param3_Name xsi:type="xsd:string">UserID</Param3_Name>
<Param3_Value xsi:type="xsd:int">11</Param3_Value>
<Param4_Name xsi:type="xsd:string">Permission</Param4_Name>
<Param4_Name>Permission<ro>1</ro>
<move_into>1</move_into>
<create>1</create><owner>1</owner>
<priority>1</priority>
<rw>1</rw>
</Param4_Name>
</Dispatch>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

java解析的内容如下:
public Map<String,String> userAddGroup(String gid,String uid,String userid,String i) throws Exception {
// Create the connection
SOAPConnection conn = OtrsRpcUtils.getSOAPConnection();
// Create message
SOAPMessage msg = OtrsRpcUtils.getSOAPMessage();
// Object for message parts
SOAPEnvelope env = OtrsRpcUtils.getSOAPEnvelope(msg);
//得到SOAPBodyElement
SOAPBodyElement dispatch = OtrsRpcUtils.getSOAPBodyElement(env);
OtrsRpcUtils.setPara(dispatch, "GroupObject","GroupMemberAdd");
// 传递变量
dispatch.addChildElement("Param1_Name").addTextNode("GID").setAttribute("xsi:type","xsd:string");
dispatch.addChildElement("Param1_Value").addTextNode(gid).setAttribute("xsi:type","xsd:int");
dispatch.addChildElement("Param2_Name").addTextNode("UID").setAttribute("xsi:type","xsd:string");
dispatch.addChildElement("Param2_Value").addTextNode(uid).setAttribute("xsi:type","xsd:int");
dispatch.addChildElement("Param3_Name").addTextNode("UserID").setAttribute("xsi:type","xsd:string");
dispatch.addChildElement("Param3_Value").addTextNode(userid).setAttribute("xsi:type","xsd:int");
dispatch.addChildElement("Param4_Name").addTextNode("Permission").setAttribute("xsi:type","xsd:string");
SOAPElement e = dispatch.addChildElement("Param4_Name").addTextNode("Permission");
e.addChildElement("ro").addTextNode(i);
e.addChildElement("move_into").addTextNode(i);
e.addChildElement("create").addTextNode(i);
e.addChildElement("owner").addTextNode(i);
e.addChildElement("priority").addTextNode(i);
e.addChildElement("rw").addTextNode(i);
URL url = OtrsRpcUtils.getUrl();
SOAPMessage resp = conn.call(msg, url);
msg.writeTo(System.out);
Document doc = OtrsRpcUtils.getDocument(resp);
RpcUtil.XMLtoStr(doc);
Map<String,String> m = new HashMap<String,String>();
return m;
}
public class RpcUtil {
// 输出返回数据的xml
public static String XMLtoStr(Document document) {
String result = null;
if (document != null) {
StringWriter strWtr = new StringWriter();
StreamResult strResult = new StreamResult(strWtr);
TransformerFactory tfac = TransformerFactory.newInstance();
try {
Transformer t = tfac.newTransformer();
t.setOutputProperty(OutputKeys.ENCODING, "gb2312");
t.setOutputProperty(OutputKeys.INDENT, "yes");
t.setOutputProperty(OutputKeys.METHOD, "xml");
t.setOutputProperty(
"{http://xml.apache.org/xslt}indent-amount", "4");
t.transform(new DOMSource(document.getDocumentElement()),
strResult);
} catch (Exception e) {
System.err.println("XML.toString(Document): " + e);
}
result = strResult.getWriter().toString();
System.out.println(result);
}
return result;
}
}
public class OtrsRpcUtils {
public static SOAPMessage getSOAPMessage()
    {
    MessageFactory mf = null;
    SOAPMessage msg =null;
    try {
mf = MessageFactory.newInstance();
msg =  mf.createMessage();
} catch (SOAPException e) {
e.printStackTrace();
}
    return msg;
    }
/***
     * 得到SOAPEnvelope
     * @param msg SOAPMessage
     * @return SOAPEnvelope
     */
    public static SOAPEnvelope getSOAPEnvelope(SOAPMessage msg)
    {
    SOAPPart sp = msg.getSOAPPart();
    SOAPEnvelope env = null;
try {
env = sp.getEnvelope();
} catch (SOAPException e) {
e.printStackTrace();
}
return env;
    }
    /****
     * 得到 Document
     * @param resp SOAPMessage
     * @return Document
     */
    public static Document getDocument(SOAPMessage resp)
    {
    Document doc = null;
    try{
    doc = resp.getSOAPPart().getEnvelope().getBody().extractContentAsDocument();
    }
    catch(Exception e)
    {
    e.printStackTrace();
    }
   
    return doc;
    }
/***
* 得到SOAPBodyElement
* @param env SOAPEnvelope
* @return SOAPBodyElement
*/
public static SOAPBodyElement getSOAPBodyElement(SOAPEnvelope env)
{
SOAPBodyElement dispatch = null;
try {
env.addNamespaceDeclaration("xsd", "http://www.w3.org/2001/XMLSchema");
env.addNamespaceDeclaration("xsi","http://www.w3.org/2001/XMLSchema-instance");
env.addNamespaceDeclaration("enc","http://schemas.xmlsoap.org/soap/encoding/");
env.addNamespaceDeclaration("env","http://schemas.xmlsoap.org/soap/envelop/");
env.setEncodingStyle("http://schemas.xmlsoap.org/soap/encoding/");
SOAPBody body = env.getBody();
dispatch = body.addBodyElement(new QName("/Core","Dispatch"));
} catch (UnsupportedOperationException e) {
e.printStackTrace();
} catch (SOAPException e) {
e.printStackTrace();
}
return dispatch;
}
   /***
     * 添加节点
     * @param dispatch
     * @param object
     */
    public static void setPara(SOAPBodyElement dispatch,String object,String method)
    {
    try {
dispatch.addChildElement("Username").addTextNode("user").setAttribute("xsi:type","xsd:string");
dispatch.addChildElement("Password").addTextNode("pass").setAttribute("xsi:type","xsd:string");
dispatch.addChildElement("Object").addTextNode(object).setAttribute("xsi:type","xsd:string");
dispatch.addChildElement("Method").addTextNode(method).setAttribute("xsi:type","xsd:string");
} catch (DOMException e) {
e.printStackTrace();
} catch (SOAPException e) {
e.printStackTrace();
}

}
分享到:
评论

相关推荐

    window.location.hash解析

    这篇博客文章可能详细讲解了如何使用和解析`window.location.hash`。 哈希值在网页中的主要用途是实现页面内部跳转,例如,如果有一个长页面,我们可以在链接中指定一个哈希值,当用户点击这个链接时,浏览器不会...

    MySQL分库分表,读写分离与Mycat的使用文章中字符串hash解析算法分片sql

    MySQL分库分表,读写分离与Mycat的使用文章中字符串hash解析算法分片sql

    keyHash.sh

    FacebookSDK release key hashes 采用openssl 方式key hashes

    16 解析HashMap.txt

    HashMap、ConcurrentHashMap源码级解读,并且对比了JDK7和8实现的不同,进行了大量的解释,结合了多个学习视频

    GeoHash核心原理解析

    GeoHash是一种将地理坐标(主要是经纬度)转换为一种特定格式字符串的技术,该字符串可以代表一个地理坐标所在的区域,并能够方便地用于地理位置相关的数据处理,例如地理位置索引、空间查询等。GeoHash的字符串长度...

    从头到尾彻底解析hash

    ### 彻底解析Hash:原理与实践 #### 第一部分:TopK算法详解 **问题描述:** 百度面试题要求统计最热门的10个查询串,且使用的内存不能超过1G。面对一千万个记录(实际去重后不超过3百万个),如何在有限的资源下...

    hash函数的完全解析

    在解析算法和实现技术之外,本文还提到了对于Hash函数和Hash表算法的实际测试,分析了不同的Hash函数算法的表现及其优劣,这将有助于我们选择最适合特定应用场景的Hash函数。而这些知识点的讲解和测试结果,对于希望...

    ELF动态解析符号过程.rar_elf_hash_动态解析_符号

    本文将深入探讨ELF文件动态解析符号的过程,重点关注elf_hash算法以及动态解析中的关键步骤。 首先,让我们理解ELF文件结构。ELF文件包含头信息、程序头表和段表,这些部分定义了程序的结构和运行时行为。其中,...

    Mycat分表分库项目示例.zip

    4. 字符串hash解析分片 5. 一致性哈希分片 四. 综合分片 1. 范围求模分片 2. 日期范围hash分片 3. 取模范围约束分片 4. ASCII码求模范围约束(字符串) 5. 固定分片hash(二进制) 六. 分片策略

    mycat分库分表示例

    4. 字符串hash解析分片 5. 一致性哈希分片 四. 综合分片 1. 范围求模分片 2. 日期范围hash分片 3. 取模范围约束分片 4. ASCII码求模范围约束(字符串) 5. 固定分片hash(二进制) 六. 分片策略

    mycat分片规则和算法.docx

    本文将深入探讨Mycat中的分片规则和算法,包括枚举法、固定分片Hash算法、范围约定、求模法、日期列分区法、通配取模、ASCII码求模通配、编程指定、字符串拆分Hash解析以及一致性Hash等。 首先,让我们来看看枚举法...

    Hash在线解密_Hash在线解密_Hash在线解密平台最新版_hash解密_hash.txt_mysql5在线解密_

    Hash在线解密平台最新版php实现纯txt存储哈希跟明文对应表查询

    115地址解析工具

    在IT领域,115地址解析工具是一种专为115网盘设计的软件或服务,旨在帮助用户解决与115网盘链接相关的访问和下载问题。115网盘是中国知名的云存储服务之一,它提供了存储和分享文件的功能。然而,由于版权和政策原因...

    c语言的md5_hash代替C#的ComputeHash

    MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();...string str = BitConverter.ToString(md5.ComputeHash(UTF8Encoding.Default.GetBytes(str))); C#的md5 ComputeHash方法,C语言实现

    ELF解析工具 v1.7(elf格式解析工具)

    支持32位/64位elf文件自适应解析、可解析elf文件头、程序头、节头、字符表、符号表、hash表、版本定义表、版本依赖表、动态信息表等。 更多详细介绍请访问:...

    MyCat 第2天-part2.7z

    - **字符串hash解析算法**:进一步优化哈希算法,减少热点数据的出现。 - **应用指定算法**:允许用户自定义分片策略,满足特定业务需求。 - **日期时间相关分片算法**:根据日期和时间字段进行分片,适用于时间...

    gen_lex_hash_pc

    `gen_lex_hash`的运行结果会生成`lex_hash.h`头文件,这个文件包含了所有可能的SQL关键字和标识符的哈希值,确保MySQL能正确解析和理解输入的SQL指令。 对于PC平台,由于硬件资源相对丰富,但可能与MySQL服务器的...

    GEOHASH Javascript的实现

    3. **`GEOHASH`解码**:逆向过程,将`GEOHASH`字符串解析回二进制,再转换回经纬度坐标。 4. **相邻`GEOHASH`计算**:`GEOHASH`相邻块的计算涉及到边界共享。通过分析`GEOHASH`字符串的差异,可以找出与其相邻的`...

    geohash经纬度转换包linux

    这可以通过解析Geohash字符串,确定其对应的经纬度范围,并逐步细化到更精确的坐标来实现。 3. **邻接(Neighbours)**: 这个库可能还支持获取给定Geohash的相邻Geohash,这对于处理邻近位置或者进行范围搜索很有用...

    从头到尾彻底解析Hash_表算法

    ### 从头到尾彻底解析Hash表算法 #### 第一部分:Top K算法详解 ##### 问题背景与描述 本部分探讨了一道典型的百度面试题,旨在寻找最热门的10个查询串。这个问题设定在一个拥有1千万条记录的日志文件环境中,...

Global site tag (gtag.js) - Google Analytics