SOAP报文转成JAVA对象

本文介绍了如何将SOAP报文美化和转换为JAVA对象。通过使用POSTMAN进行报文美化,然后利用wsdl文件生成JAVA实体类。在过程中遇到了解析问题,通过调整方法成功将复杂SOAP报文解析为包含多个属性的JAVA对象。文中还提及了@XmlNs注解可能存在的问题,并分享了解析SOAP报文的解决方案。

在今天以前我还没有用过代码解析过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

 

转载于:https://www.cnblogs.com/lvbinbin2yujie/p/10714164.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值