【问题标题】:Change namespace of objects in jaxb更改 jaxb 中对象的命名空间
【发布时间】:2016-05-04 15:44:10
【问题描述】:

我必须管理许多网络服务,并且必须将我的应用程序放在它们和客户端之间:客户端会呼叫我,我会呼叫服务器并管理响应以将它们发送给客户端。

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

让我们说:

<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>

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

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

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

【问题讨论】:

    标签: java namespaces jaxb unmarshalling


    【解决方案1】:

    通用对象包应该定义它自己的 XML 命名空间...我已经完成了您尝试做的那种配置,但是我从 XSD 文件生成了对象...示例:

    XSD 共享:

    <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>
    

    【讨论】:

    • 谢谢,但是当我调用服务并尝试将它们的响应绑定到我的模型时出现问题,我无法更改服务,因为不是我的。问题在于将他们的响应绑定到我的模型,因为他们没有那个通用的包。 :( 我不认为我想做的事情是可能的......虽然不是那么奇怪......
    • 这只是一个想法(我之前没有尝试过),但您可能应该检查是否可以将服务的对象扩展(继承)到您自己的对象命名空间中。
    猜你喜欢
    • 1970-01-01
    • 2012-06-12
    • 1970-01-01
    • 2020-10-11
    • 2012-04-08
    • 1970-01-01
    • 1970-01-01
    • 2014-06-07
    • 2010-12-10
    相关资源
    最近更新 更多