2014-10-17 99 views
2

我正在開發一個使用Spring MVC的REST API。我使用和生成的對象是從NCPDP(http://www.ncpdp.org/)XSD生成的(使用JAXB)。我有一切工作時請求進來,但我想添加額外的屬性到傳出請求的根元素。如何在JAXB生成類時向根元素添加屬性?

現在,我的傳出響應如下所示:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<transport:Message xmlns:transport="http://www.ncpdp.org/schema/transport"> 
    <transport:Header> 
     ... 
    </transport:Header> 
    <transport:Body> 
     <transport:Status> 
      <transport:Code>010</transport:Code> 
      <transport:Description>OK</transport:Description> 
     </transport:Status> 
    </transport:Body> 
</transport:Message> 

它應該如下所示:

<?xml version="1.0"?> 
<transport:Message xmlns:transport="http://www.ncpdp.org/schema/transport" xmlns:datatypes="http://www.ncpdp.org/schema/datatypes" 
    xmlns:script="http://www.ncpdp.org/schema/script" xmlns:structures="http://www.ncpdp.org/schema/structures" 
    xmlns:pa-structures="http://www.ncpdp.org/schema/pa-structures" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    StructuresVersion="v2014041" ECLVersion="v2014041" DatatypesVersion="v2014041" PA-StructuresVersion="v2014041" 
    TransactionVersion="v2014041" TransportVersion="v2014041" TransactionDomain="SCRIPT"> 
    <transport:Header> 
    ... 
    </transport:Header> 
    <transport:Body> 
    <transport:Status> 
     <transport:Code>010</transport:Code> 
    </transport:Status> 
    </transport:Body> 
</transport:Message> 

我不認爲我需要定義的所有命名空間(因爲他們」不用),但我確實需要StructuresVersion和所有其他屬性。有沒有辦法修改我的bindings.xjb以包含這些屬性?或者我必須將生成的代碼複製到我的源代碼樹中並添加註釋來執行此操作?

感謝,

馬特

+0

您的模式是否聲明瞭這些屬性?請發佈聲明'transport:Message'的模式片段。 – lexicore 2014-10-17 18:31:47

+0

是的,它的確如此。在發佈這個問題之前,我從來沒有打擾過。對不起,浪費你的時間。 – 2014-10-17 19:01:22

+0

沒問題,發生這種情況。爲了避免誤導新用戶,我會將其作爲答案發布。 – lexicore 2014-10-17 19:04:11

回答

2

由於這些屬性在你的XML模式中聲明,你應該得到你的模式派生代碼相應的屬性。

它實際上並不重要,如果這是一個根元素或一些子元素。請重新檢查生成的代碼,尋找類似getStructuresVersion()的東西。所以你不需要做任何事情。

至於名字空間,你會得到他們自動聲明,當你元帥。但是,您可能會首先將它們聲明爲ns0,ns1等,這在可讀性方面並不太好。請參閱下面的問題:

Controlling namespace prefixes in JAXB

(這個問題本身,而不是答案)有關如何使用自定義的前綴映射器或this post布萊斯Doughan控制這些前綴信息。

+1

謝謝!甚至沒有想過要看看我是否可以調用message.setStructuresVersion('v2014041')。我有前綴找出了感謝bindings.xjb - https://gist.github.com/mraible/abad8d78c1f053ec686b。 – 2014-10-17 19:15:36

+0

@MattRaible這對'http://jaxb2-commons.dev.java.net/ namespace-prefix'很有用,你在那裏做了什麼。請考慮寫一個Q&A的帖子,這對其他用戶也很有價值。 – lexicore 2014-10-17 20:01:10