2013-04-26 64 views
1

我正在使用JAXB將我的對象保存爲XML。我有這個問題,雖然:我的一個類有一個字符串在將數據轉換爲XML之前預處理數據?

myclass.getFilePath() // returns an absolute file path 

它代表一個絕對文件路徑。在將此文件路徑寫入XML文件之前,我想將其相關化,因此我需要對我的getter進行某種預處理。這可能使用JAXB?

我知道我可以修改我的課程並添加getRelativePath()setBasePath()但我寧願以某種方式轉換我的文件路徑,只在導出到XML時執行此操作。

更新:

@XmlJavaTypeAdapter(MyConverter.class) 

應接近解決方案,但我還需要一種方式在一個參數(用於相對路徑的基本路徑)來傳遞 - 在這個任何暗示?

更新2

也許這不會工作:Anyway to pass a constructor parameter to a JAXB Adapter?現在將檢查它。

+0

您在更新2包含的方法是要走的路。 – 2013-04-26 13:54:24

回答

0

這似乎是類似於你想要的,只是一個想法

class Adapter extends XmlAdapter<String, File> { 
    @Override 
    public File unmarshal(String v) throws Exception { 
     return null; 
    } 

    @Override 
    public String marshal(File v) throws Exception { 
     return v.getAbsolutePath(); 
    } 
} 

public class Test1 { 
    @XmlJavaTypeAdapter(Adapter.class) 
    File file = new File("xxx"); 

    public static void main(String[] args) throws Exception { 
     JAXB.marshal(new Test1(), System.out); 
    } 
} 

輸出

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<test1> 
    <file>D:\workspace1\x\xxx</file> 
</test1>