From 2d9580eb86037ee37baaefffd1c4c384c4a15cf9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ryszard=20Wi=C5=9Bniewski?= Date: Sat, 13 Mar 2010 12:51:13 +0100 Subject: [PATCH] ResXmlSerializer: normal value serializing if attr is undefined. --- .../res/decoder/ResXmlSerializer.java | 27 +++++++++++++------ 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/src/brut/androlib/res/decoder/ResXmlSerializer.java b/src/brut/androlib/res/decoder/ResXmlSerializer.java index 7df4aaca..a39b345c 100644 --- a/src/brut/androlib/res/decoder/ResXmlSerializer.java +++ b/src/brut/androlib/res/decoder/ResXmlSerializer.java @@ -18,11 +18,11 @@ package brut.androlib.res.decoder; import brut.androlib.*; +import brut.androlib.err.UndefinedResObject; import brut.androlib.res.AndrolibResources; import brut.androlib.res.data.ResPackage; import brut.androlib.res.data.value.ResAttr; import brut.androlib.res.data.value.ResScalarValue; -import brut.androlib.res.data.value.ResValue; import java.io.IOException; import org.xmlpull.mxp1_serializer.MXSerializer; import org.xmlpull.v1.XmlSerializer; @@ -44,24 +44,35 @@ public class ResXmlSerializer extends MXSerializer { if (! mDecodingEnabled) { return super.attribute(namespace, name, value); } + String origVal = value; try { ResScalarValue resValue = mCurrentPackage.getValueFactory().factory(value); + value = null; - if (namespace == null || namespace.isEmpty()) { - value = resValue.toResXmlFormat(); - } else { + if (namespace != null && ! namespace.isEmpty()) { String pkgName = RES_NAMESPACE.equals(namespace) ? "android" : mCurrentPackage.getName(); - ResAttr attr = (ResAttr) mCurrentPackage.getResTable() - .getValue(pkgName, "attr", name); - value = attr.convertToResXmlFormat(resValue); + try { + ResAttr attr = (ResAttr) mCurrentPackage.getResTable() + .getValue(pkgName, "attr", name); + value = attr.convertToResXmlFormat(resValue); + } catch (UndefinedResObject ex) { + System.err.println(String.format( + "warning: udefined attr when decoding: " + + "ns=%s, name=%s, value=%s", + namespace, name, origVal)); + } + } + + if (value == null) { + value = resValue.toResXmlFormat(); } } catch (AndrolibException ex) { throw new IllegalArgumentException(String.format( "could not decode attribute: ns=%s, name=%s, value=%s", - namespace, name, value), ex); + namespace, name, origVal), ex); } if (value == null) {