当前位置: 首页 > 知识库问答 >
问题:

解组重新运行重复的空值

丰飞龙
2023-03-14

我试图解开这个xml片段

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <soapenv:Header>
        <ns1:tMLHeader soapenv:actor="http://schemas.xmlsoap.org/soap/actor/next" soapenv:mustUnderstand="0"
                       xmlns:ns1="http://tml.t1m1.org/tML.Transport.xsd">
            <ns1:TransportID>111-23-Some_code--12</ns1:TransportID>
            <ns1:ApplicationType>Any_type</ns1:ApplicationType>
            <ns1:ApplicationVersion>1.0</ns1:ApplicationVersion>
            <ns1:From>XXX</ns1:From>
            <ns1:To>YY_G</ns1:To>
            <ns1:SendTimestamp>2021-11-11T10:25:56.858-06:00</ns1:SendTimestamp>
            <ns1:RetryCount>0</ns1:RetryCount>
        </ns1:tMLHeader>
    </soapenv:Header>
    <soapenv:Body>
        <processSyncRequestResponse xmlns="java:lsr.webservice.wisor.com">
            <response xmlns="">mocked response</response>
        </processSyncRequestResponse>

    </soapenv:Body>
</soapenv:Envelope>

但是尽管我采取了行动,结果总是几乎相同的(4个或2个空字段):

{
    "Header": null,
    "Body": null,
    "header": null,
    "body": null
}

我以前的操作是:定义构造函数(所有字段,没有字段),添加setter和getter,并将其标记为@xmlement。对具有属性顺序的子类使用@XmlType。还尝试使用包信息和ObjectFactory。我从Stack Overflow的示例中尝试过的当前版本:由于所有字段的名称都是匹配的xml字段,因此只能使用@XmlAccessorType(XmlAccessType.FIELD)以及getter和setter。但结果仍然是一样的。有人能帮我解释一下它是怎么工作的吗?

解组:

File xml = new File("test.xml");
return (Envelope)JAXBContext
                    .newInstance(Envelope.class)
                    .createUnmarshaller()
                    .unmarshal(xml);

课程:

@XmlRootElement(name="Envelope",namespace = "http://schemas.xmlsoap.org/soap/envelope/")
@XmlAccessorType(XmlAccessType.FIELD)
public class Envelope {
    public Header Header;
    public Body Body;

    public Header getHeader() {
        return Header;
    }

    public void setHeader(Header header) {
        Header = header;
    }

    public Body getBody() {
        return Body;
    }

    public void setBody(Body body) {
        Body = body;
    }
}


@XmlAccessorType(XmlAccessType.FIELD)
public class Header {
    public tMLHeader tMLHeader;

    public tMLHeader gettMLHeader() {
        return tMLHeader;
    }

    public void settMLHeader(tMLHeader tMLHeader) {
        this.tMLHeader = tMLHeader;
    }
}

@XmlAccessorType(XmlAccessType.FIELD)
public class tMLHeader {

    public String TransportID;

    public String ApplicationType;

    public double ApplicationVersion;

    public String From;

    public String To;

    public Date SendTimestamp;

    public int RetryCount;

    public String getTransportID() {
        return TransportID;
    }

    public void setTransportID(String transportID) {
        TransportID = transportID;
    }
....//other setters and getters


@XmlAccessorType(XmlAccessType.FIELD)
public class Body {
    @XmlElement(name = "processSyncRequestResponse")
    public ProcessSyncRequestResponse processSyncRequestResponse;

    public ProcessSyncRequestResponse getProcessSyncRequestResponse() {
        return processSyncRequestResponse;
    }

    public void setProcessSyncRequestResponse(ProcessSyncRequestResponse processSyncRequestResponse) {
        this.processSyncRequestResponse = processSyncRequestResponse;
    }
}

@XmlAccessorType(XmlAccessType.FIELD)
public class ProcessSyncRequestResponse {

    public String response;

    public String getResponse() {
        return response;
    }

    public void setResponse(String response) {
        this.response = response;
    }
}

提前感谢

共有1个答案

沈树
2023-03-14

您需要为字段添加命名空间。

对于Envelope类,可以如下所示。

@XmlRootElement(name="Envelope",namespace = "http://schemas.xmlsoap.org/soap/envelope/")
@XmlAccessorType(XmlAccessType.FIELD)
public class Envelope {
    @XmlElement(name="Header", namespace = "http://schemas.xmlsoap.org/soap/envelope/")
    private Header header;

    @XmlElement(name="Body", namespace = "http://schemas.xmlsoap.org/soap/envelope/")
    public Body body;

    public Header getHeader() {
        return header;
    }

    public void setHeader(Header header) {
        this.header = header;
    }

    public Body getBody() {
        return Body;
    }

    public void setBody(Body body) {
        this.body = body;
    }
}

(将注释添加到标题和tMLHeader中的所有字段)

 类似资料:
  • 我们的Spring Batch应用程序在重新启动失败的作业时,再次处理相同的记录,导致重复的行,我们希望了解如何避免这种情况。 启动批处理作业的Spring集成轮询器配置为每两个小时运行一次。第二次运行时,作业参数将相同,但如果上一次运行失败(例如,由于数据截断异常),Spring Batch不会抱怨作业已完成。 在故障点,几十万条记录已经被处理并从源表复制到目标表。在以后运行作业时,相同的行将复

  • 我有一个简单的xml要解组。但是我在输出中只得到一个空列表。不会引发任何异常。这是一个第三方生成的xml,我需要使这一工作没有任何变化的xml。 XML: 用于动物的POJO豆: 猫咪的POJO豆 非马歇尔代码是: 最后一行给出了空指针异常。 我是否对 BEAN 类中的命名空间执行了操作?我是Jaxb的新手,这个问题现在困扰了我3天!我之前问过这个问题,但无法得到正确的答案,这是一个更准确的问题。

  • 我有一张非常复杂的表格,是这样的:- 现在,我需要处理一个应该重复一行的查询,其中假设p2、p3或p1、p2甚至仅p2值对于该特定年份或从2009年、2010年或2011年中的任何一年都不可用,并将最后一列的值作为零放入其中。 所以现在我的数据库看起来应该像- 我试着使用临时表 但它不起作用。有谁能帮我。

  • 我正在使用空手道框架进行我的自动化测试项目,目前我也在使用cucumber报告。 现在我面临一个问题,在Jenkins中只重新运行失败的测试 尝试使用-Dsurefire.rerunFailingTestsCount,但它不起作用。是否有任何特定的配置来实现这一点。

  • 得到了经典作业,我需要创建学生和课程类以及驾驶员类。 我在计算我的课程班级的整体平均成绩时遇到了问题。一切都正常,但当我运行驱动程序时,我得到了“0”作为类平均值。在IDE中,它告诉我s中的“s”。getAverage();'在getClassAverage方法中无法解决,但我不确定为什么,因为我在其他地方使用它很好。我试着遍历一组学生,把他们的平均数加起来。 有什么指示吗?谢谢你的时间! 大学生

  • 从我所读到的一切来看,它应该是可行的,但是以下几点: 在…内 不工作。与应用程序加载类似,但使用的是recyclingView\u Main。adapter=MainAdapter()似乎未运行。 完整代码: 正如您从上面的代码中看到的,当我将其放在onCreate中时,它工作得很好。 因此,问题似乎是将其发送到主线程。 XML