SOAP报文转实体类

项目背景

集成系统通过activemq传出SOAP格式的JMS报文,在接受后需将报文转换为相应的实体类。

操作步骤

  1. 首先需要获得生成实体类所需要wsdl文件和xsd文件
    在这里插入图片描述

  2. 用CXF工具生成实体类并将soa文件夹放置项目中
    安装CXF插件
    首先个人本机安装CXF插件,配置CXF环境变量
    CXF插件从下列链接中获取
    链接:https://pan.baidu.com/s/16KEMrCISjp1_6kkJheE_8A
    提取码:enn2

    变量名:CXF_HOME 变量值:D:\cxf\apache-cxf-3.4.4
    Path变量里加:%CXF_HOME%\bin
    根据wsdl生成客户端相关代码
    在wsdl文件所在路径下执行如下cmd指令

# 服务端:
wsdl2java -server -impl -encoding utf-8 xxx.wsdl
# 客户端:
wsdl2java -client -encoding utf-8 xxx.wsdl
3. 新建测试类
package xxx.test;


import xxx.InputParameters;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import java.io.StringReader;

public class test {
   
    public static void main(String[] args) throws Exception {
   
        String message = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><ns2:InputParameters xmlns:ns2=\"http://soa.cmcc.com/JMS_BP_SOA_HQ_DistMdmPersonnelSrv\" xmlns=\"http://soa.cmcc.com/MsgHeader\"><ns2:MSGHEADER><SOURCESYSTEMID>MDM</SOURCESYSTEMID><SOURCESYSTEMNAME>集中化主数据系统</SOURCESYSTEMNAME><TOKEN>e2d37924a7acf22523959e237dd23034</TOKEN><USER_ID xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:nil=\"true\"/><USER_NAME xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:nil=\"true\"/><USER_PASSWD xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:nil=\"true\"/><SUBMIT_DATE xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:nil=\"true\"/><PAGE_SIZE xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:nil=\"true\"/><CURRENT_PAGE xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:nil=\"true\"/><TOTAL_RECORD xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:nil=\"true\"/><PROVINCE_CODE>HQ</PROVINCE_CODE><ROUTE_CODE>HQ</ROUTE_CODE><TRACE_ID xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:nil=\"true\"/><RESERVED_1 xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:nil=\"true\"/><RESERVED_2 xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:nil=\"true\"/></ns2:MSGHEADER><ns2:INPUTCOLLECTION><ns2:INPUTCOLLECTION_ITEM><ns2:PRI_KEY>10624105_2</ns2:PRI_KEY><ns2:GIVEN_NAME>闫晓巍</ns2:GIVEN_NAME><ns2:EMPLOYEE_NUMBER>29006179</ns2:EMPLOYEE_NUMBER><ns2:EMPLOY_ID>408185</ns2:EMPLOY_ID><ns2:COMPANY_CODE>tj</ns2:COMPANY_CODE><ns2:COMPANY_NAME>天津</ns2:COMPANY_NAME><ns2:PARENT_ORG_CODE>00293600000000000000</ns2:PARENT_ORG_CODE><ns2:PARENT_ORG_NAME>中国移动通信集团天津有限公司\\河北・河东分公司</ns2:PARENT_ORG_NAME><ns2:EMAIL_ADDRESS>yanxiaowei@tj.chinamobile.com</ns2:EMAIL_ADDRESS><ns2:PERSON_TEL>13800000000</ns2:PERSON_TEL><ns2:GENDER_CODE>1</ns2:GENDER_CODE><ns2:GENDER>男</ns2:GENDER><ns2:LEVEL_CODE xmlns:xsi=\"http://www.w3.org/2001/XMLSchem
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将C#的实体类换为SOAP报文,可以使用.NET框架提供的System.Runtime.Serialization命名空间中的DataContractSerializer类。以下是一个简单的示例代码: ```csharp using System; using System.IO; using System.Runtime.Serialization; using System.Xml; using System.Xml.Serialization; namespace ConsoleApp1 { [DataContract] public class Person { [DataMember] public string Name { get; set; } [DataMember] public int Age { get; set; } [DataMember] public string Address { get; set; } } class Program { static void Main(string[] args) { // 创建一个Person对象 Person person = new Person(); person.Name = "张三"; person.Age = 20; person.Address = "北京市"; // 创建DataContractSerializer对象 DataContractSerializer serializer = new DataContractSerializer(typeof(Person)); // 创建一个MemoryStream对象,用于保存序列化后的SOAP报文 MemoryStream stream = new MemoryStream(); // 将Person对象序列化为SOAP报文,并保存到MemoryStream对象中 serializer.WriteObject(stream, person); // 将MemoryStream对象换为字符串,即为SOAP报文 string soapMessage = Encoding.UTF8.GetString(stream.ToArray()); // 输出SOAP报文 Console.WriteLine(soapMessage); Console.ReadLine(); } } } ``` 在上面的示例代码中,我们创建了一个名为Person的实体类,并使用DataContractAttribute标记需要序列化的属性。然后创建了一个DataContractSerializer对象,并将Person对象序列化为SOAP报文,并将其保存到MemoryStream对象中。最后将MemoryStream对象换为字符串,即为SOAP报文
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值