2012-08-15 23 views
1

可以有一個人幫我生成在單個註釋使用EclipseLink MOXy @XmlPath支持具有不同值的元素,例如<控股ID = 「ID1」 SRC = 「6」 R = 「1」>

的EclipseLink @XmlPath MOXY標籤<Pty ID="ID1" Src="6" R="1">

非常感謝。

+0

你能更新你的問題包括您的域模型的外觀? – 2012-08-15 15:26:01

+0

我需要使用EclipseLink MOXY'@ XmlPath'生成FIXML,如下所示。 系統只有基於ID值的單個標籤的ID值, 我需要爲Src和R屬性設置默認值。 ' <子ID = 「ID3」 典型值= 「2」/> <控股ID = 「ID2」 SRC = 「1」 R = 「2」> <子ID = 「ID4」 典型值=「79228162514264337593543950335 「/> Sreeman 2012-08-16 04:13:16

回答

0

我不確定我有你的要求是否正確,但這是我認爲你想要做的一個回答。

IdAdapter

你可以寫一個XmlAdapter價值單個ID轉換成具有多種特性的對象。這些其他屬性將使用默認值進行設置。

package forum11965153; 

import javax.xml.bind.annotation.XmlAttribute; 
import javax.xml.bind.annotation.adapters.XmlAdapter; 

public class IdAdapter extends XmlAdapter<IdAdapter.AdaptedId, String> { 

    public static class AdaptedId { 
     @XmlAttribute(name="ID") public String id; 
     @XmlAttribute(name="Src") public String src = "6"; 
     @XmlAttribute(name="R") public String r = "1"; 
    } 

    @Override 
    public AdaptedId marshal(String string) throws Exception { 
     AdaptedId adaptedId = new AdaptedId(); 
     adaptedId.id = string; 
     return adaptedId; 
    } 

    @Override 
    public String unmarshal(AdaptedId adaptedId) throws Exception { 
     return adaptedId.id; 
    } 
} 

控股

@XmlJavaTypeAdapter註釋用於指定XmlAdapter。要將值摺疊到根元素中,請使用MOXy的@XmlPath(".")註釋(請參閱:http://blog.bdoughan.com/2010/07/xpath-based-mapping.html)。

package forum11965153; 

import javax.xml.bind.annotation.*; 
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; 

import org.eclipse.persistence.oxm.annotations.XmlPath; 

@XmlRootElement(name="Pty") 
@XmlAccessorType(XmlAccessType.FIELD) 
public class Pty { 

    @XmlJavaTypeAdapter(IdAdapter.class) 
    @XmlPath(".") 
    String id; 

} 

jaxb.properties

如你所知,指定莫西爲您的JAXB提供者,你需要包括在同一個包中的以下項域模型稱爲jaxb.properties文件(見: http://blog.bdoughan.com/search/label/jaxb.properties

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory 

演示

下面的演示代碼可以用來證明一切正常:

package forum11965153; 

import java.io.StringReader; 
import javax.xml.bind.*; 

public class Demo { 

    public static void main(String[] args) throws Exception { 
     JAXBContext jc = JAXBContext.newInstance(Pty.class); 

     Unmarshaller unmarshaller = jc.createUnmarshaller(); 
     StringReader xml = new StringReader("<Pty ID='ID1' Src='6' R='1'/>"); 
     Pty pty = (Pty) unmarshaller.unmarshal(xml); 

     Marshaller marshaller = jc.createMarshaller(); 
     marshaller.marshal(pty, System.out); 
    } 

} 

輸出

下面是輸出從運行演示代碼:

<?xml version="1.0" encoding="UTF-8"?> 
<Pty ID="ID1" Src="6" R="1"/> 
+0

非常感謝您的幫助。 <子ID = 「ID5」 典型值= 「3」/> <子ID = 「ID6」 典型值= 「4001」/> <控股ID = 「ID3」 SRC = 「I」 R =「3」> Sreeman 2012-08-16 15:29:36

+0

我有mutilevel/hirarchial標籤。我想知道是否有可能在單個標籤中生成'「'。 @XmlPath(「ExecRpt/Pty/@ ID」)在同一個標​​記我想注入src和R在同一個標​​記。 – Sreeman 2012-08-16 15:40:42

相關問題