2013-06-21 96 views
0

我有以下XML,我需要制定一個JIBX爲JIBX與多個命名空間結合

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

結合我寫了下面的招投標,但它不是因爲命名空間「TRA」

<?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> 
工作

任何想法,我可以使這項工作?

回答

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

正確的答案可能看起來是這樣的:

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