首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有多个名称空间的Jibx绑定

具有多个名称空间的Jibx绑定
EN

Stack Overflow用户
提问于 2013-06-21 17:35:24
回答 1查看 1.5K关注 0票数 0

我有以下XML,需要为其开发Jibx绑定

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<conf:confirmationMessage xmlns:conf="http://webaddress/entity/confirmation/v1_0" xmlns:cli="http://webaddress/entity/client/v1_0" xmlns:cust="http://webaddress/entity/custodian/v1_0" xmlns:fin="http://webaddress/entity/financial/v1_0" xmlns:sto="http://webaddress/entity/stock/v1_0" xmlns:tra="http://webaddress/entity/trade/v1_0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://webaddress/entity/confirmation/v1_0 ../XSD_V2/Confirmation.xsd ">
   <conf:id>20130313588741</conf:id>
   <conf:status>CS Generated</conf:status>
   <conf:type>INS</conf:type>
   <conf:trade>
       <tra:tradeID>3068353</<tra:tradeID>
       <tra:clientID>82911</<tra:clientID>
       <<tra:tradeDate>2013-02-28T00:00:00</<tra:tradeDate>
   </conf:trade>
</conf:confirmationMessage>

我写了下面的biding,但由于命名空间"tra“的原因,它不起作用。

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<binding>
    <mapping name="confirmationMessage" class="com.webaddress.Confirmation">
        <namespace uri="http://webaddress/entity/confirmation/v1_0" default="elements"/>
        <value name="id" field="id" default="default-value" usage="optional" />
        <value name="status" field="status" default="default-value" usage="optional" />
        <value name="type" field="type" default="default-value" usage="optional" />
        <collection field="trade" factory="com.package.trades.JibxConfirmationUmarshaller.listFactory">
            <!--<structure map-as="com.webaddress.Trade" />-->
            <structure name="trade" />
        </collection>
    </mapping> 

    <mapping name="trade" class=om.webaddress.Trade">
        <namespace prefix="tra" uri="http://webaddress/entity/trade/v1_0" default="elements"/>
        <value name="tradeID" field="tradeID" default="default-value" usage="optional" />

        <value name="clientID" field="clientID" usage="optional"
        deserializer="com.package.trades.JibxConfirmationUmarshaller.deserializeBigInt" />

        <value name="tradeDate" field="tradeDate" usage="optional"
        deserializer="com.package.trades.JibxConfirmationUmarshaller.deserializeDate" />
        <value name="activity" field="activity" default="default-value" usage="optional" />
    </mapping>
</binding>

你知道我该怎么做吗?

EN

回答 1

Stack Overflow用户

发布于 2013-08-17 04:50:06

代码语言:javascript
复制
The issue probably lies in the fact that the name "trade" is from the namespace
"http://webaddress/entity/confirmation/v1_0".  Your jibx binding makes it assume
that "trade" is from the namespace "http://webaddress/entity/trade/v1_0".

The strings "conf" and "tra" are just abbreviations for
"http://webaddress/entity/confirmation/v1_0" and "http://webaddress/entity/trade/v1_0"

正确的答案可能如下所示:

代码语言:javascript
复制
<mapping name="trade" ns="http://webaddress/entity/confirmation/v1_0"class=om.webaddress.Trade">
    <namespace prefix="tra" uri="http://webaddress/entity/trade/v1_0" default="elements"/>
    <namespace uri="http://webaddress/entity/confirmation/v1_0"/>
    <value name="tradeID" field="tradeID" default="default-value" usage="optional" />

    <value name="clientID" field="clientID" usage="optional"
    deserializer="com.package.trades.JibxConfirmationUmarshaller.deserializeBigInt" />

    <value name="tradeDate" field="tradeDate" usage="optional"
    deserializer="com.package.trades.JibxConfirmationUmarshaller.deserializeDate" />
    <value name="activity" field="activity" default="default-value" usage="optional" />
</mapping>

您需要包含计划使用的任何名称空间的标记,但随后需要将"ns=“添加到使用该名称空间的任何元素中(除非"default=”子句适用)。在这种情况下,您不希望使用"trade“元素的默认名称空间。您希望使用另一个名称空间。

只有当您计划将此绑定用于输出时,才需要prefix=。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17231962

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档