Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

HTTP 500 fix when having many requests in parallel #283

Open
wants to merge 2 commits into
base: branch-5.0
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 3 additions & 4 deletions xoai-common/src/main/java/io/gdcc/xoai/xml/CopyElement.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.Objects;
import java.util.regex.Matcher;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I haven't run the code but yes, what @ErykKul is saying about thread safety seems well documented.

"Instances of this class are not safe for use by multiple concurrent threads." -- https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/regex/Matcher.html

"Instances of this class are immutable and are safe for use by multiple concurrent threads. Instances of the Matcher class are not safe for such use." -- https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/regex/Pattern.html

So, yes, it sounds good to me to swap Matcher for Pattern!

import java.util.regex.Pattern;
import javax.xml.stream.XMLStreamException;

Expand Down Expand Up @@ -66,10 +65,10 @@ public void write(XmlWriter writer) throws XmlWriteException {
}

/**
* A matcher, created only once, reusable to match the XML declaration with any attributes.
* A pattern, created only once, reusable to match the XML declaration with any attributes.
* Non-greedy, so we do not interfere with any XML processing instructions following.
*/
private static final Matcher xmlDeclaration = Pattern.compile("<\\?xml .*?\\?>").matcher("");
private static final Pattern xmlDeclaration = Pattern.compile("<\\?xml .*?\\?>");

protected void writeXml(XmlWriter writer) throws IOException {

Expand Down Expand Up @@ -109,7 +108,7 @@ protected void writeXml(XmlWriter writer) throws IOException {

String firstChars = new String(bytes, StandardCharsets.UTF_8);
// match the start with the compiled regex and replace with nothing when matching.
firstChars = xmlDeclaration.reset(firstChars).replaceFirst("");
firstChars = xmlDeclaration.matcher(firstChars).replaceFirst("");

// write the chars to the output stream
writer.getOutputStream().write(firstChars.getBytes(StandardCharsets.UTF_8));
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm just leaving this comment at the bottom.

The Sonar test is failing with the same error we saw in this issue:

Expand Down
Loading