This is an automated email from the ASF dual-hosted git repository.
jamesbognar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/juneau.git
The following commit(s) were added to refs/heads/master by this push:
new 9e72a1c58f SonarQube bug fixes
9e72a1c58f is described below
commit 9e72a1c58f56ae727573f0a16200b7b7af319b18
Author: James Bognar <[email protected]>
AuthorDate: Thu Feb 5 12:34:22 2026 -0500
SonarQube bug fixes
---
.../apache/juneau/bean/openapi3/ui/OpenApiUI.java | 1 +
.../apache/juneau/bean/swagger/ui/SwaggerUI.java | 1 +
.../apache/juneau/commons/utils/StringUtils.java | 6 +-
.../java/org/apache/juneau/BeanPropertyMeta.java | 7 ++-
.../apache/juneau/html/BasicHtmlDocTemplate.java | 2 +-
.../org/apache/juneau/html/HtmlParserSession.java | 18 +++---
.../apache/juneau/html/HtmlSerializerSession.java | 24 ++++----
.../org/apache/juneau/parser/ParserReader.java | 9 ++-
.../juneau/microservice/console/ConfigCommand.java | 33 +++++++----
.../org/apache/juneau/rest/client/RestClient.java | 6 +-
.../assertion/FluentResponseBodyAssertion.java | 9 ++-
.../assertions/FluentRequestContentAssertion.java | 11 ++--
.../apache/juneau/rest/servlet/RestServlet.java | 9 ++-
scripts/release.py | 68 ++++++++++++----------
14 files changed, 122 insertions(+), 82 deletions(-)
diff --git
a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/ui/OpenApiUI.java
b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/ui/OpenApiUI.java
index ef9c3fa64b..0db80298d4 100644
---
a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/ui/OpenApiUI.java
+++
b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/ui/OpenApiUI.java
@@ -41,6 +41,7 @@ import org.apache.juneau.swap.*;
* <li class='link'><a class="doclink"
href="https://juneau.apache.org/docs/topics/JuneauBeanOpenApi3">juneau-bean-openapi-v3</a>
* </ul>
*/
+@SuppressWarnings("java:S1192")
public class OpenApiUI extends ObjectSwap<OpenApi,Div> {
private static class Session {
diff --git
a/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/ui/SwaggerUI.java
b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/ui/SwaggerUI.java
index fd07315d7e..14715aaa73 100644
---
a/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/ui/SwaggerUI.java
+++
b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/ui/SwaggerUI.java
@@ -40,6 +40,7 @@ import org.apache.juneau.swap.*;
* <li class='link'><a class="doclink"
href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">juneau-bean-swagger-v2</a>
* </ul>
*/
+@SuppressWarnings("java:S1192")
public class SwaggerUI extends ObjectSwap<Swagger,Div> {
private static class Session {
diff --git
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/utils/StringUtils.java
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/utils/StringUtils.java
index e1fa742979..2301474194 100644
---
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/utils/StringUtils.java
+++
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/utils/StringUtils.java
@@ -7567,7 +7567,7 @@ public class StringUtils {
}
if (needsDecode) {
- return safe(()->URLDecoder.decode(s, "UTF-8"));
+ return safe(()->URLDecoder.decode(s, UTF_8.name()));
}
return s;
}
@@ -7589,7 +7589,7 @@ public class StringUtils {
needsEncode |= (!
URL_UNENCODED_CHARS.contains(s.charAt(i)));
if (needsEncode) {
- return safe(()->URLEncoder.encode(s, "UTF-8"));
+ return safe(()->URLEncoder.encode(s, UTF_8.name()));
}
return s;
@@ -7618,7 +7618,7 @@ public class StringUtils {
else if (c <= 127)
sb.append('%').append(toHex2(c));
else
- safe(()->sb.append(URLEncoder.encode(""
+ c, "UTF-8"))); // Yuck.
+ safe(()->sb.append(URLEncoder.encode(""
+ c, UTF_8.name()))); // Yuck.
}
s = sb.toString();
}
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyMeta.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyMeta.java
index 79c421ff89..234cbce4e7 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyMeta.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyMeta.java
@@ -64,6 +64,9 @@ public class BeanPropertyMeta implements
Comparable<BeanPropertyMeta> {
private static final String ARG_value = "value";
private static final String ARG_innerField = "innerField";
+ // Error message constants
+ private static final String MSG_getterOrFieldNotDefined = "Getter or
public field not defined on property ''{0}''";
+
/**
* BeanPropertyMeta builder class.
*/
@@ -848,7 +851,7 @@ public class BeanPropertyMeta implements
Comparable<BeanPropertyMeta> {
return (Map)getter.invoke(bean);
if (nn(field))
return (Map)field.get(bean);
- throw bex(beanMeta.getClassMeta(), "Getter or public
field not defined on property ''{0}''", name);
+ throw bex(beanMeta.getClassMeta(),
MSG_getterOrFieldNotDefined, name);
}
return mape();
}
@@ -1273,7 +1276,7 @@ public class BeanPropertyMeta implements
Comparable<BeanPropertyMeta> {
} else if (nn(field))
m = (Map)field.get(bean);
else
- throw bex(beanMeta.getClassMeta(), "Getter or
public field not defined on property ''{0}''", name);
+ throw bex(beanMeta.getClassMeta(),
MSG_getterOrFieldNotDefined, name);
return (m == null ? null : m.get(pName));
}
if (nn(getter))
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/BasicHtmlDocTemplate.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/BasicHtmlDocTemplate.java
index 06949dc4ac..7a8f8f1287 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/BasicHtmlDocTemplate.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/BasicHtmlDocTemplate.java
@@ -36,7 +36,7 @@ import org.apache.juneau.commons.utils.*;
* <li class='link'><a class="doclink"
href="https://juneau.apache.org/docs/topics/HtmlBasics">HTML Basics</a>
* </ul>
*/
-@SuppressWarnings("resource")
+@SuppressWarnings({"resource", "java:S1192"})
public class BasicHtmlDocTemplate implements HtmlDocTemplate {
private static boolean exists(String s) {
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserSession.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserSession.java
index f9e4dd3b9f..40989864a0 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserSession.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserSession.java
@@ -59,6 +59,10 @@ public class HtmlParserSession extends XmlParserSession {
// Argument name constants for assertArgNotNull
private static final String ARG_ctx = "ctx";
+ // HTML tag name constants
+ private static final String HTMLTAG_array = "array";
+ private static final String HTMLTAG_object = "object";
+
/**
* Builder class.
*/
@@ -392,18 +396,18 @@ public class HtmlParserSession extends XmlParserSession {
} else if (tag == TABLE) {
- String typeName = getAttribute(r,
getBeanTypePropertyName(eType), "object");
+ String typeName = getAttribute(r,
getBeanTypePropertyName(eType), HTMLTAG_object);
ClassMeta cm = getClassMeta(typeName, pMeta, eType);
if (nn(cm)) {
sType = eType = cm;
- typeName = sType.isCollectionOrArray() ?
"array" : "object";
- } else if (! "array".equals(typeName)) {
+ typeName = sType.isCollectionOrArray() ?
HTMLTAG_array : HTMLTAG_object;
+ } else if (! HTMLTAG_array.equals(typeName)) {
// Type name could be a subtype name.
- typeName = sType.isCollectionOrArray() ?
"array" : "object";
+ typeName = sType.isCollectionOrArray() ?
HTMLTAG_array : HTMLTAG_object;
}
- if (typeName.equals("object")) {
+ if (typeName.equals(HTMLTAG_object)) {
if (sType.isObject()) {
o = parseIntoMap(r,
newGenericMap(sType), sType.getKeyType(), sType.getValueType(), pMeta);
} else if (sType.isMap()) {
@@ -422,7 +426,7 @@ public class HtmlParserSession extends XmlParserSession {
}
skipTag(r, xTABLE);
- } else if (typeName.equals("array")) {
+ } else if (typeName.equals(HTMLTAG_array)) {
if (sType.isObject())
o = parseTableIntoCollection(r,
(Collection)new JsonList(this), sType, pMeta);
else if (sType.isCollection())
@@ -439,7 +443,7 @@ public class HtmlParserSession extends XmlParserSession {
}
} else if (tag == UL) {
- String typeName = getAttribute(r,
getBeanTypePropertyName(eType), "array");
+ String typeName = getAttribute(r,
getBeanTypePropertyName(eType), HTMLTAG_array);
ClassMeta cm = getClassMeta(typeName, pMeta, eType);
if (nn(cm))
sType = eType = cm;
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java
index a368e8ebbd..dfd50f2142 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java
@@ -59,6 +59,10 @@ public class HtmlSerializerSession extends
XmlSerializerSession {
// Argument name constants for assertArgNotNull
private static final String ARG_ctx = "ctx";
+ // HTML tag name constants
+ private static final String HTMLTAG_style = "style";
+ private static final String HTMLTAG_table = "table";
+
/**
* Builder class.
*/
@@ -405,7 +409,7 @@ public class HtmlSerializerSession extends
XmlSerializerSession {
int i = indent;
- out.oTag(i, "table");
+ out.oTag(i, HTMLTAG_table);
String typeName = m.getMeta().getDictionaryName();
if (nn(typeName) && eType != m.getClassMeta())
@@ -445,7 +449,7 @@ public class HtmlSerializerSession extends
XmlSerializerSession {
out.oTag(i + 2, "td");
String style = getStyle(this, pMeta, value);
if (nn(style))
- out.attr("style", style);
+ out.attr(HTMLTAG_style, style);
out.cTag();
try {
@@ -465,7 +469,7 @@ public class HtmlSerializerSession extends
XmlSerializerSession {
out.ie(i + 1).eTag("tr").nl(i + 1);
});
- out.ie(i).eTag("table").nl(i);
+ out.ie(i).eTag(HTMLTAG_table).nl(i);
}
@SuppressWarnings({ "rawtypes", "unchecked", "java:S3776", "java:S6541"
})
@@ -504,7 +508,7 @@ public class HtmlSerializerSession extends
XmlSerializerSession {
if (nn(th)) {
- out.oTag(i, "table").attr(btpn, type2).w('>').nl(i + 1);
+ out.oTag(i, HTMLTAG_table).attr(btpn,
type2).w('>').nl(i + 1);
if (th.length > 0) {
out.sTag(i + 1, "tr").nl(i + 2);
for (var key : th) {
@@ -577,7 +581,7 @@ public class HtmlSerializerSession extends
XmlSerializerSession {
String style =
getStyle(this, pMeta, value);
out.oTag(i + 2, "td");
if (nn(style))
-
out.attr("style", style);
+
out.attr(HTMLTAG_style, style);
out.cTag();
if (nn(link))
out.oTag("a").attrUri("href", link).cTag();
@@ -592,7 +596,7 @@ public class HtmlSerializerSession extends
XmlSerializerSession {
}
out.ie(i + 1).eTag("tr").nl(i + 1);
}
- out.ie(i).eTag("table").nl(i);
+ out.ie(i).eTag(HTMLTAG_table).nl(i);
} else {
out.oTag(i, isDc ? "p" : "ul");
@@ -608,7 +612,7 @@ public class HtmlSerializerSession extends
XmlSerializerSession {
String style = getStyle(this, ppMeta, o);
String link = getLink(ppMeta);
if (nn(style) && ! isDc)
- out.attr("style", style);
+ out.attr(HTMLTAG_style, style);
if (! isDc)
out.cTag();
if (nn(link))
@@ -637,7 +641,7 @@ public class HtmlSerializerSession extends
XmlSerializerSession {
int i = indent;
- out.oTag(i, "table");
+ out.oTag(i, HTMLTAG_table);
if (nn(typeName) && nn(ppMeta) && ppMeta.getClassMeta() !=
aType)
out.attr(getBeanTypePropertyName(sType), typeName);
@@ -652,7 +656,7 @@ public class HtmlSerializerSession extends
XmlSerializerSession {
forEachEntry(m, x -> serializeMapEntry(out, x, keyType,
valueType, i, ppMeta));
- out.ie(i).eTag("table").nl(i);
+ out.ie(i).eTag(HTMLTAG_table).nl(i);
}
@SuppressWarnings("rawtypes")
@@ -673,7 +677,7 @@ public class HtmlSerializerSession extends
XmlSerializerSession {
out.sTag(i + 1, "tr").nl(i + 2);
out.oTag(i + 2, "td");
if (nn(style))
- out.attr("style", style);
+ out.attr(HTMLTAG_style, style);
out.cTag();
if (nn(link))
out.oTag(i + 3, "a").attrUri("href",
link.replace("{#}", s(value))).cTag();
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserReader.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserReader.java
index 5f63ed5517..3f8698300d 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserReader.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserReader.java
@@ -45,6 +45,9 @@ import org.apache.juneau.commons.io.*;
@SuppressWarnings("resource")
public class ParserReader extends Reader implements Positionable {
+ // Error message constants
+ private static final String MSG_bufferUnderflow = "Buffer underflow.";
+
/** Wrapped reader */
protected final Reader r;
@@ -341,11 +344,11 @@ public class ParserReader extends Reader implements
Positionable {
public final ParserReader replace(int c, int offset) throws IOException
{
if (c < 0x10000) {
if (offset < 1)
- throw ioex("Buffer underflow.");
+ throw ioex(MSG_bufferUnderflow);
buff[iCurrent - offset] = (char)c;
} else {
if (offset < 2)
- throw ioex("Buffer underflow.");
+ throw ioex(MSG_bufferUnderflow);
c -= 0x10000;
buff[iCurrent - offset] = (char)(0xd800 + (c >> 10));
buff[iCurrent - offset + 1] = (char)(0xdc00 + (c &
0x3ff));
@@ -366,7 +369,7 @@ public class ParserReader extends Reader implements
Positionable {
*/
public ParserReader unread() throws IOException {
if (iCurrent <= 0)
- throw ioex("Buffer underflow.");
+ throw ioex(MSG_bufferUnderflow);
iCurrent--;
if (column == 0)
line--;
diff --git
a/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/console/ConfigCommand.java
b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/console/ConfigCommand.java
index 1e64918f04..8c2ad1fb97 100644
---
a/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/console/ConfigCommand.java
+++
b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/console/ConfigCommand.java
@@ -34,6 +34,15 @@ import org.apache.juneau.microservice.*;
*/
public class ConfigCommand extends ConsoleCommand {
+ // Message bundle key constants
+ private static final String MKEY_invalidArguments = "InvalidArguments";
+ private static final String MKEY_tooManyArguments = "TooManyArguments";
+ private static final String MKEY_keyNotFound = "KeyNotFound";
+ private static final String MKEY_configSet = "ConfigSet";
+ private static final String MKEY_configRemove = "ConfigRemove";
+ private static final String MKEY_description = "description";
+ private static final String MKEY_info = "info";
+
private final Messages mb = Messages.of(ConfigCommand.class,
"Messages");
@Override /* Overridden from ConsoleCommand */
@@ -50,46 +59,46 @@ public class ConfigCommand extends ConsoleCommand {
if (nn(val))
out.println(val);
else
-
out.println(mb.getString("KeyNotFound", key));
+
out.println(mb.getString(MKEY_keyNotFound, key));
} else {
-
out.println(mb.getString("TooManyArguments"));
+
out.println(mb.getString(MKEY_tooManyArguments));
}
} else if (option.equals("set")) {
// config set <key> <value>
if (args.size() == 4) {
conf.set(key, args.getArg(3));
- out.println(mb.getString("ConfigSet"));
+
out.println(mb.getString(MKEY_configSet));
} else if (args.size() < 4) {
-
out.println(mb.getString("InvalidArguments"));
+
out.println(mb.getString(MKEY_invalidArguments));
} else {
-
out.println(mb.getString("TooManyArguments"));
+
out.println(mb.getString(MKEY_tooManyArguments));
}
} else if (option.equals("remove")) {
// config remove <key>
if (args.size() == 3) {
if (conf.get(key).isPresent()) {
conf.remove(key);
-
out.println(mb.getString("ConfigRemove", key));
+
out.println(mb.getString(MKEY_configRemove, key));
} else {
-
out.println(mb.getString("KeyNotFound", key));
+
out.println(mb.getString(MKEY_keyNotFound, key));
}
} else {
-
out.println(mb.getString("TooManyArguments"));
+
out.println(mb.getString(MKEY_tooManyArguments));
}
} else {
- out.println(mb.getString("InvalidArguments"));
+
out.println(mb.getString(MKEY_invalidArguments));
}
} else {
- out.println(mb.getString("InvalidArguments"));
+ out.println(mb.getString(MKEY_invalidArguments));
}
return false;
}
@Override /* Overridden from ConsoleCommand */
- public String getDescription() { return mb.getString("description"); }
+ public String getDescription() { return mb.getString(MKEY_description);
}
@Override /* Overridden from ConsoleCommand */
- public String getInfo() { return mb.getString("info"); }
+ public String getInfo() { return mb.getString(MKEY_info); }
@Override /* Overridden from ConsoleCommand */
public String getName() { return "config"; }
diff --git
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
index 787eaa6a8b..4d39743299 100644
---
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
+++
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
@@ -7337,7 +7337,7 @@ public class RestClient extends BeanContextable
implements HttpClient, Closeable
* @throws RestCallException REST call failed.
*/
public RestRequest patch(Object uri) throws RestCallException {
- return request(op("PATCH", uri, NO_BODY));
+ return request(op(PATCH, uri, NO_BODY));
}
/**
@@ -7379,7 +7379,7 @@ public class RestClient extends BeanContextable
implements HttpClient, Closeable
* @throws RestCallException If any authentication errors occurred.
*/
public RestRequest patch(Object uri, Object body) throws
RestCallException {
- return request(op("PATCH", uri, body));
+ return request(op(PATCH, uri, body));
}
/**
@@ -7405,7 +7405,7 @@ public class RestClient extends BeanContextable
implements HttpClient, Closeable
* @throws RestCallException If any authentication errors occurred.
*/
public RestRequest patch(Object uri, String body, ContentType
contentType) throws RestCallException {
- return request(op("PATCH", uri,
stringBody(body))).header(contentType);
+ return request(op(PATCH, uri,
stringBody(body))).header(contentType);
}
/**
diff --git
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/assertion/FluentResponseBodyAssertion.java
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/assertion/FluentResponseBodyAssertion.java
index 1b84a4b107..2115b89e18 100644
---
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/assertion/FluentResponseBodyAssertion.java
+++
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/assertion/FluentResponseBodyAssertion.java
@@ -104,6 +104,9 @@ import org.apache.juneau.serializer.*;
*/
public class FluentResponseBodyAssertion<R> extends
FluentObjectAssertion<ResponseContent,R> {
+ // Error message constants
+ private static final String MSG_exceptionDuringCall = "Exception
occurred during call.";
+
/**
* Chained constructor.
*
@@ -365,7 +368,7 @@ public class FluentResponseBodyAssertion<R> extends
FluentObjectAssertion<Respon
try {
return value().cache().asBytes();
} catch (RestCallException e) {
- throw error(e, "Exception occurred during call.");
+ throw error(e, MSG_exceptionDuringCall);
}
}
@@ -373,7 +376,7 @@ public class FluentResponseBodyAssertion<R> extends
FluentObjectAssertion<Respon
try {
return value().cache().as(type, args);
} catch (RestCallException e) {
- throw error(e, "Exception occurred during call.");
+ throw error(e, MSG_exceptionDuringCall);
}
}
@@ -382,7 +385,7 @@ public class FluentResponseBodyAssertion<R> extends
FluentObjectAssertion<Respon
try {
return value().cache().asString();
} catch (RestCallException e) {
- throw error(e, "Exception occurred during call.");
+ throw error(e, MSG_exceptionDuringCall);
}
}
}
\ No newline at end of file
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/assertions/FluentRequestContentAssertion.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/assertions/FluentRequestContentAssertion.java
index a6a26dd7d5..02f4f62c2f 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/assertions/FluentRequestContentAssertion.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/assertions/FluentRequestContentAssertion.java
@@ -103,6 +103,9 @@ import org.apache.juneau.serializer.*;
*/
public class FluentRequestContentAssertion<R> extends
FluentObjectAssertion<RequestContent,R> {
+ // Error message constants
+ private static final String MSG_exceptionDuringCall = "Exception
occurred during call.";
+
/**
* Chained constructor.
*
@@ -313,7 +316,7 @@ public class FluentRequestContentAssertion<R> extends
FluentObjectAssertion<Requ
try {
return value().cache().asBytes();
} catch (IOException e) {
- throw error(e, "Exception occurred during call.");
+ throw error(e, MSG_exceptionDuringCall);
}
}
@@ -321,7 +324,7 @@ public class FluentRequestContentAssertion<R> extends
FluentObjectAssertion<Requ
try {
return value().cache().as(c);
} catch (IOException e) {
- throw error(e, "Exception occurred during call.");
+ throw error(e, MSG_exceptionDuringCall);
}
}
@@ -329,7 +332,7 @@ public class FluentRequestContentAssertion<R> extends
FluentObjectAssertion<Requ
try {
return value().cache().as(c, args);
} catch (IOException e) {
- throw error(e, "Exception occurred during call.");
+ throw error(e, MSG_exceptionDuringCall);
}
}
@@ -338,7 +341,7 @@ public class FluentRequestContentAssertion<R> extends
FluentObjectAssertion<Requ
try {
return value().cache().asString();
} catch (IOException e) {
- throw error(e, "Exception occurred during call.");
+ throw error(e, MSG_exceptionDuringCall);
}
}
}
\ No newline at end of file
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/servlet/RestServlet.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/servlet/RestServlet.java
index 839cf0ae39..869228eb2b 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/servlet/RestServlet.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/servlet/RestServlet.java
@@ -68,6 +68,9 @@ public abstract class RestServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private static final AnnotationProvider AP =
AnnotationProvider.INSTANCE;
+ // Error message constants
+ private static final String MSG_servletInitError = "Servlet init error
on class ''{0}''";
+
private AtomicReference<RestContext> context = new AtomicReference<>();
private AtomicReference<Exception> initException = new
AtomicReference<>();
@@ -147,14 +150,14 @@ public abstract class RestServlet extends HttpServlet {
context.get().postInitChildFirst();
} catch (ServletException e) {
initException.set(e);
- log(SEVERE, e, "Servlet init error on class ''{0}''",
cn(this));
+ log(SEVERE, e, MSG_servletInitError, cn(this));
throw e;
} catch (BasicHttpException e) {
initException.set(e);
- log(SEVERE, e, "Servlet init error on class ''{0}''",
cn(this));
+ log(SEVERE, e, MSG_servletInitError, cn(this));
} catch (Exception e) {
initException.set(new InternalServerError(e));
- log(SEVERE, e, "Servlet init error on class ''{0}''",
cn(this));
+ log(SEVERE, e, MSG_servletInitError, cn(this));
}
}
diff --git a/scripts/release.py b/scripts/release.py
index aeb86964b0..70a8fdd7b4 100755
--- a/scripts/release.py
+++ b/scripts/release.py
@@ -49,6 +49,12 @@ import urllib.request
import xml.etree.ElementTree as ET
from datetime import datetime, timedelta
from pathlib import Path
+
+# Constants for duplicated string literals
+POM_XML = 'pom.xml'
+STAGING_DIR = '~/tmp/dist-release-juneau'
+SVN_DIST_URL = 'https://dist.apache.org/repos/dist/dev/juneau'
+RC_PATTERN = r'RC(\d+)'
from typing import Dict, Optional, List
# Minimum required versions
@@ -216,7 +222,7 @@ class ReleaseScript:
# Get the Juneau root directory
script_dir = Path(__file__).parent
juneau_root = script_dir.parent
- pom_path = juneau_root / 'pom.xml'
+ pom_path = juneau_root / POM_XML
if not pom_path.exists():
self.fail(f"pom.xml not found at {pom_path}")
@@ -248,7 +254,7 @@ class ReleaseScript:
# Try to get default from history
default_rc = None
if history.get('X_RELEASE_CANDIDATE'):
- rc_match = re.search(r'RC(\d+)',
history.get('X_RELEASE_CANDIDATE', ''))
+ rc_match = re.search(RC_PATTERN,
history.get('X_RELEASE_CANDIDATE', ''))
if rc_match:
default_rc = rc_match.group(1)
@@ -275,7 +281,7 @@ class ReleaseScript:
staging = self._prompt_with_default(
"Staging directory",
- history.get('X_STAGING', '~/tmp/dist-release-juneau'),
+ history.get('X_STAGING', STAGING_DIR),
required=True
)
@@ -598,7 +604,7 @@ class ReleaseScript:
self.message("Making git folder")
self.start_timer()
- staging = Path(os.environ.get('X_STAGING',
'~/tmp/dist-release-juneau')).expanduser()
+ staging = Path(os.environ.get('X_STAGING', STAGING_DIR)).expanduser()
# Clean up entire staging directory to start fresh (avoids issues from
previous runs)
if staging.exists():
@@ -618,7 +624,7 @@ class ReleaseScript:
self.message("Cloning juneau.git")
self.start_timer()
- staging = Path(os.environ.get('X_STAGING',
'~/tmp/dist-release-juneau')).expanduser()
+ staging = Path(os.environ.get('X_STAGING', STAGING_DIR)).expanduser()
git_dir = staging / 'git'
juneau_dir = git_dir / 'juneau'
@@ -635,7 +641,7 @@ class ReleaseScript:
"""Configure git user name and email."""
self.message("Configuring git")
- staging = Path(os.environ.get('X_STAGING',
'~/tmp/dist-release-juneau')).expanduser()
+ staging = Path(os.environ.get('X_STAGING', STAGING_DIR)).expanduser()
juneau_dir = staging / 'git' / 'juneau'
username = os.environ.get('X_USERNAME')
@@ -653,7 +659,7 @@ class ReleaseScript:
self.message("Running clean verify")
self.start_timer()
- staging = Path(os.environ.get('X_STAGING',
'~/tmp/dist-release-juneau')).expanduser()
+ staging = Path(os.environ.get('X_STAGING', STAGING_DIR)).expanduser()
juneau_dir = staging / 'git' / 'juneau'
self.run_command(['mvn', 'clean', 'verify'], cwd=juneau_dir)
@@ -665,7 +671,7 @@ class ReleaseScript:
"""Create test workspace."""
self.message("Creating test workspace")
- staging = Path(os.environ.get('X_STAGING',
'~/tmp/dist-release-juneau')).expanduser()
+ staging = Path(os.environ.get('X_STAGING', STAGING_DIR)).expanduser()
juneau_dir = staging / 'git' / 'juneau'
workspace = juneau_dir / 'target' / 'workspace'
@@ -711,7 +717,7 @@ class ReleaseScript:
self.message("Running deploy")
self.start_timer()
- staging = Path(os.environ.get('X_STAGING',
'~/tmp/dist-release-juneau')).expanduser()
+ staging = Path(os.environ.get('X_STAGING', STAGING_DIR)).expanduser()
juneau_dir = staging / 'git' / 'juneau'
self.run_command(['mvn', 'deploy',
'-Daether.checksums.algorithms=MD5,SHA-1,SHA-512'], cwd=juneau_dir)
@@ -723,7 +729,7 @@ class ReleaseScript:
"""Run Maven release:prepare."""
self.message("Running release:prepare")
- staging = Path(os.environ.get('X_STAGING',
'~/tmp/dist-release-juneau')).expanduser()
+ staging = Path(os.environ.get('X_STAGING', STAGING_DIR)).expanduser()
juneau_dir = staging / 'git' / 'juneau'
version = os.environ.get('X_VERSION')
@@ -731,7 +737,7 @@ class ReleaseScript:
next_version = os.environ.get('X_NEXT_VERSION')
# Check that the current POM version is a SNAPSHOT (required by
release:prepare)
- pom_path = juneau_dir / 'pom.xml'
+ pom_path = juneau_dir / POM_XML
if pom_path.exists():
# Read version directly from POM (don't use current-release.py as
it strips SNAPSHOT)
try:
@@ -778,7 +784,7 @@ class ReleaseScript:
"""Run git diff."""
self.message("Running git diff")
- staging = Path(os.environ.get('X_STAGING',
'~/tmp/dist-release-juneau')).expanduser()
+ staging = Path(os.environ.get('X_STAGING', STAGING_DIR)).expanduser()
juneau_dir = staging / 'git' / 'juneau'
release = os.environ.get('X_RELEASE')
@@ -791,7 +797,7 @@ class ReleaseScript:
self.message("Running release:perform")
self.start_timer()
- staging = Path(os.environ.get('X_STAGING',
'~/tmp/dist-release-juneau')).expanduser()
+ staging = Path(os.environ.get('X_STAGING', STAGING_DIR)).expanduser()
juneau_dir = staging / 'git' / 'juneau'
self.run_command(['mvn', 'release:perform',
'-Daether.checksums.algorithms=MD5,SHA-1,SHA-512'], cwd=juneau_dir)
@@ -824,7 +830,7 @@ class ReleaseScript:
self.message("Creating binary artifacts")
self.start_timer()
- staging = Path(os.environ.get('X_STAGING',
'~/tmp/dist-release-juneau')).expanduser()
+ staging = Path(os.environ.get('X_STAGING', STAGING_DIR)).expanduser()
version = os.environ.get('X_VERSION')
release = os.environ.get('X_RELEASE')
repo = self.state.get('X_REPO') or os.environ.get('X_REPO')
@@ -837,7 +843,7 @@ class ReleaseScript:
if dist_dir.exists():
shutil.rmtree(dist_dir)
- self.run_command(['svn', 'checkout',
'https://dist.apache.org/repos/dist/dev/juneau', 'dist'], cwd=staging)
+ self.run_command(['svn', 'checkout', SVN_DIST_URL, 'dist'],
cwd=staging)
# Remove old files
source_dir = dist_dir / 'source'
@@ -926,7 +932,7 @@ class ReleaseScript:
"""Verify distribution files are available."""
self.message("Verifying distribution")
- staging = Path(os.environ.get('X_STAGING',
'~/tmp/dist-release-juneau')).expanduser()
+ staging = Path(os.environ.get('X_STAGING', STAGING_DIR)).expanduser()
version = os.environ.get('X_VERSION')
release = os.environ.get('X_RELEASE')
@@ -937,7 +943,7 @@ class ReleaseScript:
self.run_command(['svn', 'update'], cwd=dist_dir, check=False)
else:
# Fresh checkout
- self.run_command(['svn', 'checkout',
'https://dist.apache.org/repos/dist/dev/juneau', 'dist'], cwd=staging)
+ self.run_command(['svn', 'checkout', SVN_DIST_URL, 'dist'],
cwd=staging)
# Expected files
source_dir = dist_dir / 'source' / release
@@ -978,7 +984,7 @@ class ReleaseScript:
print(f" ā {file_path.relative_to(dist_dir)} ({size_mb:.2f} MB)")
# Open browser for manual inspection
- subprocess.Popen(['open',
'https://dist.apache.org/repos/dist/dev/juneau'])
+ subprocess.Popen(['open', SVN_DIST_URL])
print("\nā
Distribution verification successful. Voting can be
started.")
@@ -1023,7 +1029,7 @@ class ReleaseScript:
def _get_git_commit_hash(self, release_tag: str) -> Optional[str]:
"""Get git commit hash for a release tag."""
- staging = Path(os.environ.get('X_STAGING',
'~/tmp/dist-release-juneau')).expanduser()
+ staging = Path(os.environ.get('X_STAGING', STAGING_DIR)).expanduser()
juneau_dir = staging / 'git' / 'juneau'
try:
@@ -1058,7 +1064,7 @@ class ReleaseScript:
vote_end_date = self._calculate_vote_end_date()
# Extract RC number from release (e.g., "juneau-9.2.0-RC1" -> "RC1")
- rc_match = re.search(r'RC(\d+)', release)
+ rc_match = re.search(RC_PATTERN, release)
rc_number = rc_match.group(1) if rc_match else "x"
# Generate email body
@@ -1144,7 +1150,7 @@ Anyone can participate in testing and voting, not just
committers, please feel f
print("Revert cancelled.")
return
- staging = Path(os.environ.get('X_STAGING',
'~/tmp/dist-release-juneau')).expanduser()
+ staging = Path(os.environ.get('X_STAGING', STAGING_DIR)).expanduser()
git_dir = staging / 'git' / 'juneau'
# Pull latest changes from git
@@ -1187,7 +1193,7 @@ Anyone can participate in testing and voting, not just
committers, please feel f
# Step 2: Revert Maven versions
print("\nStep 2: Reverting Maven versions...")
development_version = f"{version}-SNAPSHOT"
- if git_dir.exists() and (git_dir / 'pom.xml').exists():
+ if git_dir.exists() and (git_dir / POM_XML).exists():
try:
print(f" Reverting to development version:
{development_version}")
self.run_command([
@@ -1366,7 +1372,7 @@ def main():
# Try to extract from X_RELEASE environment variable
x_release = os.environ.get('X_RELEASE')
if x_release:
- rc_match = re.search(r'RC(\d+)', x_release)
+ rc_match = re.search(RC_PATTERN, x_release)
if rc_match:
rc = int(rc_match.group(1))
print(f"š Detected RC number from X_RELEASE: {rc}")
@@ -1379,7 +1385,7 @@ def main():
state_data = json.load(f)
x_release = state_data.get('X_RELEASE')
if x_release and rc is None:
- rc_match = re.search(r'RC(\d+)', x_release)
+ rc_match = re.search(RC_PATTERN, x_release)
if rc_match:
rc = int(rc_match.group(1))
print(f"š Detected RC number from state file: {rc}")
@@ -1402,7 +1408,7 @@ def main():
# Try to get version from pom.xml
script_dir = Path(__file__).parent
juneau_root = script_dir.parent
- pom_path = juneau_root / 'pom.xml'
+ pom_path = juneau_root / POM_XML
if pom_path.exists():
try:
result = subprocess.run(
@@ -1429,7 +1435,7 @@ def main():
history = json.load(f)
release_candidate = history.get('X_RELEASE_CANDIDATE', '')
if release_candidate:
- rc_match = re.search(r'RC(\d+)', release_candidate)
+ rc_match = re.search(RC_PATTERN, release_candidate)
if rc_match:
rc = int(rc_match.group(1))
print(f"š Detected RC number from history file:
{rc}")
@@ -1479,7 +1485,7 @@ def main():
os.environ['X_STAGING'] = state_data['X_STAGING']
elif not os.environ.get('X_STAGING'):
# Set default staging if not set
- os.environ['X_STAGING'] = '~/tmp/dist-release-juneau'
+ os.environ['X_STAGING'] = STAGING_DIR
script.revert_release()
return
@@ -1490,7 +1496,7 @@ def main():
# Try to extract from X_RELEASE environment variable
x_release = os.environ.get('X_RELEASE')
if x_release:
- rc_match = re.search(r'RC(\d+)', x_release)
+ rc_match = re.search(RC_PATTERN, x_release)
if rc_match:
rc = int(rc_match.group(1))
print(f"š Detected RC number from X_RELEASE: {rc}")
@@ -1504,7 +1510,7 @@ def main():
state = json.load(f)
x_release = state.get('X_RELEASE')
if x_release:
- rc_match = re.search(r'RC(\d+)', x_release)
+ rc_match = re.search(RC_PATTERN, x_release)
if rc_match:
rc = int(rc_match.group(1))
print(f"š Detected RC number from state file:
{rc}")
@@ -1515,7 +1521,7 @@ def main():
if rc is None:
script_dir = Path(__file__).parent
juneau_root = script_dir.parent
- pom_path = juneau_root / 'pom.xml'
+ pom_path = juneau_root / POM_XML
if pom_path.exists():
try:
# Get version from pom
@@ -1536,7 +1542,7 @@ def main():
with open(history_file, 'r') as f:
history = json.load(f)
release_candidate = history.get('X_RELEASE_CANDIDATE',
'')
- rc_match = re.search(r'RC(\d+)', release_candidate)
+ rc_match = re.search(RC_PATTERN, release_candidate)
if rc_match:
rc = int(rc_match.group(1))
print(f"š Detected RC number from history file:
{rc}")