@@ -285,10 +285,33 @@ [self release]; @throw e; } @finally { free(cString2); } + + return self; +} + +- initWithSerialization: (OFXMLElement*)element +{ + @try { + OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; + + if (![[element name] isEqual: @"object"] || + ![[element namespace] isEqual: OF_SERIALIZATION_NS] || + ![[[element attributeForName: @"class"] stringValue] + isEqual: [isa className]]) + @throw [OFInvalidArgumentException newWithClass: isa + selector: _cmd]; + + self = [self initWithString: [element stringValue]]; + + [pool release]; + } @catch (id e) { + [self release]; + @throw e; + } return self; } - (void)dealloc