Incorrect SIF version chosen as "render version" for IDataObjectOutputStream/OnRequest in MessageDispatcher
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
Open ADK for C#/.NET |
New
|
Undecided
|
Unassigned | ||
Open ADK for Java |
Fix Released
|
Undecided
|
Unassigned |
Bug Description
Since a client's SIF agent landed in my lap and their paid maintenance/support no longer entitles them to maintenance/bug fixes, the client is headed down the OpenADK path--here's the issue from SIFWorks:
This issue spans SIFWorks ADK 2.4.0.22, the current OpenADK branch, all the way back through 2.0.2.7 (which is what our agent currently uses in release, but the other two versions were linked to today in hopes that the error had been corrected at some point), and presumably beyond.
Requesting agent = registered as 2.0r1
Responding agent (our agent) = 2.2 in code, registered as 2.0r1
If the requesting agent sends a 2.0r1 request (StudentPersonal, but this is mostly irrelevant) with SIF versions 1.5r1, 2.0r1 and 2.* specified, then SIFWorks.ADK chooses the first version specified (verified in OpenADK code) as the "render SIF version," rather than using the highest version supported, per the SIF Implementation Specification. This leads to the ADK attempting to generate a 1.5r1 message, which it cannot do in the case of our agent's StudentPersonal due to not having a surrogate for the address structure (later versions throw an exception--earlier versions generate completely invalid XML that can't be parsed). (This inability to send StudentPersonal as 1.5r1 will be investigated separately.)
This is currently breaking long-running 2.0r1 deployments due to a new 2.0r1 agent coming online and sending 1.5r1 in its requests. The temporary fix is the vendor is being contacted in attempts to have the 1.5r1 temporarily removed.
The offending code is listed as a to-do in dispatchRequest (OpenADK.
// SIF_Version specifies the version of SIF that will be used to render
// the SIF_Responses
// TODO: Add support for multiple SIF_Request versions
renderAsVer = SifVersion.
Related branches
- Jason Lauman: Pending requested
-
Diff: 257 lines (+95/-10)3 files modifiedopen-adk-csharp/src/au/OpenADK-AU-SDO.csproj (+80/-6)
open-adk-csharp/src/core/OpenADK/Impl/MessageDispatcher.cs (+12/-3)
open-adk-csharp/src/us/OpenADK-US-SDO.csproj (+3/-1)
- Jason Lauman: Pending requested
-
Diff: 25 lines (+11/-2)1 file modifiedopen-adk-java/adk-library/src/main/java/openadk/library/impl/MessageDispatcher.java (+11/-2)
summary: |
- SIF version chosen as "render version" for + Incorrect SIF version chosen as "render version" for IDataObjectOutputStream/OnRequest in MessageDispatcher |
Changed in open-adk-java: | |
status: | New → Fix Released |
As I don't have permission to make changes, consider a change to below as a starting point, working within the wildcard limitations of OpenADK and lacking a readily accessible list of versions supported in the zone (to avoid choosing a version unsupported by the zone).
// SIF_Version specifies the version of SIF that will be used to render
// the SIF_Responses
SifVersion[] candidateVersions = new SifVersion[ versions. Length] ;
int i = 0;
foreach (SIF_Version version in versions) ons[i++ ] = SifVersion. Parse(version. Value);
{
candidateVersi
}
renderAsVer = Adk.GetLatestSu pportedVersion( candidateVersio ns);