Skip to content

Commit

Permalink
Merge pull request #2817 from rhuan080/fixvalidationexception311
Browse files Browse the repository at this point in the history
Fixing the ResteasyViolationException#toString concurrency
  • Loading branch information
jamezp committed Sep 1, 2021
2 parents 37a9708 + 8559c88 commit 36871e4
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 29 deletions.
Expand Up @@ -12,6 +12,7 @@
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArrayList;

import javax.validation.ConstraintViolation;
import javax.validation.ConstraintViolationException;
Expand All @@ -38,17 +39,17 @@ public class ResteasyViolationException extends ConstraintViolationException
private static final long serialVersionUID = 2623733139912277260L;
public static final String SUPPRESS_VIOLATION_PATH = "resteasy.validation.suppress.path";

private List<CloneableMediaType> accept;
private Exception exception;
private volatile List<CloneableMediaType> accept;
private volatile Exception exception;

private List<ResteasyConstraintViolation> fieldViolations;
private List<ResteasyConstraintViolation> propertyViolations;
private List<ResteasyConstraintViolation> classViolations;
private List<ResteasyConstraintViolation> parameterViolations;
private List<ResteasyConstraintViolation> returnValueViolations;
private volatile List<ResteasyConstraintViolation> fieldViolations;
private volatile List<ResteasyConstraintViolation> propertyViolations;
private volatile List<ResteasyConstraintViolation> classViolations;
private volatile List<ResteasyConstraintViolation> parameterViolations;
private volatile List<ResteasyConstraintViolation> returnValueViolations;

private List<ResteasyConstraintViolation> allViolations;
private List<List<ResteasyConstraintViolation>> violationLists;
private volatile List<ResteasyConstraintViolation> allViolations;
private volatile List<List<ResteasyConstraintViolation>> violationLists;

private transient ConstraintTypeUtil11 util = new ConstraintTypeUtil11();
private boolean suppressPath;
Expand Down Expand Up @@ -152,7 +153,7 @@ public List<ResteasyConstraintViolation> getViolations()
convertViolations();
if (allViolations == null)
{
allViolations = new ArrayList<ResteasyConstraintViolation>();
allViolations = new CopyOnWriteArrayList<>();
allViolations.addAll(fieldViolations);
allViolations.addAll(propertyViolations);
allViolations.addAll(classViolations);
Expand Down Expand Up @@ -207,14 +208,13 @@ public String toString()
{
convertViolations();
StringBuffer sb = new StringBuffer();
for (Iterator<List<ResteasyConstraintViolation>> it = violationLists.iterator(); it.hasNext(); )
{
List<ResteasyConstraintViolation> violations = it.next();
for (Iterator<ResteasyConstraintViolation> it2 = violations.iterator(); it2.hasNext(); )
{
sb.append(it2.next().toString()).append('\r');

for (List<ResteasyConstraintViolation> violations : violationLists) {
for (ResteasyConstraintViolation violation: violations ) {
sb.append(violation.toString()).append('\r');
}
}

return sb.toString();
}

Expand All @@ -224,12 +224,13 @@ protected void convertToStrings(ViolationsContainer<?> container)
{
return;
}
violationLists = new ArrayList<List<ResteasyConstraintViolation>>();
List<List<ResteasyConstraintViolation>> violationLists = new ArrayList<List<ResteasyConstraintViolation>>();
fieldViolations = container.getFieldViolations();
propertyViolations = container.getPropertyViolations();
classViolations = container.getClassViolations();
parameterViolations = container.getParameterViolations();
returnValueViolations = container.getReturnValueViolations();
this.violationLists = new CopyOnWriteArrayList<>(violationLists);

violationLists.add(fieldViolations);
violationLists.add(propertyViolations);
Expand Down Expand Up @@ -292,7 +293,7 @@ protected void convertFromString(String stringRep)
throw new RuntimeException(Messages.MESSAGES.unableToParseException());
}

violationLists = new ArrayList<List<ResteasyConstraintViolation>>();
violationLists = new CopyOnWriteArrayList<>();
violationLists.add(fieldViolations);
violationLists.add(propertyViolations);
violationLists.add(classViolations);
Expand Down Expand Up @@ -352,11 +353,11 @@ protected void convertViolations()
return;
}

fieldViolations = new ArrayList<ResteasyConstraintViolation>();
propertyViolations = new ArrayList<ResteasyConstraintViolation>();
classViolations = new ArrayList<ResteasyConstraintViolation>();
parameterViolations = new ArrayList<ResteasyConstraintViolation>();
returnValueViolations = new ArrayList<ResteasyConstraintViolation>();
fieldViolations = new CopyOnWriteArrayList<>();
propertyViolations = new CopyOnWriteArrayList<>();
classViolations = new CopyOnWriteArrayList<>();
parameterViolations = new CopyOnWriteArrayList<>();
returnValueViolations = new CopyOnWriteArrayList<>();

if (getConstraintViolations() != null)
{
Expand Down Expand Up @@ -391,7 +392,7 @@ protected void convertViolations()
}
}

violationLists = new ArrayList<List<ResteasyConstraintViolation>>();
violationLists = new CopyOnWriteArrayList<>();
violationLists.add(fieldViolations);
violationLists.add(propertyViolations);
violationLists.add(classViolations);
Expand Down
Expand Up @@ -32,11 +32,11 @@ public ViolationReport(final ResteasyViolationException exception)
{
this.exception = e.toString();
}
this.fieldViolations = (ArrayList<ResteasyConstraintViolation>) exception.getFieldViolations();
this.propertyViolations = (ArrayList<ResteasyConstraintViolation>) exception.getPropertyViolations();
this.classViolations = (ArrayList<ResteasyConstraintViolation>) exception.getClassViolations();
this.parameterViolations = (ArrayList<ResteasyConstraintViolation>) exception.getParameterViolations();
this.returnValueViolations = (ArrayList<ResteasyConstraintViolation>) exception.getReturnValueViolations();
this.fieldViolations = new ArrayList<>(exception.getFieldViolations());
this.propertyViolations = new ArrayList<>(exception.getPropertyViolations());
this.classViolations = new ArrayList<>(exception.getClassViolations());
this.parameterViolations = new ArrayList<>(exception.getParameterViolations());
this.returnValueViolations = new ArrayList<>(exception.getReturnValueViolations());
}

public ViolationReport(final String s)
Expand Down

0 comments on commit 36871e4

Please sign in to comment.