FrontPage

XStream

XMLとJavaオブジェクトの変換ツール(シリアライザー,Serializer)

XMLからJavaオブジェクトへ、余分な、予期しないXML Elementを含む場合の処理

XStreamをextendして、wrapMapperメソッドの例外で処理する。

package hogehoge.com

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.converters.SingleValueConverter;
import com.thoughtworks.xstream.converters.basic.DateConverter;
import com.thoughtworks.xstream.io.xml.XmlFriendlyReplacer;
import com.thoughtworks.xstream.io.xml.XppDriver;
import com.thoughtworks.xstream.mapper.CannotResolveClassException;
import com.thoughtworks.xstream.mapper.MapperWrapper;
 
public class MyXStream extends XStream {   // 名前は適当に
	
 	public MyXStream() {                // コンストラクタ
		super();
		
        registerConverter(new SingleValueConverter() {
            @SuppressWarnings("unchecked")
            @Override
            public boolean canConvert(Class type) {
                return type.equals(Long.class);
            }
            
            @Override
            public Object fromString(String str) {
                if(str.isEmpty())
                    return null;
                 return Long.valueOf(str, 10);
            }
            
            @Override
            public String toString(Object obj) {
                return obj.toString();
            }
        }); 

 		// Aliases
		processAnnotations(XXXX.class);  // XMLのXXXX element のannotation
               processAnnotations(YYYY.class);  //(コンストラクタに書きたい場合)
	}
	
	
	// mapper  (ignore not defined element)
    protected MapperWrapper wrapMapper(MapperWrapper next) {
         return new MapperWrapper(next) {
            @SuppressWarnings("unchecked")
            public boolean shouldSerializeMember(Class definedIn, String fieldName) {
                 
                try {
                    return definedIn != Object.class || realClass(fieldName) != null;
                } catch(CannotResolveClassException cnrce) { //予期しないXMLのelementはここでキャッチ

                   //System.out.println("shouldSerializeMember("+definedIn.getName()+", "+fieldName+") failed to resolve class; skipping...");
                    return false;
                }
            }
        };
    }	
}

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-08-29 (月) 21:41:06 (1274d)