开发者

how can i format date or double values when persisting objects using simple xml

开发者 https://www.devze.com 2023-01-11 05:56 出处:网络
I am using simple xml framework from http://simple.sourceforge.net/. How can i format the date or double values? I see a function calle开发者_StackOverflow社区d transform but how do I apply it all dou

I am using simple xml framework from http://simple.sourceforge.net/. How can i format the date or double values? I see a function calle开发者_StackOverflow社区d transform but how do I apply it all double and date fields in my class?


There's two ways I can think of to do this.

First:

You can implement your own Matcher. You can pass this in to the Persister when you create it. Your Matcher only has to return a Transform for the types you are interested in. Any type your custom Matcher does not match is attempted by the default ones. You'll probably have to take a look at the source code and see how the DateTransform and FloatTransform are implemented. They are quite short so it's perfectly doable. This solution will be useful only if you want to transform all types in a specific way.

Second:

Create a String element that will hold the serialized data.

@Element(name = "myelement")
private String strMyElement;

private MyElementType myElement;

Then use the @Persist and @Validate annotations to hook into the serialization process.

@Persist
private void persist() {
  strMyElement = myElement.toString();
}

@Validate
private void validate() {
  myElement = myElement.fromString(strMyElement);
}

This way is a bit more of a hack but it's useful when you only need to override the default serialization in specific cases. It would probably get unwieldy if you had to do it for every instance of a specific type. In that case I'd use the first method.


Simple uses a TransformCache to map types to Transformer objects. So if filed is of a java.lang.Date' type it will use theorg.simpleframework.xml.transform.DateTransform` to transform the Date object to String.

I guess you have to implement a custom Transformer for Date or the primitive long and (temporarily) replace the default Transformer for that type in the cache.

I didn't find any guide too, the drafted strategy is based on a look on the simple sources.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号