Skip to content

Add missing getters for JAXB configuration entities#10

Closed
Mika3578 wants to merge 1 commit intocodex/add-complete-pipeline-workflow-for-buildfrom
codex/implement-missing-getter-methods
Closed

Add missing getters for JAXB configuration entities#10
Mika3578 wants to merge 1 commit intocodex/add-complete-pipeline-workflow-for-buildfrom
codex/implement-missing-getter-methods

Conversation

@Mika3578
Copy link
Owner

@Mika3578 Mika3578 commented Nov 23, 2025

Summary

  • add JAXB entity classes for grabconfig, configuration, and legacy config models with required getter methods
  • ensure update configuration, category, and plugin entities expose expected accessors

Testing

  • not run (build tooling unavailable in environment)

Codex Task

Summary by Sourcery

Introduce JAXB-mapped entity classes for configuration, legacy config, and grab configuration models to support XML (un)marshalling across proxies, download/export settings, tasks, and grab plugins/categories.

New Features:

  • Add JAXB entity model for the main configuration XML including proxies, OS, download, update, export, and task definitions.
  • Add JAXB entity model for legacy config XML including proxies, downloaders, exporters, and task definitions.
  • Add JAXB entity model for grab configuration XML including plugins, channels, categories, and parameters.

@sourcery-ai
Copy link

sourcery-ai bot commented Nov 23, 2025

Reviewer's Guide

Introduces JAXB-mapped configuration entity classes for legacy and new configuration models (core config, grabConfig, and related plugin/category structures), ensuring they expose the necessary getters and nested collections for XML marshalling/unmarshalling.

Class diagram for legacy config JAXB entities (com.dabi.habitv.config.entities)

classDiagram
    class Config {
        "List<Proxy> proxy"
        "Integer maxAttempts"
        "String cmdProcessor"
        "Integer demonTime"
        "Integer fileNameCutSize"
        "String workingDir"
        "String indexDir"
        "String providerPluginDir"
        "String downloaderPluginDir"
        "String exporterPluginDir"
        "String downloadOuput"
        "List<Downloader> downloader"
        "List<Exporter> exporter"
        "List<TaskDefinition> taskDefinition"
    }

    class Proxy {
        "String protocol"
        "String host"
        "int port"
        "PluginSupport pluginSupport"
    }

    class PluginSupport {
        "List<String> plugin"
    }

    class ConditionType {
        "String reference"
        "String pattern"
    }

    class Exporter {
        "ConditionType condition"
        "String name"
        "String output"
        "String cmd"
        "List<Exporter> exporter"
    }

    class Downloader {
        "String name"
        "String binPath"
    }

    class TaskDefinition {
        "String taskName"
        "int size"
    }

    Config "1" o-- "*" Proxy : "proxy"
    Config "1" o-- "*" Downloader : "downloader"
    Config "1" o-- "*" Exporter : "exporter"
    Config "1" o-- "*" TaskDefinition : "taskDefinition"

    Proxy "1" o-- "0..1" PluginSupport : "pluginSupport"
    Exporter "1" o-- "0..1" ConditionType : "condition"
    Exporter "1" o-- "*" Exporter : "exporter"
Loading

Class diagram for new configuration JAXB entities (com.dabi.habitv.configuration.entities)

classDiagram
    class Configuration {
        "Proxies proxies"
        "OsConfig osConfig"
        "DownloadConfig downloadConfig"
        "UpdateConfig updateConfig"
        "ExportConfig exportConfig"
        "TaskDefinition taskDefinition"
    }

    class Proxies {
        "List<Proxy> proxy"
    }

    class OsConfig {
        "String cmdProcessor"
    }

    class DownloadConfig {
        "String downloadOuput"
        "Integer maxAttempts"
        "Integer demonCheckTime"
        "Integer fileNameCutSize"
        "Downloaders downloaders"
    }

    class Downloaders {
        "List<Object> any"
    }

    class UpdateConfig {
        "Boolean updateOnStartup"
        "Boolean autoriseSnapshot"
    }

    class ExportConfig {
        "Exporters exporters"
    }

    class Exporters {
        "List<Exporter> exporter"
    }

    class TaskDefinition {
        "List<Object> any"
    }

    class Exporter {
        "ConditionType condition"
        "String id"
        "String label"
        "String command"
        "Subexporters subexporters"
    }

    class Subexporters {
        "List<Exporter> exporter"
    }

    class Proxy {
        "String protocol"
        "String host"
        "int port"
        "PluginSupport pluginSupport"
    }

    class PluginSupport {
        "List<String> plugin"
    }

    class ConditionType {
        "String reference"
        "String pattern"
    }

    class ObjectFactory {
        "+Configuration createConfiguration()"
    }

    Configuration "1" o-- "0..1" Proxies : "proxies"
    Configuration "1" o-- "0..1" OsConfig : "osConfig"
    Configuration "1" o-- "0..1" DownloadConfig : "downloadConfig"
    Configuration "1" o-- "0..1" UpdateConfig : "updateConfig"
    Configuration "1" o-- "0..1" ExportConfig : "exportConfig"
    Configuration "1" o-- "0..1" TaskDefinition : "taskDefinition"

    Proxies "1" o-- "*" Proxy : "proxy"
    DownloadConfig "1" o-- "0..1" Downloaders : "downloaders"
    Downloaders "1" o-- "*" TaskDefinition : "any"

    ExportConfig "1" o-- "0..1" Exporters : "exporters"
    Exporters "1" o-- "*" Exporter : "exporter"

    Exporter "1" o-- "0..1" ConditionType : "condition"
    Exporter "1" o-- "0..1" Subexporters : "subexporters"
    Subexporters "1" o-- "*" Exporter : "exporter"

    Proxy "1" o-- "1" PluginSupport : "pluginSupport"

    ObjectFactory ..> Configuration : "creates"
Loading

Class diagram for grabConfig JAXB entities (com.dabi.habitv.grabconfig.entities)

classDiagram
    class GrabConfig {
        "Plugins plugins"
        "List<Channel> channel"
    }

    class Plugins {
        "List<Plugin> plugin"
    }

    class Plugin {
        "String name"
        "Categories categories"
        "String status"
        "Boolean deleted"
    }

    class Categories {
        "List<CategoryType> category"
    }

    class CategoryType {
        "String id"
        "String name"
        "Boolean download"
        "Boolean downloadable"
        "Boolean template"
        "Includes includes"
        "Excludes excludes"
        "Subcategories subcategories"
        "String extension"
        "String status"
        "Configuration configuration"
        "Boolean deleted"
    }

    class Includes {
        "List<String> include"
    }

    class Excludes {
        "List<String> exclude"
    }

    class Subcategories {
        "List<CategoryType> category"
    }

    class CategoryConfiguration {
        "List<Object> any"
    }

    class Channel {
        "String name"
        "List<Category> category"
        "String status"
    }

    class Category {
        "String id"
        "String name"
        "Boolean toDownload"
        "List<String> include"
        "List<String> exclude"
        "List<Category> category"
        "String extension"
        "Integer status"
        "List<Parameter> parameter"
    }

    class Parameter {
        "String key"
        "String value"
    }

    GrabConfig "1" o-- "0..1" Plugins : "plugins"
    GrabConfig "1" o-- "*" Channel : "channel"

    Plugins "1" o-- "*" Plugin : "plugin"
    Plugin "1" o-- "1" Categories : "categories"
    Categories "1" o-- "*" CategoryType : "category"

    CategoryType "1" o-- "0..1" Includes : "includes"
    CategoryType "1" o-- "0..1" Excludes : "excludes"
    CategoryType "1" o-- "0..1" Subcategories : "subcategories"
    CategoryType "1" o-- "0..1" CategoryConfiguration : "configuration"
    Subcategories "1" o-- "*" CategoryType : "category"

    Channel "1" o-- "*" Category : "category"
    Category "1" o-- "*" Category : "category"
    Category "1" o-- "*" Parameter : "parameter"
Loading

File-Level Changes

Change Details Files
Add JAXB entity for the main configuration root and its nested configuration sections.
  • Define Configuration root element with JAXB annotations and fields for proxies, OS, download, update, export, and task definitions
  • Implement getters/setters for each top-level configuration section to support JAXB access
  • Model nested types (Proxies, OsConfig, DownloadConfig, UpdateConfig, ExportConfig, TaskDefinition) with appropriate JAXB annotations and lazy-initialized collection getters
application/core/src/com/dabi/habitv/configuration/entities/Configuration.java
Add JAXB entities for legacy core config model including proxy, downloader, exporter, and task definitions.
  • Create Config root element with JAXB annotations mapping to legacy config XML structure and providing list and scalar getters/setters
  • Introduce legacy Proxy entity with nested PluginSupport and lazy list getter for supported plugins
  • Add legacy Exporter, Downloader, ConditionType, and TaskDefinition entities with required getters/setters and list initialization
application/core/src/com/dabi/habitv/config/entities/Config.java
application/core/src/com/dabi/habitv/config/entities/Proxy.java
application/core/src/com/dabi/habitv/config/entities/Exporter.java
application/core/src/com/dabi/habitv/config/entities/ConditionType.java
application/core/src/com/dabi/habitv/config/entities/Downloader.java
application/core/src/com/dabi/habitv/config/entities/TaskDefinition.java
Add JAXB entities for grab configuration model covering grabConfig root, channels, plugins, categories, and parameters.
  • Define GrabConfig root with nested Plugins container and channel list, including lazy list initialization
  • Add Channel entity with name, status, and category collection with getters/setters
  • Introduce Category and CategoryType entities with nested include/exclude lists, subcategories, configuration elements, and deletion/template flags
  • Create Plugin entity with nested Categories wrapper for CategoryType instances and deletion/status fields
  • Add Parameter entity with key/value fields and basic accessors
application/core/src/com/dabi/habitv/grabconfig/entities/GrabConfig.java
application/core/src/com/dabi/habitv/grabconfig/entities/Channel.java
application/core/src/com/dabi/habitv/grabconfig/entities/Category.java
application/core/src/com/dabi/habitv/grabconfig/entities/CategoryType.java
application/core/src/com/dabi/habitv/grabconfig/entities/Plugin.java
application/core/src/com/dabi/habitv/grabconfig/entities/Parameter.java
Add JAXB support classes shared by new configuration model (condition, proxy plugin support, exporter, object factory).
  • Create ConditionType in new configuration package mirroring legacy condition structure with JAXB annotations and getters/setters
  • Add configuration-level Proxy entity referencing a separate PluginSupport type and exposing standard getters/setters
  • Introduce configuration Exporter entity with nested Subexporters container and lazy list getter for exporters
  • Provide PluginSupport helper class for configuration package with lazily initialized plugin list
  • Add ObjectFactory to create Configuration instances for JAXB
application/core/src/com/dabi/habitv/configuration/entities/ConditionType.java
application/core/src/com/dabi/habitv/configuration/entities/Proxy.java
application/core/src/com/dabi/habitv/configuration/entities/Exporter.java
application/core/src/com/dabi/habitv/configuration/entities/PluginSupport.java
application/core/src/com/dabi/habitv/configuration/entities/ObjectFactory.java

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

Copy link

@sourcery-ai sourcery-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey there - I've reviewed your changes - here's some feedback:

  • There are now parallel classes with very similar names and structure in the config and configuration packages (e.g., ConditionType, Proxy, Exporter); consider adding brief comments or renaming to clarify which ones are for legacy vs new schemas to avoid future confusion and accidental misuse.
  • In configuration.entities.Proxy, pluginSupport is marked as @XmlElement(required = true) but is not lazily initialized like other collections; consider initializing it in the getter (similar to how list fields are handled) to reduce the risk of NullPointerException when constructing instances programmatically.
Prompt for AI Agents
Please address the comments from this code review:

## Overall Comments
- There are now parallel classes with very similar names and structure in the `config` and `configuration` packages (e.g., `ConditionType`, `Proxy`, `Exporter`); consider adding brief comments or renaming to clarify which ones are for legacy vs new schemas to avoid future confusion and accidental misuse.
- In `configuration.entities.Proxy`, `pluginSupport` is marked as `@XmlElement(required = true)` but is not lazily initialized like other collections; consider initializing it in the getter (similar to how list fields are handled) to reduce the risk of `NullPointerException` when constructing instances programmatically.

## Individual Comments

### Comment 1
<location> `application/core/src/com/dabi/habitv/config/entities/Config.java:13-22` </location>
<code_context>
+@XmlType(name = "config", propOrder = {"proxy", "maxAttempts", "cmdProcessor", "demonTime", "fileNameCutSize", "workingDir", "indexDir", "providerPluginDir", "downloaderPluginDir", "exporterPluginDir", "downloadOuput", "downloader", "exporter", "taskDefinition"})
</code_context>

<issue_to_address>
**suggestion (typo):** The `downloadOuput` name looks like a typo and may be confusing to future maintainers.

This name appears in several places (including `Configuration.DownloadConfig`) and likely should be `downloadOutput`. If you’re not bound by an existing XSD or backward compatibility, consider renaming it and updating `propOrder` for clarity and to avoid errors. If the typo is fixed by an external schema, you could still introduce a correctly spelled accessor/DTO to prevent the typo from spreading elsewhere in the codebase.

Suggested implementation:

```java
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "config", propOrder = {"proxy", "maxAttempts", "cmdProcessor", "demonTime", "fileNameCutSize", "workingDir", "indexDir", "providerPluginDir", "downloaderPluginDir", "exporterPluginDir", "downloadOutput", "downloader", "exporter", "taskDefinition"})
@XmlRootElement(name = "config")
public class Config {

```

To fully implement the suggestion and avoid propagating the typo while staying compatible with any existing XML schema:
1. In this class, rename the field currently named `downloadOuput` (if present later in the file) to `downloadOutput` and annotate it as:
   - `@XmlElement(name = "downloadOuput")` on the `downloadOutput` field so that:
     - Java code uses the correctly spelled name `downloadOutput`.
     - The XML element name remains `downloadOuput` to keep backward compatibility with existing XSD/XML.
2. Update the corresponding getter/setter:
   - Rename `getDownloadOuput` -> `getDownloadOutput`.
   - Rename `setDownloadOuput` -> `setDownloadOutput`.
   - Ensure any `@XmlElement` annotation on the getter (if present instead of on the field) also uses `name = "downloadOuput"`.
3. Search in the codebase (including `Configuration.DownloadConfig` and any related DTOs) for:
   - Field names, methods, or references to `downloadOuput`.
   - Rename them to `downloadOutput`, and where XML binding is involved, keep the `@XmlElement(name = "downloadOuput")` (or equivalent mapping) so that the XML contract is not broken.
4. If there are any JAXB/XSD-generated classes where you cannot rename the field (because they are regenerated from XSD), consider:
   - Leaving the generated class as-is.
   - Introducing a separate DTO or wrapper that exposes `downloadOutput` and maps internally to the generated `downloadOuput` field, to avoid spreading the typo through the rest of the codebase.
</issue_to_address>

### Comment 2
<location> `application/core/src/com/dabi/habitv/config/entities/Config.java:20-29` </location>
<code_context>
+    protected Integer demonTime;
</code_context>

<issue_to_address>
**suggestion (typo):** The `demonTime` naming (and related `demonCheckTime`) is likely meant to be `daemon` and may cause confusion.

If you can change the schema, please rename these to `daemonTime` / `daemonCheckTime` (including the XML element names) for clarity. If the XML contract is fixed, consider keeping the XML names as-is but mapping them to correctly spelled domain-level fields or accessors so the typo doesn’t propagate through the codebase.

Suggested implementation:

```java
@XmlType(name = "config", propOrder = {"proxy", "maxAttempts", "cmdProcessor", "daemonTime", "fileNameCutSize", "workingDir", "indexDir", "providerPluginDir", "downloaderPluginDir", "exporterPluginDir", "downloadOuput", "downloader", "exporter", "taskDefinition"})

```

```java
    protected String cmdProcessor;
    @XmlElement(name = "demonTime")
    protected Integer daemonTime;
    protected Integer fileNameCutSize;

```

To fully implement the suggestion and avoid propagating the typo:
1. In this class, rename any getter/setter or other methods using `demonTime` (e.g. `getDemonTime()`, `setDemonTime(...)`) to `getDaemonTime()` / `setDaemonTime(...)`, and update their bodies to use the `daemonTime` field.
2. Update all usages of `demonTime` in the codebase (other classes, configs, etc.) to `daemonTime`, except where interacting directly with XML where the element name must remain `demonTime` for backward compatibility.
3. Apply the same pattern for any related `demonCheckTime` properties: rename the field and accessors to `daemonCheckTime` while keeping `@XmlElement(name = "demonCheckTime")` if the XML contract cannot change.
</issue_to_address>

Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

Comment on lines +13 to +22
@XmlType(name = "config", propOrder = {"proxy", "maxAttempts", "cmdProcessor", "demonTime", "fileNameCutSize", "workingDir", "indexDir", "providerPluginDir", "downloaderPluginDir", "exporterPluginDir", "downloadOuput", "downloader", "exporter", "taskDefinition"})
@XmlRootElement(name = "config")
public class Config {

protected List<Proxy> proxy;
protected Integer maxAttempts;
protected String cmdProcessor;
protected Integer demonTime;
protected Integer fileNameCutSize;
@XmlElement(required = true)
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion (typo): The downloadOuput name looks like a typo and may be confusing to future maintainers.

This name appears in several places (including Configuration.DownloadConfig) and likely should be downloadOutput. If you’re not bound by an existing XSD or backward compatibility, consider renaming it and updating propOrder for clarity and to avoid errors. If the typo is fixed by an external schema, you could still introduce a correctly spelled accessor/DTO to prevent the typo from spreading elsewhere in the codebase.

Suggested implementation:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "config", propOrder = {"proxy", "maxAttempts", "cmdProcessor", "demonTime", "fileNameCutSize", "workingDir", "indexDir", "providerPluginDir", "downloaderPluginDir", "exporterPluginDir", "downloadOutput", "downloader", "exporter", "taskDefinition"})
@XmlRootElement(name = "config")
public class Config {

To fully implement the suggestion and avoid propagating the typo while staying compatible with any existing XML schema:

  1. In this class, rename the field currently named downloadOuput (if present later in the file) to downloadOutput and annotate it as:
    • @XmlElement(name = "downloadOuput") on the downloadOutput field so that:
      • Java code uses the correctly spelled name downloadOutput.
      • The XML element name remains downloadOuput to keep backward compatibility with existing XSD/XML.
  2. Update the corresponding getter/setter:
    • Rename getDownloadOuput -> getDownloadOutput.
    • Rename setDownloadOuput -> setDownloadOutput.
    • Ensure any @XmlElement annotation on the getter (if present instead of on the field) also uses name = "downloadOuput".
  3. Search in the codebase (including Configuration.DownloadConfig and any related DTOs) for:
    • Field names, methods, or references to downloadOuput.
    • Rename them to downloadOutput, and where XML binding is involved, keep the @XmlElement(name = "downloadOuput") (or equivalent mapping) so that the XML contract is not broken.
  4. If there are any JAXB/XSD-generated classes where you cannot rename the field (because they are regenerated from XSD), consider:
    • Leaving the generated class as-is.
    • Introducing a separate DTO or wrapper that exposes downloadOutput and maps internally to the generated downloadOuput field, to avoid spreading the typo through the rest of the codebase.

Comment on lines +20 to +29
protected Integer demonTime;
protected Integer fileNameCutSize;
@XmlElement(required = true)
protected String workingDir;
@XmlElement(required = true)
protected String indexDir;
@XmlElement(required = true)
protected String providerPluginDir;
@XmlElement(required = true)
protected String downloaderPluginDir;
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion (typo): The demonTime naming (and related demonCheckTime) is likely meant to be daemon and may cause confusion.

If you can change the schema, please rename these to daemonTime / daemonCheckTime (including the XML element names) for clarity. If the XML contract is fixed, consider keeping the XML names as-is but mapping them to correctly spelled domain-level fields or accessors so the typo doesn’t propagate through the codebase.

Suggested implementation:

@XmlType(name = "config", propOrder = {"proxy", "maxAttempts", "cmdProcessor", "daemonTime", "fileNameCutSize", "workingDir", "indexDir", "providerPluginDir", "downloaderPluginDir", "exporterPluginDir", "downloadOuput", "downloader", "exporter", "taskDefinition"})

    protected String cmdProcessor;
    @XmlElement(name = "demonTime")
    protected Integer daemonTime;
    protected Integer fileNameCutSize;

To fully implement the suggestion and avoid propagating the typo:

  1. In this class, rename any getter/setter or other methods using demonTime (e.g. getDemonTime(), setDemonTime(...)) to getDaemonTime() / setDaemonTime(...), and update their bodies to use the daemonTime field.
  2. Update all usages of demonTime in the codebase (other classes, configs, etc.) to daemonTime, except where interacting directly with XML where the element name must remain demonTime for backward compatibility.
  3. Apply the same pattern for any related demonCheckTime properties: rename the field and accessors to daemonCheckTime while keeping @XmlElement(name = "demonCheckTime") if the XML contract cannot change.

Copy link

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +155 to +160
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "downloaders")
public static class Downloaders {

@XmlElement(name = "any")
protected List<Object> any;

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Accept downloader entries as wildcard elements

Downloaders is annotated with @XmlElement(name = "any"), but configuration.xsd defines <downloaders> as an <any …> wildcard (configuration.xsd lines 30‑35) to allow arbitrary downloader element names. JAXB will only bind literal <any> tags, so valid configs such as application/core/configuration.xml with <downloaders><http/>…</downloaders> will be rejected when XMLUserConfig.readConfig unmarshals with schema validation. Annotate this list with @XmlAnyElement(lax = true) so arbitrary downloader tags parse correctly.

Useful? React with 👍 / 👎.

Comment on lines +228 to +233
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "taskDefinition")
public static class TaskDefinition {

@XmlElement(name = "any")
protected List<Object> any;

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Task definitions ignore wildcard elements

TaskDefinition maps its entries with @XmlElement(name = "any") even though configuration.xsd declares that section as an <any …> wildcard (lines 64‑68). This restricts JAXB to a literal <any> tag, so real task entries like <taskDefinition><category>5</category>…</taskDefinition> from configuration.xml are treated as unknown and unmarshalling fails when the config is loaded. Use @XmlAnyElement(lax = true) to accept arbitrary task names as intended.

Useful? React with 👍 / 👎.

@Mika3578 Mika3578 closed this Nov 24, 2025
@Mika3578 Mika3578 deleted the codex/implement-missing-getter-methods branch November 24, 2025 23:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant