zoukankan      html  css  js  c++  java
  • SOAP报文转成JAVA对象

    在今天以前我还没有用过代码解析过SOAP报文,更别提转成JAVA对象了,今天的任务中报文这个模样的,(为防止数据信息,以下数据我故意打乱了防止泄露什么信息.)

    <?xml version="1.0" encoding="UTF-8"?>
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns2="urn:WSSOP">
        <SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
            <ns2:CallWSSOP>
                <objInputData>
                    <m-strOrderID>2019123041123509590670</m-strOrderID>
                    <m-strSerialNumber>85213365571107</m-strSerialNumber>
                    <nPriority>0</nPriority>
                    <m-strSwitchid>C123L21231302</m-strSwitchid>
                    <m-vServList>
                        <m-strServName>YYH1232</m-strServName>
                    </m-vServList>
                    <m-vVarList>
                        <m-strName>G012302</m-strName>
                        <m-strValue>455020096628454</m-strValue>
                    </m-vVarList>
                    <m-vVarList>
                        <m-strName>G123004</m-strName>
                        <m-strValue>85361235571107</m-strValue>
                    </m-vVarList>
                    <m-vVarList>
                        <m-strName>G123071</m-strName>
                        <m-strValue>0085123265571107</m-strValue>
                    </m-vVarList>
                </objInputData>
            </ns2:CallWSSOP>
        </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>

     

    上面是使用POSTMAN美化之后的报文样子,最开始的报文模样是这样的

    <?xml version="1.0" encoding="UTF-8"?>
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns2="urn:WSSOP"><SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><ns2:CallWSSOP><objInputData><m-strOrderID>2019041509590670</m-strOrderID><m-strSerialNumber>85365571107</m-strSerialNumber><nPriority>0</nPriority><m-strSwitchid>CL02</m-strSwitchid><m-vServList><m-strServName>YYH2</m-strServName></m-vServList><m-vVarList><m-strName>G002</m-strName><m-strValue>455020096628454</m-strValue></m-vVarList><m-vVarList><m-strName>G004</m-strName><m-strValue>85365571107</m-strValue></m-vVarList><m-vVarList><m-strName>G071</m-strName><m-strValue>0085265571107</m-strValue></m-vVarList></objInputData></ns2:CallWSSOP></SOAP-ENV:Body></SOAP-ENV:Envelope>

    一.美化报文

    美化报文不是为了别人,是为了自己看起来方便一点点,有助于了解对象结构。  美化工具可能很多,手边的工具可能就POSTMAN,就以这个为例了,相信人手都会装有一个。

    在POSTMAN中随意打开一个,Body里面贴上原始报文,然后调成XML, 点击Beauty即可美化报文.

    image

    wsdl文件

      由于组长发给我的文档里面没有这个SOAP的地址,只有一份接口参数说明以及wsdl文件,接口地址暂时还没给我,所以我们利用wsdl文件生成java实体类,soap的url也是一样的效果.

    以下是操作步骤,将wsdl文件放到工程的某个文件目录下,右击 WebService—>Generate  Java Code from wsdl  (这里指定wsdl路径应该是一样的效果)—>  选定 Axis2  和 JaxB,以及生成的目录即可,但是每次生成位置稍有不对,手动移下就行了,这样就生成了Java对象.

    image

     

    四.采坑的点

      不知道为什么按照StackOverFlow啊、博客方法,解析总会存在问题;而别人好像又能够解析成功,可能每个人的报文不一样的原因,https://stackoverflow.com/questions/19395400/jaxb-unmarshall-with-namespaces-and-prefix  . 

       按照别人写的直接获取SoapBody在使用extractContentAsDocument方法,就能够解析成功,而到了我这里解析下来java实体类中所有属性都是空的,于是我就想到的上面的方式,这样加入SoapBody中存在多个属性,比如和CallWSSOP同级的java类,也能够解析出来.

       另外我尝试了好久去利用@XmlNs发现,这个注解好像根本不起作用,这里面待研究的好多,但是以后碰到像我遇到这么复杂的报文,解析方式按照上面来就可以啦.

      附上Marsharl  API官网一份,https://docs.oracle.com/javase/7/docs/api/javax/xml/bind/Marshaller.html

  • 相关阅读:
    WCF 第八章 安全 确定替代身份(中)使用AzMan认证
    WCF 第八章 安全 总结
    WCF 第八章 安全 因特网上的安全服务(下) 其他认证模式
    WCF Membership Provider
    WCF 第八章 安全 确定替代身份(下)模仿用户
    WCF 第八章 安全 因特网上的安全服务(上)
    WCF 第九章 诊断
    HTTPS的七个误解(转载)
    WCF 第八章 安全 日志和审计
    基于比较的排序算法集
  • 原文地址:https://www.cnblogs.com/lvbinbin2yujie/p/10714164.html
Copyright © 2011-2022 走看看