Skip to content

Commit

Permalink
Merge pull request #3153 from jamezp/RESTEASY-3155-4.7
Browse files Browse the repository at this point in the history
[RESTEASY-3155] Concurrency issues in ResteasyViolationException
  • Loading branch information
jamezp committed Jul 12, 2022
2 parents 4722952 + 74192c4 commit 99c117b
Showing 1 changed file with 12 additions and 31 deletions.
Expand Up @@ -42,17 +42,17 @@ public abstract class ResteasyViolationException extends ConstraintViolationExce

private volatile Exception exception;

private volatile List<ResteasyConstraintViolation> propertyViolations;
private final List<ResteasyConstraintViolation> propertyViolations = new CopyOnWriteArrayList<>();

private volatile List<ResteasyConstraintViolation> classViolations;
private final List<ResteasyConstraintViolation> classViolations = new CopyOnWriteArrayList<>();

private volatile List<ResteasyConstraintViolation> parameterViolations;
private final List<ResteasyConstraintViolation> parameterViolations = new CopyOnWriteArrayList<>();

private volatile List<ResteasyConstraintViolation> returnValueViolations;
private final List<ResteasyConstraintViolation> returnValueViolations = new CopyOnWriteArrayList<>();

private volatile List<ResteasyConstraintViolation> allViolations;
private final List<ResteasyConstraintViolation> allViolations = new CopyOnWriteArrayList<>();

private volatile List<List<ResteasyConstraintViolation>> violationLists;
private final List<List<ResteasyConstraintViolation>> violationLists = new CopyOnWriteArrayList<>();

private transient ConstraintTypeUtil util = getConstraintTypeUtil();

Expand All @@ -68,6 +68,7 @@ public ResteasyViolationException(final Set<? extends ConstraintViolation<?>> co
checkSuppressPath();
accept = new ArrayList<CloneableMediaType>();
accept.add(CloneableMediaType.TEXT_PLAIN_TYPE);
convertViolations();
}

/**
Expand All @@ -81,6 +82,7 @@ public ResteasyViolationException(final Set<? extends ConstraintViolation<?>> co
super(constraintViolations);
checkSuppressPath();
this.accept = toCloneableMediaTypeList(accept);
convertViolations();
}

/**
Expand Down Expand Up @@ -139,39 +141,26 @@ public void setException(Exception exception)

public List<ResteasyConstraintViolation> getViolations()
{
convertViolations();
if (allViolations == null)
{
allViolations = new CopyOnWriteArrayList<>();
allViolations.addAll(propertyViolations);
allViolations.addAll(classViolations);
allViolations.addAll(parameterViolations);
allViolations.addAll(returnValueViolations);
}
return allViolations;
}

public List<ResteasyConstraintViolation> getPropertyViolations()
{
convertViolations();
return propertyViolations;
}

public List<ResteasyConstraintViolation> getClassViolations()
{
convertViolations();
return classViolations;
}

public List<ResteasyConstraintViolation> getParameterViolations()
{
convertViolations();
return parameterViolations;
}

public List<ResteasyConstraintViolation> getReturnValueViolations()
{
convertViolations();
return returnValueViolations;
}

Expand All @@ -182,13 +171,11 @@ public int size()

public List<List<ResteasyConstraintViolation>> getViolationLists()
{
convertViolations();
return violationLists;
}

public String toString()
{
convertViolations();
StringBuffer sb = new StringBuffer();
for (List<ResteasyConstraintViolation> violations : violationLists) {
for (ResteasyConstraintViolation violation: violations ) {
Expand All @@ -201,7 +188,6 @@ public String toString()

protected void convertFromString(String stringRep)
{
convertViolations();
InputStream is = new ByteArrayInputStream(stringRep.getBytes());
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String line;
Expand Down Expand Up @@ -240,6 +226,7 @@ protected void convertFromString(String stringRep)
default :
throw new RuntimeException(Messages.MESSAGES.unexpectedViolationType(type));
}
allViolations.add(rcv);
line = br.readLine(); // consume ending '\r'
line = br.readLine();
}
Expand All @@ -249,12 +236,11 @@ protected void convertFromString(String stringRep)
throw new RuntimeException(Messages.MESSAGES.unableToParseException());
}

List<List<ResteasyConstraintViolation>> violationLists = new ArrayList<List<ResteasyConstraintViolation>>();
violationLists.clear();
violationLists.add(propertyViolations);
violationLists.add(classViolations);
violationLists.add(parameterViolations);
violationLists.add(returnValueViolations);
this.violationLists = new CopyOnWriteArrayList<>(violationLists);
}

protected int getField(int start, String line)
Expand Down Expand Up @@ -306,16 +292,11 @@ protected void checkSuppressPath()

protected void convertViolations()
{
if (violationLists != null)
if (!violationLists.isEmpty())
{
return;
}

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

if (getConstraintViolations() != null)
{
for (Iterator<ConstraintViolation<?>> it = getConstraintViolations().iterator(); it.hasNext();)
Expand All @@ -342,10 +323,10 @@ protected void convertViolations()
default :
throw new RuntimeException(Messages.MESSAGES.unexpectedViolationType(rcv.getConstraintType()));
}
allViolations.add(rcv);
}
}

violationLists = new CopyOnWriteArrayList<>();
violationLists.add(propertyViolations);
violationLists.add(classViolations);
violationLists.add(parameterViolations);
Expand Down

0 comments on commit 99c117b

Please sign in to comment.