Skip to content

Commit b89c512

Browse files
committed
improved xml transformer config
1 parent 4ddc24c commit b89c512

File tree

3 files changed

+49
-1
lines changed

3 files changed

+49
-1
lines changed

dsf-bpe/dsf-bpe-server/src/main/java/dev/dsf/bpe/webservice/ProcessService.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,9 @@
2323
import java.util.Objects;
2424
import java.util.function.Consumer;
2525

26+
import javax.xml.XMLConstants;
2627
import javax.xml.transform.Transformer;
28+
import javax.xml.transform.TransformerConfigurationException;
2729
import javax.xml.transform.TransformerException;
2830
import javax.xml.transform.TransformerFactory;
2931
import javax.xml.transform.dom.DOMSource;
@@ -46,6 +48,7 @@
4648
import jakarta.ws.rs.core.Response;
4749
import jakarta.ws.rs.core.Response.Status;
4850
import jakarta.ws.rs.core.StreamingOutput;
51+
import net.sf.saxon.lib.FeatureKeys;
4952

5053
@RolesAllowed("ADMIN")
5154
@Path(ProcessService.PATH)
@@ -61,7 +64,20 @@ public ProcessService(ThymeleafTemplateService templateService, RepositoryServic
6164
super(templateService, "Process");
6265

6366
this.repositoryService = repositoryService;
67+
6468
transformerFactory = TransformerFactory.newInstance();
69+
transformerFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");
70+
transformerFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, "");
71+
72+
try
73+
{
74+
transformerFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
75+
transformerFactory.setFeature(FeatureKeys.ALLOW_EXTERNAL_FUNCTIONS, false);
76+
}
77+
catch (TransformerConfigurationException e)
78+
{
79+
throw new RuntimeException(e);
80+
}
6581
}
6682

6783
@Override

dsf-fhir/dsf-fhir-server/src/main/java/dev/dsf/fhir/adapter/ThymeleafTemplateServiceImpl.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import java.util.regex.Pattern;
3535
import java.util.stream.Collectors;
3636

37+
import javax.xml.XMLConstants;
3738
import javax.xml.transform.OutputKeys;
3839
import javax.xml.transform.Transformer;
3940
import javax.xml.transform.TransformerConfigurationException;
@@ -63,6 +64,7 @@
6364
import jakarta.ws.rs.core.PathSegment;
6465
import jakarta.ws.rs.core.SecurityContext;
6566
import jakarta.ws.rs.core.UriInfo;
67+
import net.sf.saxon.lib.FeatureKeys;
6668

6769
public class ThymeleafTemplateServiceImpl implements ThymeleafTemplateService, InitializingBean
6870
{
@@ -106,7 +108,7 @@ public class ThymeleafTemplateServiceImpl implements ThymeleafTemplateService, I
106108

107109
private final Map<Class<? extends Resource>, List<ThymeleafContext>> contextsByResourceType;
108110

109-
private final TransformerFactory transformerFactory = TransformerFactory.newInstance();
111+
private final TransformerFactory transformerFactory;
110112
private final TemplateEngine templateEngine = new TemplateEngine();
111113

112114
/**
@@ -139,6 +141,20 @@ public ThymeleafTemplateServiceImpl(String serverBaseUrl, Theme theme, FhirConte
139141
resolver.setCacheable(cacheEnabled);
140142

141143
templateEngine.setTemplateResolver(resolver);
144+
145+
transformerFactory = TransformerFactory.newInstance();
146+
transformerFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");
147+
transformerFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, "");
148+
149+
try
150+
{
151+
transformerFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
152+
transformerFactory.setFeature(FeatureKeys.ALLOW_EXTERNAL_FUNCTIONS, false);
153+
}
154+
catch (TransformerConfigurationException e)
155+
{
156+
throw new RuntimeException(e);
157+
}
142158
}
143159

144160
@Override

dsf-maven/dsf-maven-plugin/src/main/java/dev/dsf/maven/bundle/BundleGenerator.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,10 @@
3636
import java.util.stream.Collectors;
3737
import java.util.stream.Stream;
3838

39+
import javax.xml.XMLConstants;
3940
import javax.xml.transform.OutputKeys;
4041
import javax.xml.transform.Transformer;
42+
import javax.xml.transform.TransformerConfigurationException;
4143
import javax.xml.transform.TransformerException;
4244
import javax.xml.transform.TransformerFactory;
4345
import javax.xml.transform.stream.StreamResult;
@@ -70,6 +72,7 @@
7072
import ca.uhn.fhir.context.support.IValidationSupport;
7173
import ca.uhn.fhir.parser.IParser;
7274
import ca.uhn.fhir.parser.LenientErrorHandler;
75+
import net.sf.saxon.lib.FeatureKeys;
7376

7477
public class BundleGenerator
7578
{
@@ -380,6 +383,19 @@ private void saveBundle(Bundle bundle, Path bundleFilename) throws IOException,
380383
{
381384
// minimized output: empty-element tags, no indentation, no line-breaks
382385
TransformerFactory transformerFactory = TransformerFactory.newInstance();
386+
transformerFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");
387+
transformerFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, "");
388+
389+
try
390+
{
391+
transformerFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
392+
transformerFactory.setFeature(FeatureKeys.ALLOW_EXTERNAL_FUNCTIONS, false);
393+
}
394+
catch (TransformerConfigurationException e)
395+
{
396+
throw new RuntimeException(e);
397+
}
398+
383399
Transformer transformer = transformerFactory.newTransformer();
384400
transformer.setOutputProperty(OutputKeys.METHOD, "xml");
385401
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");

0 commit comments

Comments
 (0)