2010-07-23 77 views
3

在我的一个项目中,我使用JAXB2编组器,它有一个契约优先的Web服务,我从XML模式生成对象。JAXB Java和XSD映射

一切正常。但是,我有一个“代码可用性”问题。让我举一个例子。

模式:

<xs:complexType name="personContractAlertListType"> 
    <xs:sequence> 
     <xs:element ref="PersonContractAlert" minOccurs="0" maxOccurs="unbounded"/> 
    </xs:sequence> 
</xs:complexType> 


<xs:element name="PersonContractAlertsResponse"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element ref="PersonContractAlertList"/> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 

所以为了访问PersonContractAlerts列表我要叫:

PersonContractAlertsResponse.getPersonContractAlertListType().getPersonContractAlert() 

这是有点长。

我的问题是:我怎样才能摆脱getPersonContractAlertListType(),并直接进入:PersonContractAlertsResponse.getPersonContractAlert()

因为那包装元素就真的只为XSD,我不需要在我的Java对象。

换句话说有:

<Element1> 
<Wrapper> 
<Element2/> 
</Wrapper> 
</Element1> 

而且我希望它在Java中映射到:Element1.getElement2()

也许使用JAXB适配器。并记住我不想触摸生成的对象。这必须在编组设置(适配器,拦截器等)或XSD(可能有一些操作设置)中完成。

非常感谢!

UPDATE:

我发现一些绑定操作教程:

https://jaxb.dev.java.net/guide/Using_different_datatypes.html

我将研究尝试使用JAXB绑定。

+0

该链接现在是https://jaxb.java.net/guide/Using_different_datatypes.html – 2013-05-07 19:42:41

回答

0

要获得所需的对象模型,您可以使用基于XPath的映射扩展EclipseLink JAXB (MOXy)

+0

但问题是如果我可以做到这一点,而无需更改生成的类。 – 2010-07-26 15:42:20

+0

要在XML和想要的对象之间移动,需要一个XmlAdapter和一个自定义来使用它。改变你的模型可能会更清洁。 – 2010-07-26 16:06:29

-1

我不知道你的具体情况,但总的来说,键入一个额外的30个字符可能不是一个足够大的代价来证明,甚至寻找一个解决这个。特别是因为Eclipse会自动完成该方法调用。

+0

你错过了这个问题的关键 – 2010-09-24 18:28:29