Skip to content

Commit 86c6f3a

Browse files
committed
Fixed: Wrap setAttribute(ACCESS_EXTERNAL_DTD, ...) calls to catch IllegalArgumentException thrown by older versions of Xalan/Saxon that predate JAXP 1.5
1 parent 23bac92 commit 86c6f3a

5 files changed

Lines changed: 36 additions & 12 deletions

File tree

framework/base/src/main/java/org/apache/ofbiz/base/util/UtilXml.java

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -228,8 +228,12 @@ public static Transformer createOutputTransformer(String encoding, boolean omitX
228228
ByteArrayInputStream bis = new ByteArrayInputStream(sb.toString().getBytes());
229229
TransformerFactory transformerFactory = TransformerFactory.newInstance();
230230
transformerFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
231-
transformerFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");
232-
transformerFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, "");
231+
try {
232+
transformerFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");
233+
transformerFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, "");
234+
} catch (IllegalArgumentException e) {
235+
Debug.logWarning("TransformerFactory does not support ACCESS_EXTERNAL_* attributes: " + e.getMessage(), MODULE);
236+
}
233237
return transformerFactory.newTransformer(new StreamSource(bis));
234238
}
235239

@@ -1282,8 +1286,12 @@ public static String convertDocumentToXmlString(Document document) {
12821286
Transformer transformer;
12831287
try {
12841288
tf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
1285-
tf.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");
1286-
tf.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, "");
1289+
try {
1290+
tf.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");
1291+
tf.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, "");
1292+
} catch (IllegalArgumentException e) {
1293+
Debug.logWarning("TransformerFactory does not support ACCESS_EXTERNAL_* attributes: " + e.getMessage(), MODULE);
1294+
}
12871295
transformer = tf.newTransformer();
12881296
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
12891297
transformer.setOutputProperty(OutputKeys.INDENT, "yes");

framework/base/src/main/java/org/apache/ofbiz/base/util/string/UelFunctions.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -446,8 +446,12 @@ public static String toHtmlString(Node node, String encoding, boolean indent, in
446446
ByteArrayInputStream bis = new ByteArrayInputStream(sb.toString().getBytes(StandardCharsets.UTF_8));
447447
TransformerFactory transformerFactory = TransformerFactory.newInstance();
448448
transformerFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
449-
transformerFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");
450-
transformerFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, "");
449+
try {
450+
transformerFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");
451+
transformerFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, "");
452+
} catch (IllegalArgumentException e) {
453+
Debug.logWarning("TransformerFactory does not support ACCESS_EXTERNAL_* attributes: " + e.getMessage(), MODULE);
454+
}
451455
try (ByteArrayOutputStream os = new ByteArrayOutputStream();) {
452456
UtilXml.transformDomDocument(transformerFactory.newTransformer(new StreamSource(bis)), node, os);
453457
return os.toString();

framework/base/src/main/java/org/apache/ofbiz/base/util/template/XslTransform.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,12 @@ public static String renderTemplate(String template, String data) throws Transfo
5050
String result = null;
5151
TransformerFactory tfactory = TransformerFactory.newInstance();
5252
tfactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
53-
tfactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");
54-
tfactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, "");
53+
try {
54+
tfactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");
55+
tfactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, "");
56+
} catch (IllegalArgumentException e) {
57+
Debug.logWarning("TransformerFactory does not support ACCESS_EXTERNAL_* attributes: " + e.getMessage(), MODULE);
58+
}
5559
if (tfactory.getFeature(SAXSource.FEATURE)) {
5660
// setup for xml data file preprocessing to be able to xinclude
5761
SAXParserFactory pfactory = SAXParserFactory.newInstance();

framework/minilang/src/main/java/org/apache/ofbiz/minilang/MiniLangUtil.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -284,8 +284,12 @@ public static void writeMiniLangDocument(URL xmlURL, Document document) {
284284
styleSheetURL = FlexibleLocation.resolveLocation("component://minilang/config/MiniLang.xslt");
285285
TransformerFactory transformerFactory = TransformerFactory.newInstance();
286286
transformerFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
287-
transformerFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");
288-
transformerFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, "");
287+
try {
288+
transformerFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");
289+
transformerFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, "");
290+
} catch (IllegalArgumentException e) {
291+
Debug.logWarning("TransformerFactory does not support ACCESS_EXTERNAL_* attributes: " + e.getMessage(), MODULE);
292+
}
289293
try (InputStream styleSheetInStream = styleSheetURL.openStream()) {
290294
transformer = transformerFactory.newTransformer(new StreamSource(styleSheetInStream));
291295
}

framework/webapp/src/main/java/org/apache/ofbiz/webapp/view/ApacheFopWorker.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -167,8 +167,12 @@ public static void transform(StreamSource src, StreamSource stylesheet, Fop fop)
167167
try {
168168
TransformerFactory factory = TransformerFactory.newInstance();
169169
factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
170-
factory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");
171-
factory.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, "");
170+
try {
171+
factory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");
172+
factory.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, "");
173+
} catch (IllegalArgumentException e) {
174+
Debug.logWarning("TransformerFactory does not support ACCESS_EXTERNAL_* attributes: " + e.getMessage(), MODULE);
175+
}
172176
Transformer transformer;
173177
if (stylesheet == null) {
174178
transformer = factory.newTransformer();

0 commit comments

Comments
 (0)