JAXB - 将 SOAP 映射到 Java 类

2024-04-02

我需要帮助将我的 Soap Envelope 映射到 java 类,我的目的是将结果操纵到数据库。

我在获取 SOAP 信封或使用 DB 方面没有任何问题,我的问题完全在于 JABX 以及根据我的 SOAP 信封映射我的类。

这是我的肥皂:

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Header>
      <KD4SoapHeaderV2 xmlns="http://www.ibm.com/KD4Soap">A03ODA1YzhlZDQ2MWQAAQ==</KD4SoapHeaderV2>
   </soap:Header>
   <soap:Body>
      <Response xmlns="http://tempuri.org/">
         <Result xmlns:a="http://schemas.datacontract.org/2004/07/PS.SharedWebServices.Response" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
            <a:Errors />
            <a:Count>329</a:Count>
            <a:Return>SUCCESS</a:Return>
            <a:DashboardDTOs>
               <a:DashboardDTOs>
                  <a:Value>28.58</a:Value>
                  <a:Code>O001</a:Code>
                  <a:Name>Test2</a:Name>
               </a:DashboardDTOs>
               <a:DashboardDTOs>
                  <a:Value>40.22</a:Value>
                  <a:Code>O002</a:Code>
                  <a:Name>Test2</a:Name>
               </a:DashboardDTOs>
               <a:DashboardDTOs>
                  <a:Value>54.11</a:Value>
                  <a:Code>O003</a:Code>
                  <a:Name>Test3</a:Name>
               </a:DashboardDTOs>
            </a:DashboardDTOs>
         </Result>
      </Response>
   </soap:Body>
</soap:Envelope>

这是我接收主要值的类(计数、返回和仪表板 DTO 列表):

@XmlRootElement(name = "Response") 
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Response", propOrder = { "Count",  "Return", "DashboardDTOs"})
public class Result {

    @XmlElement(name="Count", required = true)
    private Integer Count;

    @XmlElement(name="Return", required = true)
    private String Return;

    @XmlElement(name = "DashboardDTOs")
    private List<DashboardDTOs> DashboardDTOs;

    ...

这是接收 DashboardDTO 的第二个模型:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "DashboardDTOs", propOrder = {
        "Value",
        "Code",
        "Name"
    })
public class DashboardDTOs {

    @XmlElement(name = "Value")
    private double Value;

    @XmlElement(name = "Code")
    private String Code;

    @XmlElement(name = "Name")
    private String Name;

    ...

我的应用程序尝试将 SOAPEnvelope 转换为结果,但出现错误:

Unmarshaller unmarshaller = JAXBContext.newInstance(Result.class).createUnmarshaller();
GetListSummarizedTransactionResultDTO returnValue = (Result)unmarshaller.unmarshal(soapMessagem.getSOAPBody().extractContentAsDocument());



unexpected element (uri:"http://tempuri.org/", local:"Response"). Expected elements are <{}Result>

我做错了什么?

Thans


尝试这个:

首先你有你的根类 Response

@XmlRootElement(name = "Response", namespace = "http://tempuri.org/")
@XmlAccessorType(XmlAccessType.FIELD)
public class Response {

    @XmlElement(name="Result", namespace = "http://tempuri.org/")
    private Result result;
}

其中包含结果:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Result", propOrder = { "Errors", "Count",  "Return", "DashboardDTOs"})
public class Result {

    @XmlElement(name="Errors", required = true, namespace = "http://schemas.datacontract.org/2004/07/PS.SharedWebServices.Response")
    private String Errors;

    @XmlElement(name="Count", required = true, namespace = "http://schemas.datacontract.org/2004/07/PS.SharedWebServices.Response")
    private Integer Count;

    @XmlElement(name="Return", required = true, namespace = "http://schemas.datacontract.org/2004/07/PS.SharedWebServices.Response")
    private String Return;

    @XmlElement(name = "DashboardDTOs", namespace = "http://schemas.datacontract.org/2004/07/PS.SharedWebServices.Response")
    private List<DashboardDTOs> DashboardDTOs;
}

现在,根据我的口味,它有点“混乱”。您的 xml 包含一个元素 DashboardDTOs,其中包含 DashboardDTO 列表,这些列表具有值、代码和名称。因此,您需要创建一个 DashboardDTOs 类,如下所示:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "DashboardDTOs", propOrder = {
        "Value",
        "Code",
        "Name",
        "DashboardDTOs"
})
public class DashboardDTOs {

    @XmlElement(name = "Value", namespace = "http://schemas.datacontract.org/2004/07/PS.SharedWebServices.Response")
    private double Value;

    @XmlElement(name = "Code", namespace = "http://schemas.datacontract.org/2004/07/PS.SharedWebServices.Response")
    private String Code;

    @XmlElement(name = "Name", namespace = "http://schemas.datacontract.org/2004/07/PS.SharedWebServices.Response")
    private String Name;

    @XmlElement(name = "DashboardDTOs", namespace = "http://schemas.datacontract.org/2004/07/PS.SharedWebServices.Response")
    private List<DashboardDTOs> DashboardDTOs;
}

这些 POJO 将允许您使用主体内指定的 xml 进行编组/解组。

更新以回复评论:

使用更新后的 xml,类将如下所示:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "DashboardDTOs")
public class DashboardDTOs {

    @XmlElement(name = "DashboardDTO", namespace = "http://schemas.datacontract.org/2004/07/PS.SharedWebServices.Response")
    private List<DashboardDTO> dashboardDTO;
}

and:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(propOrder = {
        "value",
        "code",
        "Nnme",
})
public class DashboardDTO {
    @XmlElement(name = "Value", namespace = "http://schemas.datacontract.org/2004/07/PS.SharedWebServices.Response")
    private double value;

    @XmlElement(name = "Code", namespace = "http://schemas.datacontract.org/2004/07/PS.SharedWebServices.Response")
    private String code;

    @XmlElement(name = "Name", namespace = "http://schemas.datacontract.org/2004/07/PS.SharedWebServices.Response")
    private String Nnme;
}

现在使用 xml 文件(为了方便):

<Response xmlns="http://tempuri.org/">
    <Result xmlns:a="http://schemas.datacontract.org/2004/07/PS.SharedWebServices.Response" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
        <a:Errors />
        <a:Count>329</a:Count>
        <a:Return>SUCCESS</a:Return>
        <a:DashboardDTOs>
            <a:DashboardDTO>
                <a:Value>28.58</a:Value>
                <a:Code>O001</a:Code>
                <a:Name>Test2</a:Name>
            </a:DashboardDTO>
            <a:DashboardDTO>
                <a:Value>40.22</a:Value>
                <a:Code>O002</a:Code>
                <a:Name>Test2</a:Name>
            </a:DashboardDTO>
            <a:DashboardDTO>
                <a:Value>54.11</a:Value>
                <a:Code>O003</a:Code>
                <a:Name>Test3</a:Name>
            </a:DashboardDTO>
        </a:DashboardDTOs>
    </Result>
</Response>

并尝试编组/解组是否在简单的 main 中工作:

public static void main(String[] args) {

    try {

        File file = new File("response.xml");
        JAXBContext jaxbContext = JAXBContext.newInstance(Response.class);
        Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();

        Response response = (Response) jaxbUnmarshaller.unmarshal(file);
        System.out.println(response);

    } catch (JAXBException e) {
        e.printStackTrace();
    }

}

对我来说效果很好。在主要部分尝试一下,如果它有效,但在您的应用程序中不起作用,请告诉我,我们可以看看那里还有什么问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JAXB - 将 SOAP 映射到 Java 类 的相关文章

  • XSD 架构和 JAXB 类中的多态性

    我有一个像这样的xml
  • JAXB 将 XML 元素解组到 HashMap

    我发现很多文章描述了如何将 XML 元素序列解组到 HashMap 只要它们位于 父 元素内 但是 我无法将此与直接在根元素下的子元素一起使用 选项 1 有效
  • PHP NuSoap 中的复杂类型

    我正在使用 PHP 中的 NuSoap 库构建一个 Web 服务 我的 Web 服务将充当客户端和供应商现有的 Web 服务之间的中间层 因此 客户端不是直接连接到供应商 而是连接到我的 Web 服务 我的 Web 服务连接到供应商并获取响
  • Jackson 或 JAXB,哪一个更适合 JSON? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我想知道 JSON Jackson 或 JAXB 哪一个更好 我做了一些研究 我知道 也许我错了 我们不应该使用 JAXB 来转换 JSON 某
  • REST 何时/如何取代 SOAP [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我目前正在写关于 IT 技术等的论文
  • 在同一 URL 上运行 SOAP 和 RESTful

    假设我们有一个响应主机标头 kebab shop intra net 的网站 此 URL 中是否可以同时包含 SOAP 和 RESTful 也就是说 这两者都是在已部署的代码中处理的 kebab shop intra net takeawa
  • 如何展平嵌套 JSON

    尝试将嵌套的 json 响应从 2 层深度压平到 1 层 这是我在 Go Playground 上的工作代码 http play golang org p kHAYuZUTko http play golang org p kHAYuZUT
  • Apache CXF 使附加类对于 JAXB 上下文“已知”

    如何配置 Apache CXF 客户端和服务器在将 DTO 序列化为 XML 时将附加类传递给 JAXBContext 我无法使用 XmlSeeAlso 注释 因为这些类在带有数据协定的 jar 编译时是未知的 但在客户端编译时是已知的 在
  • JAXB/Jackson:没有父标签的两个元素的序列

    Update 寻找杰克逊orJAXB 解决方案 在对 Jackson 的行为进行了一些研究之后 我发现 Jackson 总是会使用集合的包装器 所以杰克逊可能无法满足我的需求 因此 将 JAXB 添加到标题中 原始问题 我需要为以下 XML
  • 通过 PHP Curl 调用 SoapAction

    我想通过 PHP 重新连接我的路由器 控制台命令如下 curl http 192 168 178 1 49000 upnp control WANIPConn1 H Content Type text xml charset utf 8 H
  • 在 JAXB 或 Xstream 中,是否可以在解组期间过滤掉类型/值上的某些子元素

    希望大家都好 快速提问看看是否有人有任何反馈 过去两天我正在尝试 JaxB 和 Xstream 我基本上使用 XML 库将 XML 编组到 Java 对象或从 Java 对象中解组 这是一项非常简单的任务 我很快就完成了 但是 我想要解组到
  • 使用 JAX-WS 的 SOAP 消息中的嵌套标记中没有命名空间

    我正在尝试使用 JAX WS 和 wsimport 编写一个使用给定 Web 服务的 Java 应用程序 它发送到服务的 SOAP 消息大部分是正确的 然而 传递给服务函数的参数之一是字符串数组 尽管在 SOAP XML 中为数组本身指定了
  • 使用 jaxb 编组时使用派生类

    我有一个具有公共基类的对象列表 我尝试使用 jaxb 将其序列化为 XML 我希望在编组时使用派生类的注释 但我在实现这一点时遇到了麻烦 import java util Arrays import java util List impor
  • Xml 瞬态无法工作 jaxb(Moxy)。?

    Xml 瞬态注释不适用于以下模型 XmlRootElement public class JdfValidation private String name private String dataType private String er
  • 返回 SOAP xml - Android

    在处理 Web 服务时 我使用适用于 Android 的 k2SOAP SoapObject request new SoapObject NAMESPACE METHOD NAME request addProperty ProjectI
  • 从soap标头中删除mustUnderstand属性

    如何从轴客户端中的soap标头中删除mustunderstand属性 即使我没有特别设置它 当我设置soap标头信息mustundertand时 actor属性会自动添加到soap消息中 有人知道如何删除它们吗 我正在使用 Axis2 1
  • java.util.Map 属性的 Jaxb 命名空间

    我有一个包含哈希图的简单类 XmlRootElement public class Customer private long id private String name private Map
  • 未找到类型:'(架构,http://www.w3.org/2001/XMLSchema,)

    我正在使用 suds client 来提供肥皂 wsdl 服务 当我尝试为肥皂服务设置肥皂水客户端时 我收到 类型未找到 错误 我到处寻找 有许多未解答的问题具有相同的错误 我将链接添加为问题1 https stackoverflow co
  • 使用 Jaxb 和 JDK 9 的小程序中的非法反射访问[重复]

    这个问题在这里已经有答案了 我有一个 Java 小程序 它提供了一个 GUI 来调用 Web 服务 它使用 Jaxb 解析 XML 数据并将其解组为对象 它可以在 Java 1 5 到 1 8 上正确运行 对于 Java 9 情况就不那么严
  • Axis2 错误:要输出的文本中的空白字符 (0x4) 无效

    我创建了一个 Java 客户端 使用 Axis2 1 7 6 作为代码生成器与 SOAP Web 服务进行交互 问题在于客户端的某些输入抛出异常并显示以下消息 org apache axis2 AxisFault Invalid white

随机推荐

  • Python open("x", "r") 函数,我如何知道或控制文件应该具有哪种编码?

    如果 python 脚本使用open filename r 函数打开并随后读取文本文件的内容 我如何知道该文件应该具有哪种编码 请注意 由于我是从自己的程序执行此脚本 因此如果有任何方法可以通过环境变量来控制它 那么这对我来说就足够了 顺便
  • Python 中子类化 string.Template 的示例?

    尽管我在文档中看到了多次这样做的参考 但我还没有找到在 Python 中子类化 string Template 的好例子 网上有这方面的例子吗 我想将 更改为不同的字符 并且可能更改标识符的正则表达式 来自蟒蛇docs http docs
  • 谷歌应用程序引擎中的 OAuth

    我正在尝试在 python 上的谷歌应用程序引擎中实现 Oauth 对于我的应用程序 我使用 gae 会话和我的模型来验证用户身份 这对我来说会更有帮助 如果你能提供一些例子 您可能想查看以下资源 The App Engine OAuth
  • 如何测量 Spark 上查询的执行时间

    我需要测量 Apache Spark Bluemix 上查询的执行时间 我尝试过的 import time startTimeQuery time clock df sqlContext sql query df show endTimeQ
  • iOS:跨viewControllers在导航栏下方添加视图

    我有一个这样的项目 但我试图弄清楚如何在整个导航栏的导航栏下方添加横幅 以便在需要时可以将其隐藏 你们中有人知道我该怎么做吗 在主视图控制器中实现协议UINavigationControllerDelegate并在选择器中navigatio
  • in_array() 无法按预期工作[重复]

    这个问题在这里已经有答案了 对于这个数组 options Array 0 gt 0 1 gt 1 2 gt 2 PHP 返回 TRUE this gt assertTrue in array Bug options TRUE this gt
  • .NET 的 SFTP 库 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • OpenLayers 标记图标问题

    我正在我的网站中创建 OSM 地图 并使用 openlayer 添加一些标记 我的问题是我总是得到相同的标记图标
  • 有没有办法重置 Julia 中的当前工作目录?

    假设当前工作目录是C 保存 jl文件的目录 然后我将cwd切换到一些子文件夹来执行一些任务 有没有办法直接将cwd重置回C 之后 即最初的cwd 或者 是否可以独立于当前工作目录来定位正在运行的 jl 文件所在的目录 无需事先将 cwd 保
  • 如何在页面中自动刷新Cognito Token

    我使用 AWS Cognito 服务进行身份验证 在我的 Angular 7 应用程序中 我使用 Amplify Auth 来保护我的页面 如果用户在不同页面之间导航 Amplify 将自动处理令牌刷新 并且他们不会看到令牌过期 如果用户长
  • Pydev 显示未解决的导入,但脚本运行?

    我正在使用 PyDev 我正在尝试将我的项目类组织到包中 例如在一个文件夹中 我有一个模块 libraries fund price library py 在我的项目的另一个文件中 我尝试使用以下方式导入 from libraries fu
  • 如何提取文本中使用的关键字? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的
  • 使用 glFrustum 进行离轴投影

    我正在尝试使用 OpenGL 对场景进行离轴投影 并且我阅读了该文档罗伯特 库伊马的离轴投影 http csc lsu edu kooima pdfs gen perspective pdf现在对实际需要做什么有了更好的了解 但仍然有一些部
  • Java PaintComponent 告诉是否再次调用

    谷歌搜索了几天 我不知道如何判断在处理paintComponent时是否调用了paintComponent 这个过程漫长而复杂 如果我有第二个 或第三个 绘制请求 我想中止当前的绘制过程并重新开始最近的请求 你不能 打电话给paintCom
  • TensorFlow 2.0 中不再提供投影变换,我该怎么办?

    我的团队正在切换到 TensorFlow 2 0 我正在研究数据增强管道 TensorFlow 1 X 有tf contrib image transform允许投影变换 TensorFlow 中没有变换函数tf image它肯定没有tf
  • AzureDev Ops CI 构建未更新版本 (VersionPrefix)

    我有一个 Azure DevOps 管道 其中包含本地 nuget 包到本地工件存储库 然后推送到 nuget org 但是它不会更新版本并保持在1 0 0 build ver 在本地 azure DevOps 项目工件中 同时版本卡在包的
  • 如何根据控件的属性(Top/Tabstop)设置WPF动画BeginTime

    我有一个 WPF 应用程序 它在垂直堆栈面板中具有一系列按钮 类似于 DVR 菜单的外观 我想出了如何制作一个动画 当每个新的菜单页面加载时 按钮 控件全部 unfade fall deblur 无论什么 都存在 这很好 但有点太统一了 我
  • 使用非常量表达式作为模板参数

    这是后续如何获取可变参数模板类中函数指针的参数类型 https stackoverflow com questions 9065081 how do i get the argument types of a function pointe
  • 生成器完成后调用自耕农生成器

    我希望在第一个生成器完成安装后调用另一个 yeoman 生成器 这将基于我对其中一个提示给出的答案 我尝试在最后调用它 end function this installDependencies callback function if t
  • JAXB - 将 SOAP 映射到 Java 类

    我需要帮助将我的 Soap Envelope 映射到 java 类 我的目的是将结果操纵到数据库 我在获取 SOAP 信封或使用 DB 方面没有任何问题 我的问题完全在于 JABX 以及根据我的 SOAP 信封映射我的类 这是我的肥皂