This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel-spring-boot.git
commit 602a16320082c26f2f92fbd26fdedb24658ab971 Author: Claus Ibsen <[email protected]> AuthorDate: Wed Aug 12 17:10:05 2026 +0200 Regen --- .../springboot/catalog/components/ai-tool.json | 28 ++++++++++--------- .../src/main/docs/ai-tool.json | 12 +++++++++ .../springboot/AiToolComponentConfiguration.java | 31 ++++++++++++++++++++++ .../modules/ROOT/pages/starters/ai-tool.adoc | 4 ++- tooling/camel-spring-boot-dependencies/pom.xml | 13 ++++++--- 5 files changed, 71 insertions(+), 17 deletions(-) diff --git a/catalog/camel-catalog-provider-springboot/src/main/resources/org/apache/camel/springboot/catalog/components/ai-tool.json b/catalog/camel-catalog-provider-springboot/src/main/resources/org/apache/camel/springboot/catalog/components/ai-tool.json index a595d4e4a36..cfe4022bd5b 100644 --- a/catalog/camel-catalog-provider-springboot/src/main/resources/org/apache/camel/springboot/catalog/components/ai-tool.json +++ b/catalog/camel-catalog-provider-springboot/src/main/resources/org/apache/camel/springboot/catalog/components/ai-tool.json @@ -31,11 +31,13 @@ "destructiveHint": { "index": 4, "kind": "property", "displayName": "Destructive Hint", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.ai.tool.AiToolConfiguration", "configurationField": "configuration", "description": "MCP hint that the tool may perform destructive o [...] "idempotentHint": { "index": 5, "kind": "property", "displayName": "Idempotent Hint", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.ai.tool.AiToolConfiguration", "configurationField": "configuration", "description": "MCP hint that repeating the tool call with the sam [...] "openWorldHint": { "index": 6, "kind": "property", "displayName": "Open World Hint", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.ai.tool.AiToolConfiguration", "configurationField": "configuration", "description": "MCP hint that the tool interacts with external syst [...] - "parameters": { "index": 7, "kind": "property", "displayName": "Parameters", "group": "consumer", "label": "consumer", "required": false, "type": "object", "javaType": "java.util.Map<java.lang.String, java.lang.String>", "prefix": "parameter.", "multiValue": true, "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.ai.tool.AiToolConfiguration", "configurationField": "configuration", "description": "Tool in [...] - "readOnlyHint": { "index": 8, "kind": "property", "displayName": "Read Only Hint", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.ai.tool.AiToolConfiguration", "configurationField": "configuration", "description": "MCP hint that the tool only reads data and does not m [...] - "tags": { "index": 9, "kind": "property", "displayName": "Tags", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.ai.tool.AiToolConfiguration", "configurationField": "configuration", "description": "Comma-separated list of tags used to group tools. Producers filter the registry by these tags to [...] - "title": { "index": 10, "kind": "property", "displayName": "Title", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.ai.tool.AiToolConfiguration", "configurationField": "configuration", "description": "Optional display title for MCP tool listings. Advisory hint for MCP clients only." }, - "autowiredEnabled": { "index": 11, "kind": "property", "displayName": "Autowired Enabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether autowiring is enabled. This is used for automatic autowiring options (the option must be marked as autowired) by looking up in the registry to find if there is a single instance of matching [...] + "outputParameters": { "index": 7, "kind": "property", "displayName": "Output Parameters", "group": "consumer", "label": "consumer", "required": false, "type": "object", "javaType": "java.util.Map<java.lang.String, java.lang.String>", "prefix": "outputParameter.", "multiValue": true, "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.ai.tool.AiToolConfiguration", "configurationField": "configuration", "des [...] + "outputSchema": { "index": 8, "kind": "property", "displayName": "Output Schema", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "supportFileReference": true, "configurationClass": "org.apache.camel.component.ai.tool.AiToolConfiguration", "configurationField": "configuration", "description": "Raw JSON Schema describing the tool's structured [...] + "parameters": { "index": 9, "kind": "property", "displayName": "Parameters", "group": "consumer", "label": "consumer", "required": false, "type": "object", "javaType": "java.util.Map<java.lang.String, java.lang.String>", "prefix": "parameter.", "multiValue": true, "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.ai.tool.AiToolConfiguration", "configurationField": "configuration", "description": "Tool in [...] + "readOnlyHint": { "index": 10, "kind": "property", "displayName": "Read Only Hint", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.ai.tool.AiToolConfiguration", "configurationField": "configuration", "description": "MCP hint that the tool only reads data and does not [...] + "tags": { "index": 11, "kind": "property", "displayName": "Tags", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.ai.tool.AiToolConfiguration", "configurationField": "configuration", "description": "Comma-separated list of tags used to group tools. Producers filter the registry by these tags t [...] + "title": { "index": 12, "kind": "property", "displayName": "Title", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.ai.tool.AiToolConfiguration", "configurationField": "configuration", "description": "Optional display title for MCP tool listings. Advisory hint for MCP clients only." }, + "autowiredEnabled": { "index": 13, "kind": "property", "displayName": "Autowired Enabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether autowiring is enabled. This is used for automatic autowiring options (the option must be marked as autowired) by looking up in the registry to find if there is a single instance of matching [...] }, "properties": { "toolName": { "index": 0, "kind": "path", "displayName": "Tool Name", "group": "consumer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The tool name. This is the name the LLM sees and uses to invoke the tool." }, @@ -44,12 +46,14 @@ "destructiveHint": { "index": 3, "kind": "parameter", "displayName": "Destructive Hint", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.ai.tool.AiToolConfiguration", "configurationField": "configuration", "description": "MCP hint that the tool may perform destructive [...] "idempotentHint": { "index": 4, "kind": "parameter", "displayName": "Idempotent Hint", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.ai.tool.AiToolConfiguration", "configurationField": "configuration", "description": "MCP hint that repeating the tool call with the sa [...] "openWorldHint": { "index": 5, "kind": "parameter", "displayName": "Open World Hint", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.ai.tool.AiToolConfiguration", "configurationField": "configuration", "description": "MCP hint that the tool interacts with external sys [...] - "parameters": { "index": 6, "kind": "parameter", "displayName": "Parameters", "group": "consumer", "label": "consumer", "required": false, "type": "object", "javaType": "java.util.Map<java.lang.String, java.lang.String>", "prefix": "parameter.", "multiValue": true, "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.ai.tool.AiToolConfiguration", "configurationField": "configuration", "description": "Tool i [...] - "readOnlyHint": { "index": 7, "kind": "parameter", "displayName": "Read Only Hint", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.ai.tool.AiToolConfiguration", "configurationField": "configuration", "description": "MCP hint that the tool only reads data and does not [...] - "tags": { "index": 8, "kind": "parameter", "displayName": "Tags", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.ai.tool.AiToolConfiguration", "configurationField": "configuration", "description": "Comma-separated list of tags used to group tools. Producers filter the registry by these tags t [...] - "title": { "index": 9, "kind": "parameter", "displayName": "Title", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.ai.tool.AiToolConfiguration", "configurationField": "configuration", "description": "Optional display title for MCP tool listings. Advisory hint for MCP clients only." }, - "bridgeErrorHandler": { "index": 10, "kind": "parameter", "displayName": "Bridge Error Handler", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions (if possible) occurred while the Camel consumer is trying to pickup incoming [...] - "exceptionHandler": { "index": 11, "kind": "parameter", "displayName": "Exception Handler", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "object", "javaType": "org.apache.camel.spi.ExceptionHandler", "optionalPrefix": "consumer.", "deprecated": false, "autowired": false, "secret": false, "description": "To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this option is not in use. By de [...] - "exchangePattern": { "index": 12, "kind": "parameter", "displayName": "Exchange Pattern", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "enum", "javaType": "org.apache.camel.ExchangePattern", "enum": [ "InOnly", "InOut" ], "deprecated": false, "autowired": false, "secret": false, "description": "Sets the exchange pattern when the consumer creates an exchange." } + "outputParameters": { "index": 6, "kind": "parameter", "displayName": "Output Parameters", "group": "consumer", "label": "consumer", "required": false, "type": "object", "javaType": "java.util.Map<java.lang.String, java.lang.String>", "prefix": "outputParameter.", "multiValue": true, "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.ai.tool.AiToolConfiguration", "configurationField": "configuration", "de [...] + "outputSchema": { "index": 7, "kind": "parameter", "displayName": "Output Schema", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "supportFileReference": true, "configurationClass": "org.apache.camel.component.ai.tool.AiToolConfiguration", "configurationField": "configuration", "description": "Raw JSON Schema describing the tool's structured [...] + "parameters": { "index": 8, "kind": "parameter", "displayName": "Parameters", "group": "consumer", "label": "consumer", "required": false, "type": "object", "javaType": "java.util.Map<java.lang.String, java.lang.String>", "prefix": "parameter.", "multiValue": true, "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.ai.tool.AiToolConfiguration", "configurationField": "configuration", "description": "Tool i [...] + "readOnlyHint": { "index": 9, "kind": "parameter", "displayName": "Read Only Hint", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.ai.tool.AiToolConfiguration", "configurationField": "configuration", "description": "MCP hint that the tool only reads data and does not [...] + "tags": { "index": 10, "kind": "parameter", "displayName": "Tags", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.ai.tool.AiToolConfiguration", "configurationField": "configuration", "description": "Comma-separated list of tags used to group tools. Producers filter the registry by these tags [...] + "title": { "index": 11, "kind": "parameter", "displayName": "Title", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.ai.tool.AiToolConfiguration", "configurationField": "configuration", "description": "Optional display title for MCP tool listings. Advisory hint for MCP clients only." }, + "bridgeErrorHandler": { "index": 12, "kind": "parameter", "displayName": "Bridge Error Handler", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions (if possible) occurred while the Camel consumer is trying to pickup incoming [...] + "exceptionHandler": { "index": 13, "kind": "parameter", "displayName": "Exception Handler", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "object", "javaType": "org.apache.camel.spi.ExceptionHandler", "optionalPrefix": "consumer.", "deprecated": false, "autowired": false, "secret": false, "description": "To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this option is not in use. By de [...] + "exchangePattern": { "index": 14, "kind": "parameter", "displayName": "Exchange Pattern", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "enum", "javaType": "org.apache.camel.ExchangePattern", "enum": [ "InOnly", "InOut" ], "deprecated": false, "autowired": false, "secret": false, "description": "Sets the exchange pattern when the consumer creates an exchange." } } } diff --git a/components-starter/camel-ai-tool-starter/src/main/docs/ai-tool.json b/components-starter/camel-ai-tool-starter/src/main/docs/ai-tool.json index a80f9d60625..8d1ad3ac759 100644 --- a/components-starter/camel-ai-tool-starter/src/main/docs/ai-tool.json +++ b/components-starter/camel-ai-tool-starter/src/main/docs/ai-tool.json @@ -77,6 +77,18 @@ "sourceType": "org.apache.camel.component.ai.tool.springboot.AiToolComponentConfiguration", "defaultValue": false }, + { + "name": "camel.component.ai-tool.output-parameters", + "type": "java.util.Map<java.lang.String,java.lang.String>", + "description": "Tool output schema fields. Format: outputParameter.NAME=TYPE, outputParameter.NAME.description=TEXT. Supported types: string, integer, number, boolean. Mutually exclusive with outputSchema. This is a multi-value option with prefix: outputParameter.", + "sourceType": "org.apache.camel.component.ai.tool.springboot.AiToolComponentConfiguration" + }, + { + "name": "camel.component.ai-tool.output-schema", + "type": "java.lang.String", + "description": "Raw JSON Schema describing the tool's structured output. Supports inline JSON and resource references (classpath:, file:, resource:). Mutually exclusive with the outputParameter multi-value options. When declared, the route body is parsed as JSON and exposed as structured content to MCP clients.", + "sourceType": "org.apache.camel.component.ai.tool.springboot.AiToolComponentConfiguration" + }, { "name": "camel.component.ai-tool.parameters", "type": "java.util.Map<java.lang.String,java.lang.String>", diff --git a/components-starter/camel-ai-tool-starter/src/main/java/org/apache/camel/component/ai/tool/springboot/AiToolComponentConfiguration.java b/components-starter/camel-ai-tool-starter/src/main/java/org/apache/camel/component/ai/tool/springboot/AiToolComponentConfiguration.java index 3152b83d161..3847b9173d5 100644 --- a/components-starter/camel-ai-tool-starter/src/main/java/org/apache/camel/component/ai/tool/springboot/AiToolComponentConfiguration.java +++ b/components-starter/camel-ai-tool-starter/src/main/java/org/apache/camel/component/ai/tool/springboot/AiToolComponentConfiguration.java @@ -84,6 +84,21 @@ public class AiToolComponentConfiguration * application's control. Advisory for MCP clients; not enforced by Camel. */ private Boolean openWorldHint = false; + /** + * Tool output schema fields. Format: outputParameter.NAME=TYPE, + * outputParameter.NAME.description=TEXT. Supported types: string, integer, + * number, boolean. Mutually exclusive with outputSchema. This is a + * multi-value option with prefix: outputParameter. + */ + private Map<String, String> outputParameters; + /** + * Raw JSON Schema describing the tool's structured output. Supports inline + * JSON and resource references (classpath:, file:, resource:). Mutually + * exclusive with the outputParameter multi-value options. When declared, + * the route body is parsed as JSON and exposed as structured content to MCP + * clients. + */ + private String outputSchema; /** * Tool input parameters. Format: parameter.NAME=TYPE, * parameter.NAME.description=TEXT, parameter.NAME.required=true or false, @@ -174,6 +189,22 @@ public class AiToolComponentConfiguration this.openWorldHint = openWorldHint; } + public Map<String, String> getOutputParameters() { + return outputParameters; + } + + public void setOutputParameters(Map<String, String> outputParameters) { + this.outputParameters = outputParameters; + } + + public String getOutputSchema() { + return outputSchema; + } + + public void setOutputSchema(String outputSchema) { + this.outputSchema = outputSchema; + } + public Map<String, String> getParameters() { return parameters; } diff --git a/docs/spring-boot/modules/ROOT/pages/starters/ai-tool.adoc b/docs/spring-boot/modules/ROOT/pages/starters/ai-tool.adoc index a01f56d9e6f..ca6e420f802 100644 --- a/docs/spring-boot/modules/ROOT/pages/starters/ai-tool.adoc +++ b/docs/spring-boot/modules/ROOT/pages/starters/ai-tool.adoc @@ -23,7 +23,7 @@ Please refer to the above links for usage and configuration details. == Spring Boot Auto-Configuration -The starter supports 13 options, which are listed below. +The starter supports 15 options, which are listed below. [width="100%",cols="2,5,^1,2",options="header"] |=== @@ -37,6 +37,8 @@ The starter supports 13 options, which are listed below. | camel.component.ai-tool.enabled | Whether to enable auto configuration of the ai-tool component. This is enabled by default. | | Boolean | camel.component.ai-tool.idempotent-hint | MCP hint that repeating the tool call with the same arguments has no additional effect. Advisory for MCP clients; not enforced by Camel. | false | Boolean | camel.component.ai-tool.open-world-hint | MCP hint that the tool interacts with external systems outside the application's control. Advisory for MCP clients; not enforced by Camel. | false | Boolean +| camel.component.ai-tool.output-parameters | Tool output schema fields. Format: outputParameter.NAME=TYPE, outputParameter.NAME.description=TEXT. Supported types: string, integer, number, boolean. Mutually exclusive with outputSchema. This is a multi-value option with prefix: outputParameter. | | String> +| camel.component.ai-tool.output-schema | Raw JSON Schema describing the tool's structured output. Supports inline JSON and resource references (classpath:, file:, resource:). Mutually exclusive with the outputParameter multi-value options. When declared, the route body is parsed as JSON and exposed as structured content to MCP clients. | | String | camel.component.ai-tool.parameters | Tool input parameters. Format: parameter.NAME=TYPE, parameter.NAME.description=TEXT, parameter.NAME.required=true or false, parameter.NAME.enum=val1,val2. Supported types: string, integer, number, boolean. Mutually exclusive with argSchema. This is a multi-value option with prefix: parameter. | | String> | camel.component.ai-tool.read-only-hint | MCP hint that the tool only reads data and does not modify state. Advisory for MCP clients; not enforced by Camel. | false | Boolean | camel.component.ai-tool.tags | Comma-separated list of tags used to group tools. Producers filter the registry by these tags to select which tools to expose to the LLM. When omitted, the tool goes into a default pool available to all producers. | | String diff --git a/tooling/camel-spring-boot-dependencies/pom.xml b/tooling/camel-spring-boot-dependencies/pom.xml index 72767a5e33f..571c45ebb12 100644 --- a/tooling/camel-spring-boot-dependencies/pom.xml +++ b/tooling/camel-spring-boot-dependencies/pom.xml @@ -38,12 +38,12 @@ <dependency> <groupId>com.google.protobuf</groupId> <artifactId>protobuf-java</artifactId> - <version>4.34.2</version> + <version>4.35.1</version> </dependency> <dependency> <groupId>com.google.protobuf</groupId> <artifactId>protobuf-java-util</artifactId> - <version>4.34.2</version> + <version>4.35.1</version> <exclusions> <exclusion> <groupId>org.checkerframework</groupId> @@ -260,7 +260,7 @@ <dependency> <groupId>io.opentelemetry.proto</groupId> <artifactId>opentelemetry-proto</artifactId> - <version>1.10.0-alpha</version> + <version>1.11.0-alpha</version> </dependency> <dependency> <groupId>net.bytebuddy</groupId> @@ -4874,6 +4874,11 @@ <artifactId>camel-twitter</artifactId> <version>4.23.0-SNAPSHOT</version> </dependency> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-ubl</artifactId> + <version>4.23.0-SNAPSHOT</version> + </dependency> <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-undertow</artifactId> @@ -5283,7 +5288,7 @@ <dependency> <groupId>org.junit</groupId> <artifactId>junit-start</artifactId> - <version>6.1.2</version> + <version>6.1.3</version> </dependency> <dependency> <groupId>org.xmlunit</groupId>
