【发布时间】:2015-08-25 23:19:46
【问题描述】:
我在一些 Web 服务对象上使用 JAXB,然后将这些对象编组为 XML,以便将它们发送到 UI。我的问题是我的父 Java 对象(提供者)包含子子对象(服务)。两个不同的提供者可以共享同一个服务。在 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 对象(注意:我不想使用具有服务列表和提供者列表的包装器对象)。
这可能使用 JAXB 注释或其他方式吗?当我在 UI 端收到 XML 时,如何将其解组为具有服务的提供者列表,而不创建应该是同一个 Java 对象的服务的副本?提前致谢。
【问题讨论】:
-
JAXB 只是将 XML 映射(绑定)到 java 类。如果 XML 不同,并且您有一个匹配的 Schema,那么您将获得匹配的 Java 类。所以,是的,如果您可以控制 XML / Schema / WSDL,您可以让它看起来完全符合您想要的方式。
标签: java xml web-services jaxb marshalling