在今天以前我还没有用过代码解析过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即可美化报文.

wsdl文件

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

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

四.采坑的点

不知道为什么按照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

SOAP报文转成JAVA对象的更多相关文章

  1. 利用JAVA反射机制将JSON数据转换成JAVA对象

    net.sf.json.JSONObject为我们提供了toBean方法用来转换为JAVA对象, 功能更为强大,  这里借鉴采用JDK的反射机制, 作为简单的辅助工具使用,   有些数据类型需要进行转 ...

  2. json字符串转json对象,json对象转换成java对象

    @RequestMapping(value = "updateInvestorApplyAccountNo", method = RequestMethod.POST) @Resp ...

  3. json 串转成 java 对象再拼接成前台 html 元素

    获取商品参数 json 串,转成 java 对象,再拼接成前台 html 的Service方法 @Override public String getItemParam(Long itemId) { ...

  4. json字符串转成 json对象 json对象转换成java对象

    import com.alibaba.fastjson.JSONArray;import com.alibaba.fastjson.JSONObject; 依赖包 <dependency> ...

  5. 将String类型的json字符串转换成java对象

    1,import com.fasterxml.jackson.databind.ObjectMapper; ObjectMapper mapper = new ObjectMapper(); Mycl ...

  6. 简单数据访问类,生成简单SQL,自动转换成java对象

    import java.util.HashMap; import java.util.List; import java.util.Map; import org.slf4j.Logger; impo ...

  7. Java读取Excel转换成JSON字符串进而转换成Java对象

    Jar包

  8. json转成java对象

    avro生成的代码里,String是CharSequence,不能通过Gson反序列化,于是有了下面的代码,ParseArray里还不完善: static <T> List<T> ...

  9. json字符串转换成java对象

随机推荐

  1. Day04 (黑客成长日记) 集合记录

    集合 集合:是可变的数据类型 ,它里面的数据类型必须是不可变的数据类型,无序,不重复,不同于字典,他有元素,没有键值对(编码不常用) li = set([1,2,3]) li = {'alex','w ...

  2. CCNA(001):Packet Tracer简单使用

    这几天看一些网络书籍,正好看到CCNA,顺便查了一下. CCNA是什么呢?通俗的说,就是专门研究思科设备的知识,再通俗点说就是研究路由器和交换机,其中也包括配置和设备互连,基本就这几个东西,仅限于当前 ...

  3. How to setup Visual Studio without pain

    Visual Studio (VS) can be very hard to install. If you are lucky, one whole day may be enough to ins ...

  4. dva-counter

    dva实例Counter. import dva, { connect } from 'dva'; import { Router, Route } from 'dva/router'; import ...

  5. python之路(八)-迭代器&生成器

    迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退.另外,迭代器的一大优点是 ...

  6. G++与C++的区别

    C++是一门计算机编程语言,G++不是语言,是一款编译器中编译C++程序的命令而已. 不同的编译器,会对代码做出一些不同的优化 比如说: a++;  和 ++a; 如果从标准C的角度去理解.a++这个 ...

  7. Hive数据倾斜解决方案

    https://blog.csdn.net/yu0_zhang0/article/details/81776459 https://blog.csdn.net/lxpbs8851/article/de ...

  8. Redis-05.主从复制与Sentinel

    主从复制(master/slave) 主机(master)数据更新后根据配置和策略,自动同步到备机(slave).通过主从复制,能够实现读写分离.容灾恢复. 实现主从复制非常简单,只需要在从(slav ...

  9. OpenFlow学习笔记

    Software-Defined Networking Network intelligence is (logically) centralized in software-based SDN co ...

  10. Pool:小对象缓存or复用

    对象复用 使用链表作为pool来保存要复用的对象. pool字段 obtain recycle 案例1 android.os.Message private static Message sPool; ...