2014-10-17 84 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