Full Changelog 1.0.2
Released 2026-07-25 · v7.1.1 sprint · 63 issues · 2 features · 50 fixes
The complete record: every commit in the release, grouped by type, including work that never reaches a customer-facing note. The external changelog is the readable summary of the same release.
Jira References
-
DEV-1165 - Java Northbound API > Active connection determination > Change logic
-
DEV-1931 - Java Northbound API > api/Task/Pending> No pending tasks > Incorrect ErrorCode
-
DEV-2071 - Java Northbound API > REST / SOAP > Oracle > Any failed SPV task on device > POST /api/Task/Failed > Internal server error is returned
-
DEV-2075 - Java Northbound API > REST / SOAP > Any failed SPV task on device > POST /api/Task/Failed > Incorrect "TaskName" value
-
DEV-2143 - Java Northbound API > STUN enabled and configured > POST /api/Device/ActiveConnection > Incorrect active connection is returned for "UDPConnectionRequestAddress"
-
DEV-2145 - Java Northbound API > REST/SOAP > Group update methods > Descriptions are absent
-
DEV-2148 - Java Northbound API > STUN disabled > Local IP "ConnectionRequestURL" > Global connection exists > POST /api/Device/ActiveConnection > Incorrect active connection is returned
-
DEV-2218 - Java Northbound API > api/Device/Info > Error: response status is 500
-
DEV-2252 - Java Northbound API > REST/SOAP > /iot-webservice/iotw/GroupUpdate/condition/items > Request is missing
-
DEV-2257 - Java Northbound API > /api/Device/info > response missing hardware information
-
DEV-2276 - Java Northbound API > REST / SOAP > Any failed SPV task on device > POST /api/Task/Failed > "ErrorCode" value is missing from Task object
-
DEV-2283 - Java Northbound API > Create condition > Angular project > Management portal > Group Update > Add/Edit > Condition is missing
-
DEV-2290 - Java Northbound API > Oracle > Run > Failed to start
-
DEV-2292 - Java Northbound API > SOAP > Open Swagger > Absent Group Update methods
-
DEV-2298 - Java Northbound API > SOAP > Docs Portal > Absent Group Update methods
-
DEV-2370 - Java Northbound API > REST API > POST "api/Device/Info" >device has hardware version parameter > HardwareVersion=null "returned
-
DEV-2410 - Java Northbound API > REST > PUT /api/Parameter > No "EndSession" field > Incorrect "Message" returned
-
DEV-2413 - Java Northbound API > REST > PUT /api/File/Download > No "Delay" field > Incorrect "Message" returned
-
DEV-2415 - Java Northbound API > SOAP > FTAddObject > "Value" is absent > Server returned HTTP response code: 500
-
DEV-2416 - Java Northbound API > SOAP > FTAddObject > "Name" is absent > Incorrect response code 203 must be 204
-
DEV-2418 - Java Northbound API > SOAP > FTSetProvisionDeviceParameters > Incorrect tag name in response "FTSetDeviceParametersResult"
-
DEV-2419 - Java Northbound API > REST > POST /api/UserInfo > Field name and structure differences
-
DEV-2420 - Java Northbound API > SOAP > FTRPCInvoke > Exception in response
-
DEV-2423 - Java Northbound API > SOAP > FTGetUserDetailsFromDevice > Incorrect “devicesn” > Exception in response
-
DEV-2425 - Java Northbound API > SOAP > FTSetDeviceParameters > Parameter name is empty / absent > Server returned HTTP response code: 500
-
DEV-2426 - Java Northbound API > SOAP > FTSetDeviceParameters > More than one parameter > One parameter name is empty / absent > Server returned HTTP response code: 500
-
DEV-2429 - Java Northbound REST API > POST /api/Device/Value > Unification request
-
DEV-2431 - Java Northbound REST API > TR-069 > PUT /api/Rpc > Field names difference
-
DEV-2432 - Java Northbound REST API > POST /api/Device/History > Response array is empty
-
DEV-2433 - Java Northbound REST API > POST /api/Device/Activity > Response array is empty
-
DEV-2434 - Java Northbound REST API > PUT /api/Device/Backup > Task rejected
-
DEV-2435 - Java Northbound REST API > POST /api/Device/BackupStatus > HTTP code 500 returned
-
DEV-2436 - Northbound REST API > POST /api/Device/FindDeviceAdvanced > Lowercase for "key" / "value" > HTTP code 500 returned
-
DEV-2439 - Java Northbound API > Swagger > SOAP > "FTGroupUpdateActivate" > ID not exist > No error occurred
-
DEV-2440 - Java Northbound REST API > PUT /api/Parameter/Provision > Incorrect structure > HTTP code 500 returned
-
DEV-2441 - Java Northbound REST API > POST /api/Device/Ip > Incorrect IP > Error code 204
-
DEV-2444 - Java Northbound REST API > POST /api/Transaction > Incorrect response message
-
DEV-2447 - Java Northbound REST API > PUT /api/Rpc > "Reprovision": 2 > HTTP code 500 returned
-
DEV-2452 - Java Northbound REST API > PUT /api/Rpc > Incorrect "Content" structure > ErrorCode 100 returned
-
DEV-2454 - Java Northbound REST API > POST /api/Transaction/Task/Pending > No "Sn" > Incorrect message returned
-
DEV-2458 - Java Northbound REST API > PUT /api/Parameter > empty or absent "Name" > Incorrect message returned
-
DEV-2462 - Java Northbound API > Swagger > SOAP > "FTViewGroupUpdateDetails" > Valid ID > Error occurred
-
DEV-2467 - Java Northbound REST API > POST /api/Task/Pending > Non-existent "TransactionId" > Incorrect error code and message returned
-
DEV-2476 - Java Northbound REST API > POST /api/Diagnostic > Upload diagnostic > The response is incomplete
-
DEV-2478 - Java Northbound REST API > POST /api/Parameter > non-existent "Sn" > Incorrect error code returned
-
DEV-2480 - Java Northbound REST API > POST /api/Parameter > Incorrect "ModelName" and / or "Oui" > Incorrect error code returned
-
DEV-2484 - Java Northbound REST API > POST /api/Task/Pending/Transaction > Incorrect "TransactionId" > Error code 100 returned
-
DEV-2488 - Java Northbound REST API > POST /api/Task/Failed > "StartTime" = date only > HTTP code 500 returned
-
DEV-2491 - Java Northbound REST API > POST /api/Transaction > Empty "TransactionId" field > HTTP code 500 returned
-
DEV-2499 - Java Northbound REST API > POST /api/Parameter > Offline device > "Source" = 0, "IgnoreDeviceIsOffline" = true > Incorrect message returned
-
DEV-2501 - Java Northbound REST API > POST /api/Diagnostic > "TransactionId" = string of letters > HTTP code 500 returned
-
DEV-2502 - Java Northbound REST API > PUT /api/Device/Backup > "DeletePrevious" = true > HTTP code 500 returned
-
DEV-2507 - Java Northbound REST API > POST /api/Device/FindDeviceAdvanced > Empty parameter value > Redundant message returned
-
DEV-2509 - Java Northbound REST API > POST /api/Device/FindDeviceAdvanced > non-existing domain > Irrelevant search result returned
-
DEV-2524 - Java Northbound API > SOAP > "FTCreateGroupUpdate" > "Source type"="1" > An error occurred
-
DEV-2544 - Java Northbound API > /api/UserInfo > Error: response status 500 > NullPointerException "username is null" when updating device user info
-
DEV-2581 - Java Northbound API > SOAP / REST > "FTGroupUpdateActivate" > ID not exist > Execute > "id" is written in lowercase
-
DEV-2618 - Java Northbound REST API > POST /api/Task/Pending/Transaction > "TransactionId" = non-pending task > Error code 100 returned
-
DEV-2619 - Java Northbound REST API > POST /api/Device/Activity > Incorrect "ModelName" and / or "Oui" > Irrelevant response
-
DEV-2620 - Java Northbound REST API > PUT api/Userinfo > "latitude" / "longitude" > Values are not set
-
DEV-2622 - Java Northbound REST API > POST /api/Device/Activity > "AmountOfDays" = string > HTTP code 500 returned
-
DEV-2623 - Java Northbound REST API > POST /api/Device/History > Incorrect "EventTypeValueChange" > HTTP code 500 returned
-
DEV-669 - Java Northbound API > REST > /api/Device/Info > Excessive "HardwareVersion" parameter in response
Bug Fixes
-
DEV-1931 - Java Northbound API > api/Task/Pending> No pending tasks > Incorrect ErrorCode
-
Drop local CLOB workaround, use api-orm 0.0.67
-
Restore dynamic TaskName for failed/rejected tasks
Revert hardcoded "SetParameterValues-Device" introduced in 0240219; read CPE_FAILED_TASK.TASK_NAME / CPE_REJECTED_TASK.TASK_NAME from DB and clean it via clearParamName(), matching the pending tasks flow.
Also covers SOAP FTGetCPEFailedTasks / FTGetCPERejectedTasks since they delegate to the same TaskService.
-
CreateGroupUpdateCondition NPE и Hibernate 7.x совместимость
GroupUpdateApiService.createCondition: добавлена нормализация columnKey "lastConnection" → "updated" перед сохранением view и построением Specification. UI-alias "lastConnection" не имел маппинга в FieldPath, PARAMETER_NAMES_SEARCH или CUSTOM_DEVICE_PARAMS, что приводило к NPE в DeviceViewUtil.getPredicateFromCondition. Логика повторяет changeLastConnectionToUpdatedIfNeeded из oneiot_web_backend.
QueryUtil.translateToSqlAndCollectParams: совместимость с Hibernate 7.x. - session.createQuery(criteria) → session.createSelectionQuery(criteria): первый возвращает SqmQueryImpl и приводит к ClassCastException. - Query.unwrap(SqmSelectionQueryImpl.class) → direct cast: unwrap к internal-классам в 7.x бросает "Unrecognized unwrap type". - (SqlAstCreationContext) sfi → sfi.getSqlTranslationEngine(): SessionFactoryImpl больше не реализует SqlAstCreationContext, его наследник SqlTranslationEngine получают через getSqlTranslationEngine().
-
DEV-2218 - Java Northbound API > api/Device/Info > Error: response status is 500
-
Default per-task ErrorCode to SUCCESS for failed/pending/rejected tasks
The task items returned by the Failed/Pending/Rejected task queries were serialized with a null ErrorCode (and Message), whereas the original FTACSWS returns the success default (100) because TaskApi inherits an errorCode pre-initialized to Result.Success. The source query exposes no per-parameter error code, so success is the only faithful value.
Centralize TaskResponse construction in a single helper that defaults ErrorCode to 100 and Message to "", covering the REST endpoints, the FTGetCPE*Tasks SOAP methods (TaskWSDL) and USP, which all delegate here.
-
Route iotw datasource to dedicated iotw schema
The iotw datasource shared the same connection target as the acs datasource (MYSQL_JDBC_URL / MYSQL_SCHEMA, defaulting to the ftacs schema). Group Update condition views are persisted via the @DataSourceSchema("iotw") repository with no hibernate.default_schema, so iotw_view was written into ftacs while the Management Portal reads iotw_view from the dedicated iotw schema. As a result, conditions created through the Northbound API never appeared in the portal.
Point the iotw datasource at the iotw schema, mirroring ui-backend: - MySQL: MYSQL_SCHEMA_IOTW (default iotw), optional MYSQL_URL_IOTW override - Oracle: connect as ORACLE_USER_IOTW (default iotw) - local: jdbc url targets the iotw schema
+ The acs datasource keeps targeting the ftacs schema.
-
DEV-2290 - Java Northbound API > Oracle > Run > Failed to start
-
DEV-2370 - Java Northbound API > REST API > POST "api/Device/Info" >device has hardware version parameter > HardwareVersion=null "returned
-
Persist group update views as Management Portal client type
The Group Update flow hardcoded ClientType.sc (Support Portal) when creating view/condition entries, so they were written under the wrong client type and stayed invisible in the Management Portal. Switch the persistence, uniqueness lookup and user resolution to ClientType.mc.
-
DEV-2410 - Java Northbound API > REST > PUT /api/Parameter > No "EndSession" field > Incorrect "Message" returned
-
DEV-2413 - Java Northbound API > REST > PUT /api/File/Download > No "Delay" field > Incorrect "Message" returned
-
DEV-2415 - Java Northbound API > SOAP > FTAddObject > "Value" is absent > Server returned HTTP response code: 500
-
DEV-2418 - Java Northbound API > SOAP > FTSetProvisionDeviceParameters > Incorrect tag name in response "FTSetDeviceParametersResult"
-
DEV-2419 - Java Northbound API > REST > POST /api/UserInfo > Field name and structure differences
-
DEV-2420 - Java Northbound API > SOAP > FTRPCInvoke > Exception in response
-
DEV-2423 - Java Northbound API > SOAP > FTGetUserDetailsFromDevice > Incorrect “devicesn” > Exception in response
-
DEV-2425 - Java Northbound API > SOAP > FTSetDeviceParameters > Parameter name is empty / absent > Server returned HTTP response code: 500
-
DEV-2429 - Java Northbound REST API > POST /api/Device/Value > Unification request
-
DEV-2431 - Java Northbound REST API > TR-069 > PUT /api/Rpc > Field names difference
-
DEV-2452 - Java Northbound REST API > PUT /api/Rpc > Incorrect "Content" structure > ErrorCode 100 returned
-
DEV-2454 - Java Northbound REST API > POST /api/Transaction/Task/Pending > No "Sn" > Incorrect message returned
-
DEV-2462 - Java Northbound API > Swagger > SOAP > "FTViewGroupUpdateDetails" > Valid ID > Error occurred
-
DEV-2432 - Java Northbound REST API > POST /api/Device/History > Response array is empty
-
DEV-2433 - Java Northbound REST API > POST /api/Device/Activity > Response array is empty
-
DEV-2434 - Java Northbound REST API > PUT /api/Device/Backup > Task rejected
-
DEV-2439 - Java Northbound API > Swagger > SOAP > "FTGroupUpdateActivate" > ID not exist > No error occurred
-
DEV-2435 - Java Northbound REST API > POST /api/Device/BackupStatus > HTTP code 500 returned
-
DEV-2436 - Northbound REST API > POST /api/Device/FindDeviceAdvanced > Lowercase for "key" / "value" > HTTP code 500 returned
-
DEV-2441 - Java Northbound REST API > POST /api/Device/Ip > Incorrect IP > Error code 204
-
DEV-2444 - Java Northbound REST API > POST /api/Transaction > Incorrect response message
-
DEV-2467 - Java Northbound REST API > POST /api/Task/Pending > Non-existent "TransactionId" > Incorrect error code and message returned
-
Align ISP subdomain username parsing with .NET (strip '@' before lookup)
UpdateGroupUtil.getDomainId parsed the ISP-subdomain login as creator.substring(0, ++i), so the '@' separator was included in the username (e.g. "john@acme" → "john@" instead of "john"). Compute the username as substring(0, atPos) before advancing past '@', matching the .NET reference (Session.cs:277-278). The domain part and the trailing boolean argument are unchanged.
-
DEV-2476 - Java Northbound REST API > POST /api/Diagnostic > Upload diagnostic > The response is incomplete
-
DEV-2478 - Java Northbound REST API > POST /api/Parameter > non-existent "Sn" > Incorrect error code returned
-
DEV-2488 - Java Northbound REST API > POST /api/Task/Failed > "StartTime" = date only > HTTP code 500 returned
-
DEV-2447 - Java Northbound REST API > PUT /api/Rpc > "Reprovision": 2 > HTTP code 500 returned
-
DEV-2491 - Java Northbound REST API > POST /api/Transaction > Empty "TransactionId" field > HTTP code 500 returned
-
DEV-2499 - Java Northbound REST API > POST /api/Parameter > Offline device > "Source" = 0, "IgnoreDeviceIsOffline" = true > Incorrect message returned
-
DEV-2501 - Java Northbound REST API > POST /api/Diagnostic > "TransactionId" = string of letters > HTTP code 500 returned
-
DEV-2502 - Java Northbound REST API > PUT /api/Device/Backup > "DeletePrevious" = true > HTTP code 500 returned
-
DEV-2507 - Java Northbound REST API > POST /api/Device/FindDeviceAdvanced > Empty parameter value > Redundant message returned
-
DEV-2509 - Java Northbound REST API > POST /api/Device/FindDeviceAdvanced > non-existing domain > Irrelevant search result returned
-
DEV-2484 - Java Northbound REST API > POST /api/Task/Pending/Transaction > Incorrect "TransactionId" > Error code 100 returned
-
DEV-2524 - Java Northbound API > SOAP > "FTCreateGroupUpdate" > "Source type"="1" > An error occurred
-
FRD-10258 align Group Update periods and condition validation
Align CreateGroupUpdate/CreateGroupUpdateCondition with FRD-10258 and the oneiot reference. Periods live only under Activation: the dead top-level UpdateGroup.Period input field is removed and details responses now return periods under Activation, mirroring the create shape per FRD 7.7. Condition filters gain per-family operator validation (fail-closed 203 instead of the silent coercion of unknown operators to Equal), correct date operator mapping (Day/Before/After to OnDay/PriorTo/LaterThan; Between composed as an inclusive LaterThan+PriorTo pair since shared-dto has no Between), range separator hardening (en-dash or hyphen, malformed 203), Domain All handling (empty value required, maps to the all-domains hierarchy branch instead of NumberFormat crash), an explicit validator call on the SOAP createCondition path, and a size cap on condition arrays. Random placement and the flat TasksList shape stay canonical per the reference; both FRD deviations are documented on the Group update pages.
refs(FRD-10258)
-
DEV-2620 - Java Northbound REST API > PUT api/Userinfo > "latitude" / "longitude" > Values are not set
-
DEV-2622 - Java Northbound REST API > POST /api/Device/Activity > "AmountOfDays" = string > HTTP code 500 returned
-
DEV-2623 - Java Northbound REST API > POST /api/Device/History > Incorrect "EventTypeValueChange" > HTTP code 500 returned
-
DEV-2618 - Java Northbound REST API > POST /api/Task/Pending/Transaction > "TransactionId" = non-pending task > Error code 100 returned
Documentation
-
Update antora version to 1.0.1 (dev)
-
DEV-2145 - Java Northbound API > REST/SOAP > Group update methods > Descriptions are absent
-
Expand changelog index with release format guide
-
DEV-2252 - Java Northbound API > REST/SOAP > /iot-webservice/iotw/GroupUpdate/condition/items > Request is missing
-
Update antora version to 1.0.1
-
Add changelog for release 1.0.1
-
Update antora version to 1.0.2 (dev)
-
Document iotw datasource environment variables
The Group Update API relies on a second 'iotw' datasource (OneIoT web back-end schema), but the docs only listed non-existent IOTW_DATABASE_* variables that the application never reads.
Document the real variables driving the iotw datasource: - MySQL: MYSQL_SCHEMA_IOTW, MYSQL_URL_IOTW (shares host/port/credentials with the ACS datasource) - Oracle: ORACLE_USER_IOTW/ORACLE_PASSWORD_IOTW plus the now-split ORACLE_USER_FTACS/ORACLE_PASSWORD_FTACS accounts
+ Update the .env examples and variable tables in installation.adoc and rewrite the IOTW section in configuration.adoc, replacing the bogus IOTW_DATABASE_* names with a profile-driven explanation.
-
DEV-2298 - Java Northbound API > SOAP > Docs Portal > Absent Group Update methods
-
DEV-2416 - Java Northbound API > SOAP > FTAddObject > "Name" is absent > Incorrect response code 203 must be 204
-
DEV-2458 - Java Northbound REST API > PUT /api/Parameter > empty or absent "Name" > Incorrect message returned
-
Update antora version to 1.0.2
-
Update antora version to 1.0.3 (dev)
-
Add changelog for release 1.0.2
Chores
-
DEV-2143 - Java Northbound API > STUN enabled and configured > POST /api/Device/ActiveConnection > Incorrect active connection is returned for "UDPConnectionRequestAddress"
-
DEV-2148 - Java Northbound API > STUN disabled > Local IP "ConnectionRequestURL" > Global connection exists > POST /api/Device/ActiveConnection > Incorrect active connection is returned
-
Bump version to 1.0.2
Refactoring
-
Move
deviceTemplatesPathfromFTApiConfigtoFtAcsApiClientconstructor-
Removed
deviceTemplatesPathfromFTApiConfigand injected it directly intoFtAcsApiClientvia constructor. -
Updated tests and usage references accordingly.
-
Performance
-
Build jar in job and pack via Dockerfile.simple
Gradle was building inside docker build, so dependencies were re-fetched on every run: type=gha caches only Docker layers, not the BuildKit cache mount holding the Gradle cache, which did not survive builder recreation on the self-hosted runner. Combined with a double Gradle run and a 210MB build context (build/ and .gradle/ not ignored), this hit the 20-minute timeout.
Build the boot jar in a job step with actions/setup-java and gradle/actions/setup-gradle for a reliable native ~/.gradle cache, then let Dockerfile.simple only COPY the jar. Drop the now-unused build secrets and pass GitHub Packages credentials via env. Trim the build context by ignoring build/ (keeping the boot jar) and .gradle/.
Also pass workflow inputs through env in the tag-prep step to avoid shell injection.
Docker Images
northbound-api
- Image
-
hub.friendly-tech.com/api/northbound-api:v1.0.2-b0.0.1 - SHA256
-
sha256:c670f5312f189518308adb4a8f1c126d0732c48b5b7053dc6c83cef03867d26a
Dependencies
-
ACS → FT Configs Service
v1.0.1-b0.0.1 -
FT Configs UI → FT Configs Service
v1.0.1-b0.0.1 -
Northbound API → ACS
v7.1.1-b0.0.1 -
FT Device Network → ACS
v7.1.1-b0.0.1 -
FT Device Network → UI Backend
v7.1.1-b0.0.1 -
UI Portals → UI Backend
v7.1.1-b0.0.1 -
UI AI Agent → UI Backend
v7.1.1-b0.0.1 -
UI AI Agent → FT Device Network
v1.0.2-b0.0.1 -
UI Backend → ACS
v7.1.1-b0.0.1