Details
-
Bug
-
Resolution: Fixed
-
Major
-
12.6.2, 12.8
-
Unit
-
Unknown
-
N/A
-
N/A
-
Description
The UserReferenceConverter relies on the default UserReference#toString method when performing the conversion to String, but the DocumentUserReference#toString implementation doesn't rely on a serializer. So when trying to convert back the computed String to a UserReference it creates a wrong reference.
Here's a small groovy script to reproduce the bug in a wiki:
{{groovy}}
import org.xwiki.user.UserReference;
import org.xwiki.user.UserReferenceResolver;
import org.xwiki.component.util.DefaultParameterizedType;
import javax.inject.Inject;
import javax.inject.Named;
import org.xwiki.properties.converter.Converter;
import org.xwiki.model.reference.DocumentReference;
// Get UserReferenceResolver for the test
def resolverType = new DefaultParameterizedType(null, UserReferenceResolver.class, DocumentReference.class);
def userReferenceResolver = services.component.getInstance(resolverType, "document");
// Get a UserReferenceConverter
def converterType = new DefaultParameterizedType(null, Converter.class, UserReference.class);
def userReferenceConverter = services.component.getInstance(converterType);
// Resolve first the UserReference for Admin user.
def adminUser = new DocumentReference("xwiki", "XWiki", "Admin");
def userReference = userReferenceResolver.resolve(adminUser);
println "Original user reference: " + userReference;
// Convert the reference toString (same as what's done in SolrUtils)
def convertedReference = userReferenceConverter.convert(String.class, userReference);
println "Converted reference in string: " + convertedReference;
// Convert back the "serialized" String reference to UserReference
def resolvedBackReference = userReferenceConverter.convert(UserReference.class, convertedReference);
println "Obtained user reference: " + resolvedBackReference;
// Check if both references are equals
def areReferenceEquals = userReference.equals(resolvedBackReference);
println "Obtained reference is equal to the original reference: " + areReferenceEquals;
{{/groovy}}
Attachments
Issue Links
- relates to
-
XWIKI-19556 DocumentUserReference do not go through UserReferenceConverter when asking to convert to String
-
- Closed
-