我在一些 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 对象的服务重复项?提前致谢。
最佳答案
关于java - JAXB - 编码和解码 Java 子对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32215645/