Incorrect SIF version chosen as "render version" for IDataObjectOutputStream/OnRequest in MessageDispatcher

Bug #1008960 reported by Mark Reichert
6
This bug affects 1 person
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.Library.Impl.MessageDispatcher in src\core\OpenADK\Impl\MessageDispatcher.cs):

// 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.Parse(versions[0].Value);

Related branches

Mark Reichert (siffalo)
summary: - SIF version chosen as "render version" for
+ Incorrect SIF version chosen as "render version" for
IDataObjectOutputStream/OnRequest in MessageDispatcher
Revision history for this message
Mark Reichert (siffalo) wrote :

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)
{
 candidateVersions[i++] = SifVersion.Parse(version.Value);
}

renderAsVer = Adk.GetLatestSupportedVersion(candidateVersions);

Changed in open-adk-java:
status: New → Fix Released
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.