destinationClassloader
Description
With this configuration option you can switch the default classloader of the diagram generator which is the classloader of the PlantUMLSequenceDiagramConfig class. Afterwards all classes to be added to the diagram are searched with this classloader. Sometimes if you need a more generic classloader or a customized classloader you can add it with this option and this classloader is used for all class search/load operations.
For example this option is used by the maven plugin to add all maven dependencies to the classpath.
Example
Here is an example from the JUnit tests using this configuration parameter:
String testClassPath = "file:///" + System.getProperty("user.dir") + "/src/test/classes/";
URL[] classesURLs = new URL[] { new URL(testClassPath) };
URLClassLoader customClassLoader = new URLClassLoader(classesURLs); (1)
customClassLoader.loadClass("de.elnarion.test.sequence.t0004.User");
PlantUMLSequenceDiagramConfigBuilder builder = new PlantUMLSequenceDiagramConfigBuilder(User.class.getName(),
"interaction").withClassloader(customClassLoader); (2)
PlantUMLSequenceDiagramGenerator generator = new PlantUMLSequenceDiagramGenerator(builder.build());
String expectedDiagramText = IOUtils.toString(
Objects.requireNonNull(classLoader.getResource("sequence/0004_sequence_diagram_with_custom_classloader.txt")),
StandardCharsets.UTF_8);
// ACT
String generatedDiagram = generator.generateDiagramText();
// ASSERT
assertAll(() -> assertNotNull(generatedDiagram), () -> assertEquals(expectedDiagramText.replaceAll("\\s+", ""),
generatedDiagram.replaceAll("\\s+", "")));
which is rendered this way:
and produces this PlantUML diagram text:
@startuml
participant User
participant View
participant Controller
participant Model
activate User
User -> View : interact
activate View
View -> Controller : handleEvent
activate Controller
Controller -> Model : manipulate
activate Model
Model -> View : notifyView
activate View
View -> Model : getData
activate Model
Model --> View
deactivate Model
View --> Model
deactivate View
Model --> Controller
deactivate Model
Controller --> View
deactivate Controller
View --> User
deactivate View
deactivate User
@enduml