Skip to content

Commit d44b98d

Browse files
committed
[bugfix] Avoid reflection for setting private LOG field
1 parent 9c9d62a commit d44b98d

3 files changed

Lines changed: 45 additions & 20 deletions

File tree

extensions/indexes/range/pom.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,7 @@
188188
<include>src/test/resources/log4j2.xml</include>
189189
<include>src/test/xquery/range/conditions.xql</include>
190190
<include>src/main/java/org/exist/indexing/range/RangeIndexAnalyzer.java</include>
191+
<include>src/main/java/org/exist/indexing/range/RangeIndexConfig.java</include>
191192
<include>src/main/java/org/exist/indexing/range/RangeIndexConfigAttributeCondition.java</include>
192193
<include>src/main/java/org/exist/indexing/range/RangeIndexConfigElement.java</include>
193194
<include>src/main/java/org/exist/indexing/range/RangeIndexConfigField.java</include>
@@ -206,6 +207,7 @@
206207
<exclude>src/test/resources/log4j2.xml</exclude>
207208
<exclude>src/test/xquery/range/conditions.xql</exclude>
208209
<exclude>src/main/java/org/exist/indexing/range/RangeIndexAnalyzer.java</exclude>
210+
<exclude>src/main/java/org/exist/indexing/range/RangeIndexConfig.java</exclude>
209211
<exclude>src/main/java/org/exist/indexing/range/RangeIndexConfigAttributeCondition.java</exclude>
210212
<exclude>src/main/java/org/exist/indexing/range/RangeIndexConfigElement.java</exclude>
211213
<exclude>src/main/java/org/exist/indexing/range/RangeIndexConfigField.java</exclude>

extensions/indexes/range/src/main/java/org/exist/indexing/range/RangeIndexConfig.java

Lines changed: 36 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,28 @@
11
/*
2+
* Elemental
3+
* Copyright (C) 2024, Evolved Binary Ltd
4+
*
5+
* admin@evolvedbinary.com
6+
* https://www.evolvedbinary.com | https://www.elemental.xyz
7+
*
8+
* This library is free software; you can redistribute it and/or
9+
* modify it under the terms of the GNU Lesser General Public
10+
* License as published by the Free Software Foundation; version 2.1.
11+
*
12+
* This library is distributed in the hope that it will be useful,
13+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15+
* Lesser General Public License for more details.
16+
*
17+
* You should have received a copy of the GNU Lesser General Public
18+
* License along with this library; if not, write to the Free Software
19+
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20+
*
21+
* NOTE: Parts of this file contain code from 'The eXist-db Authors'.
22+
* The original license header is included below.
23+
*
24+
* =====================================================================
25+
*
226
* eXist-db Open Source Native XML Database
327
* Copyright (C) 2001 The eXist-db Authors
428
*
@@ -135,9 +159,9 @@ private void parseChildren(NodeList configNodes, Map<String, String> namespaces)
135159
}
136160

137161
if(uri != null) {
138-
LOG.error("Invalid range index configuration (" + uri + "): " + e.getMessage());
162+
getLogger().error("Invalid range index configuration (" + uri + "): " + e.getMessage());
139163
} else {
140-
LOG.error("Invalid range index configuration: " + e.getMessage());
164+
getLogger().error("Invalid range index configuration: " + e.getMessage());
141165
}
142166
}
143167
}
@@ -266,4 +290,13 @@ public void remove() {
266290
}
267291

268292
}
269-
}
293+
294+
/**
295+
* Designed to be overridable so that we can observe logging in tests.
296+
*
297+
* @return the logger.
298+
*/
299+
Logger getLogger() {
300+
return LOG;
301+
}
302+
}

extensions/indexes/range/src/test/java/org/exist/indexing/range/RangeIndexConfigTest.java

Lines changed: 7 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,6 @@ public void errorsHaveSourceContext() throws NoSuchFieldException, IllegalAccess
106106
expect(mockCreateDocument.getDocumentURI()).andReturn(mockCollectionXConfUri);
107107

108108
final Capture<String> errorMsgCapture = newCapture();
109-
110109
mockLogger.error(capture(errorMsgCapture));
111110

112111
replay(mockConfigNodes, mockConfigNode, mockCreates, mockCreateDocument, mockCreate, mockEmptyNodeList, mockLogger);
@@ -116,26 +115,17 @@ public void errorsHaveSourceContext() throws NoSuchFieldException, IllegalAccess
116115
final Map<String, String> namespaces = new HashMap<>();
117116
namespaces.put("tei", "http://www.tei-c.org/ns/1.0");
118117

119-
overrideLogger(RangeIndexConfig.class, mockLogger);
120-
final RangeIndexConfig config = new RangeIndexConfig(mockConfigNodes, namespaces);
118+
final RangeIndexConfig config = new RangeIndexConfig(mockConfigNodes, namespaces) {
119+
@Override
120+
Logger getLogger() {
121+
return mockLogger;
122+
}
123+
};
121124

122125
assertTrue(errorMsgCapture.getValue().contains("Illegal QName: '" + badCreateQName + "'.. QName is invalid: INVALID_LOCAL_PART"));
123126
assertTrue(errorMsgCapture.getValue().contains("(" + mockCollectionXConfUri + ")"));
124127

125-
verify(mockConfigNodes, mockConfigNode, mockCreates, mockCreateDocument, mockCreate, mockEmptyNodeList, mockLogger);
128+
verify(mockConfigNodes, mockConfigNode, mockCreates, mockCreateDocument, mockCreate, mockEmptyNodeList);
126129
}
127130

128-
private void overrideLogger(final Class clazz, final Logger logger) throws NoSuchFieldException, IllegalAccessException {
129-
final Field loggerField = clazz.getDeclaredField("LOG");
130-
131-
// allow access to private field
132-
loggerField.setAccessible(true);
133-
134-
// remove final modifier
135-
final Field modifiersField = JDKCompatibility.getModifiersField();
136-
modifiersField.setAccessible(true);
137-
modifiersField.setInt(loggerField, loggerField.getModifiers() & ~Modifier.FINAL);
138-
139-
loggerField.set(null, logger);
140-
}
141131
}

0 commit comments

Comments
 (0)