@Override public void setValue(T value) { this.actualValue = value; checkPrismContext(); if (value != null && prismContext.canSerialize(value)) { try { this.valueForStorageWhenEncoded = prismContext.xmlSerializer().serializeAnyData(value, new QName("value")); } catch (SchemaException e) { throw new SystemException( "Couldn't serialize value of type " + value.getClass() + ": " + e.getMessage(), e); } this.valueForStorageWhenNotEncoded = null; encodingScheme = EncodingScheme.PRISM; } else if (value == null || value instanceof Serializable) { this.valueForStorageWhenNotEncoded = value; this.valueForStorageWhenEncoded = null; encodingScheme = EncodingScheme.NONE; if (value instanceof Itemable) { throw new IllegalStateException( "Itemable value is used as not-encoded serializable item; value = " + value); } } else { throw new IllegalStateException( "Attempt to put non-serializable item " + value.getClass() + " into " + this.getClass().getSimpleName()); } }