在jaxb中更改对象的命名空间

时间:2016-05-04 15:44:10

标签: java namespaces jaxb unmarshalling

我要管理很多网络服务,并且必须将我的应用程序放在他们和客户端:客户端会打电话给我,我会调用服务器并管理响应以将它们发送给客户。

请求和响应都有一个'信封定义:不同但几乎相同。

让我们说:

<req xmlns="namespaceReq">
<req-data>..different info 1..</req-data>
<info>...Info object...</info>
</req>

<resp xmlns="namespaceResp">
<resp-data>..different info 2...<resp-data>
<info>...Info object...</info>
</resp>

所以我想在请求和响应之间共享公共类-aka信息对象 - ;我已经为请求做了一个java包(请求的命名空间在其package-name和Req-req-data类中),另一个用于响应(在包名中包含响应的命名空间,以及还有,Resp和Resp-data类)并且已经完成了另一个包来保存公共部分(Info类),这就是我的问题......

我应该如何管理名称空间,以便将共同的Info对象共享给请求和响应?

如果我将请求的命名空间放在pa​​ckage-info.java中,它适用于请求但不适用于响应,如果我把响应它不适用于请求...

1 个答案:

答案 0 :(得分:1)

公共对象包应该定义自己的XML命名空间...我已经完成了你尝试做的配置,但我从XSD文件中生成了对象......例如:

XSD Commons:

<xs:schema
    targetNamespace="http://xyz/commons"
    xmlns:tns="http://xyz/commons"
    elementFormDefault="qualified"
    version="1.0"
    xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:complexType name="InfoType">
    <xs:sequence>
        <xs:element name="Address" type="xs:string" maxOccurs="1" />
    </xs:sequence>
  </xs:complexType>
</xs:schema>

XSD请求:

<xs:schema
targetNamespace="http://xyz/requests"
xmlns:tns="http://xyz/requests"
xmlns:commons="http://xyz/commons"
elementFormDefault="qualified"
version="1.0"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
>
  <xs:import namespace="http://xyz/commons" schemaLocation="commons.xsd" />

  <xs:element name="Request" type="tns:RequestType" />

  <xs:complexType name="RequestType">
    <xs:sequence>
        <xs:element name="info" type="commons:InfoType" />
    </xs:sequence>
  </xs:complexType>
</xs:schema>