java - JAXB - 编码和解码 Java 子对象

标签 java xml web-services jaxb marshalling

我在一些 Web 服务对象上使用 JAXB,然后将这些对象编码到 XML 中,以便可以将它们发送到 UI。我的问题是我的父 Java 对象(Provider)包含子子对象(Service)。两个不同的提供商可以共享相同的服务。在 Java 中,这是一个 Service 对象,由两个 Provider 对象引用,但在 XML 中,它被转换为如下内容:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
  <soapenv:Body>
    <dlwmin:getProviders2Response xmlns:dlwmin="http://..." xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <provider xsi:type="provider">
        <name>First Provider</name>
        <providerId>1</providerId>
        <service>
          <id>1</id>
          <serviceName>Abc</serviceName>
        </service>
      </provider>
      <provider xsi:type="provider">
        <name>Second Provider</name>
        <providerId>2</providerId>
        <service>
          <id>1</id>
          <serviceName>Abc</serviceName>
        </service>
      </provider>
    </dlwmin:getProviders2Response>
  </soapenv:Body>
</soapenv:Envelope>

但我想要的是这样的:

  <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soapenv:Body>
      <dlwmin:getProvidersResponse xmlns:dlwmin="http://..." xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <provider> 
          <name>First Provider</name>
          <providerId>1</providerId>
          <service>1</service>
        </provider>
        <provider> 
          <name>Second Provider</name>
          <providerId>2</providerId>
          <service>1</service>
        </provider>
        <service> 
          <id>1</id> 
          <serviceName>Abc<serviceName/>
        </service>
      </dlwmin:getProvidersResponse>
    </soapenv:Body>
  </soapenv:Envelope>

或者也许:

  <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soapenv:Body>
      <dlwmin:getProvidersResponse xmlns:dlwmin="http://api.ws.hana.dhs.hawaii.gov/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <provider name="First Provider" providerId="1" service="1"/>
        <provider name="Second Provider" providerId="2" service="1"/>
        <service id="1" serviceName="Abc"/>
      </dlwmin:getProvidersResponse>
    </soapenv:Body>
  </soapenv:Envelope>

Service 元素直接来自 Provider 对象(注意:我不想使用具有服务列表和 Provider 列表的包装器对象)。

使用 JAXB 注释或其他方式可以实现这一点吗?当我在 UI 端收到 XML 时,如何将其解码回具有服务的提供者列表中,而不创建应该是同一 Java 对象的服务重复项?提前致谢。

最佳答案

您需要@XmlIdRef,这里是一个例子

JAXB and Shared References: @XmlID and @XmlIDREF

和@XmlSeeAlso

XmlIDREF is not working 或者 JAXB and Inheritance

关于java - JAXB - 编码和解码 Java 子对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32215645/

相关文章:

java - 比较多个 jar 文件的两个不同版本

php - JSON 与 XML 的性能考虑

visual-studio - ASMX:tempuri.org 应该被什么取代?

xml - 创建不带结束标记的 XML 元素

html - 什么是 magento 虚拟主机?如何在 magento 中上传我的网页?

java - 什么是泽西过滤器?

java - 从用户的多个 OU 递归查询 LDAP 角色

java - 为什么我们需要 9-patch?

java.lang.ClassNotFoundException : org. apache.commons.codec.binary.Base64

c# - 在特定区域插入节点