为了账号安全,请及时绑定邮箱和手机立即绑定

解析 XML 失败

解析 XML 失败

幕布斯6054654 2022-08-17 15:41:21
调用 SOAP Web 服务后,我收到以下响应 XML 字符串。如何将响应解析回Java实体,以便我可以相应地处理和?我尝试使用以下代码,但不断收到错误ErrMsgStatusException in thread "main" javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"NewDataSet"). Expected elements are <{TransactionalSubmissionsSvcs}NewDataSet>    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEvent(UnmarshallingContext.java:726)字符串中的示例响应 <NewDataSet>  <SubmissionResult>    <Status>200</Status>    <RefNo>363180319bigKj83i</RefNo>    <ErrMsg>Successful</ErrMsg>  </SubmissionResult></NewDataSet>示例客户端 XML 解析器    JAXBContext jaxbContext = JAXBContext.newInstance(NewDataSet.class);    Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();    StringReader reader = new StringReader("Sample Response in String above");    NewDataSet newDataSet = (NewDataSet) jaxbUnmarshaller.unmarshal(reader);    System.out.println(newDataSet.getSubmissionResult());
查看完整描述

2 回答

?
DIEA

TA贡献1820条经验 获得超2个赞

看起来您的模型中有许多类。检查这行代码并检查是否导入了正确的代码,因为异常显示 marshaller 期望 .NewDataSetPOJOJAXBContext.newInstance(NewDataSet.class)importTransactionalSubmissionsSvcs.NewDataSet


编辑前

您没有提到您使用的工具。如果是杰克逊,您可以解析有效负载,如下所示:XML


import com.fasterxml.jackson.databind.JsonNode;

import com.fasterxml.jackson.databind.SerializationFeature;

import com.fasterxml.jackson.dataformat.xml.XmlMapper;


import java.io.File;

import java.nio.file.Files;


public class XmlMapperApp {


    public static void main(String[] args) throws Exception {

        String xml = "your xml";


        parse(xml);

    }


    public static void parse(String xml) throws Exception {

        XmlMapper xmlMapper = new XmlMapper();

        xmlMapper.enable(SerializationFeature.INDENT_OUTPUT);


        JsonNode root = xmlMapper.readTree(xml);

        JsonNode result = root.at("/SendWithXMLResult");

        JsonNode jsonNode = xmlMapper.readTree(result.asText());

        JsonNode submissionResult = jsonNode.at("/SubmissionResult");


        System.out.println(submissionResult.get("Status"));

        System.out.println(submissionResult.get("ErrMsg"));

        System.out.println(submissionResult.get("RefNo"));

    }

}

如果已准备好模型,则可以使用方法直接反序列化到该模型。POJOXMLreadValue


查看完整回答
反对 回复 2022-08-17
?
眼眸繁星

TA贡献1873条经验 获得超9个赞

找到原因,通过删除namespace = "TransactionalSubmissionsSvcs"

@javax.xml.bind.annotation.XmlSchema(namespace = "TransactionalSubmissionsSvcs",elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package com.mailadapter;

成为

@javax.xml.bind.annotation.XmlSchema(elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package com.mailadapter;


查看完整回答
反对 回复 2022-08-17
  • 2 回答
  • 0 关注
  • 172 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号