Typed WQL results: map CIM values to Java objects instead of strings
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 5/5
- Estimated time
- Over a week
- Newbie friendliness
- 30/100
Research direction
Start by tracing WqlRow.get(String), the WQL query execution path, and the legacy WinRMWqlExecutor.getRows() and WindowsRemoteExecutor.executeWql APIs. Review how WS-Management exposes CIM class and value information before deciding the typed opt-in shape. Done means a defined mapping for scalar, array, datetime, embedded, and NULL values while preserving the existing string API; the issue does not name tests or implementation files.
Written by the indexing model from the issue text.
Description
Follow-up to #189 (PR #193), where WMI array properties were fixed to come back as a single string joined with | (configurable with WinRMClient.Builder.arraySeparator(String)).
Problem
Every WQL value is exposed as a String, whatever its CIM type. Consumers parse numbers, booleans, dates and now |-joined arrays themselves:
WqlRow.get(String)is declaredObjectbut always returns aString.- An array property is a joined string: a single-element array is indistinguishable from a scalar, and an element that contains the separator is ambiguous.
NULLis an empty string, indistinguishable from an empty string value.- CIM datetimes arrive in the WS-Management form (
<cim:Datetime>2024-05-01T12:34:56.789Z</cim:Datetime>forCIM_DATETIMEvalues, or an interval), which nobody wants to parse by hand.
Proposal
A typed result variant where the row values are native Java objects, alongside the existing string-based API (which stays the default, and the only one for the legacy WinRMWqlExecutor.getRows() / List<List<String>>).
Suggested shape, to be refined:
- Opt in per query, e.g.
client.wql(query).typed().execute(), or aWqlRow.typed(String)/WqlRow.list(String)accessor family; the legacyList<Map<String, Object>>ofWindowsRemoteExecutor.executeWqlcould also carry typed values under an opt-in flag, soWinRMWqlExecutorkeeps its strings. - Mapping from the type information WS-Management gives us. The instance XML carries no
xsi:type; the CIM type must come from the class schema (a WSManGetof the class definition,winrm get wmi/...?__CLASS, or thep:XML schema), or from the value form (<cim:Datetime>wrapper,xsi:nil, repeated elements).
Suggested mapping:
| CIM type | Java |
|---|---|
string, char16 |
String |
boolean |
Boolean |
sint8/sint16/sint32/sint64, uint8/uint16/uint32 |
Integer / Long (uint64 → BigInteger or Long) |
real32/real64 |
Float / Double |
datetime |
java.time.Instant / OffsetDateTime for timestamps, Duration for intervals |
reference |
String (the object path) |
| embedded object | nested WqlRow |
| array of any of the above | List<T> |
NULL (xsi:nil="true") |
null |
Open questions
- Where the CIM type information comes from without an extra round trip per query (cache the class schema per client and class?).
- Whether the WS-Management datetime encoding is consistent across Windows versions (2008 R2 through 2022 are available as test hosts).
- Whether the CLI should emit JSON arrays/numbers/booleans/null when typed values are available (today it emits strings only).
Not in scope
The string API stays as it is: the | join and the empty-string NULL are documented behavior since 2.3.00.
- Dominant language
- Java
- Stars
- 13
- Forks
- 4
- Avg merge
- 7h 38m
- Merged PRs (30d)
- 14
Getting set up
This project ships no dev container, Dockerfile or contributing guide, so setting up is up to you: start from its README, and see our first-contribution guide for the general steps.
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from MetricsHub/winrm-java
-
bug documentation
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
MetricsHub/winrm-java#202 ·
Maintainers usually reply within 1 day
-
enhancement
Difficulty 3/5 1-2 days Newbie friendliness 58/100
MetricsHub/winrm-java#201 ·
Maintainers usually reply within 1 day
-
bug
Difficulty 3/5 1-2 days Newbie friendliness 78/100
MetricsHub/winrm-java#199 ·
Maintainers usually reply within 1 day
-
Streaming command fails with a spurious timeout when reconnecting after an idle pausePossibly taken @NassimBtk claimed this 1 day ago. Open
MetricsHub/winrm-java#198 · 1 assignee ·
Maintainers usually reply within 1 day
-
Long-lived `WinRMClient` keeps failing with WSManFault 2150859174 after a terminate Signal failsPossibly taken @NassimBtk claimed this today. Open
Difficulty 3/5 1-2 days Newbie friendliness 25/100
MetricsHub/winrm-java#196 · 4 comments · 1 assignee ·
Maintainers usually reply within 1 day
All issues in MetricsHub/winrm-java
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 62/100
PCL-Community/PCL-CE#3658 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
Maintainers usually reply within 1 day
-
Team/Identity Server Core Type/Improvement U2
Difficulty 2/5 1-3 hours Newbie friendliness 62/100
wso2/product-is#28553 ·
Maintainers usually reply within 1 day
-
frontend
Difficulty 1/5 Under an hour Newbie friendliness 72/100
Paul-Austin-Oswego-CSC480-HCI521/gift-app#116 ·
Maintainers usually reply within 2 days
-
dependencies java
Difficulty 1/5 Under an hour Newbie friendliness 62/100
micrometer-metrics/tracing#1588 ·
Maintainers usually reply within 1 day