Thanks for the reply Mike.
Yes in this case my goal is to have generic-ish code that can handle multiple 
v2 versions. So I’m “up-converting” to v26 using the 
CanonicalModelClassFactory. So far this works well except in cases where items 
have been withdrawn in v26 which fail validation.

I tried to play around with getting the RuleBindings from the context to remove 
this particular rule, but was unable to find this one, and am not familiar 
enough with the underlying implementation to know where to find it.
i.e., I tried finding this rule with these calls but no luck:
List<RuleBinding<PrimitiveTypeRule>> rules = 
((ValidationContextImpl)context.getValidationContext()).getPrimitiveRuleBindings();
List<RuleBinding<MessageRule>> rules2 = 
((ValidationContextImpl)context.getValidationContext()).getMessageRuleBindings();
List<RuleBinding<EncodingRule>> rules3 = 
((ValidationContextImpl)context.getValidationContext()).getEncodingRuleBindings();


But perhaps what I could do is use the DefaultHapiContext to parse the message 
to achieve version-specific validation, then parse it again with a context 
using CanonicalModelClassFactory with validation disabled to get the data 
“de-serialized” and work with. It will obviously not be efficient, but at least 
it’s a work-around.

-Craig

From: Mike Mills
Sent: Tuesday, July 18, 2017 9:21 PM
To: McClendon, Craig <craig.mcclen...@accenture.com>
Subject: [External] Re: [HAPI-devel] backward compatible message validation 
with CanonicalModelClassFactory

Craig,

If you are not using custom message structures then you can simply use the 
DefaultHapiContext and PipeParser to parse a message.

The default PipeParser will use MSH-12 to locate the correct message class.

You would need to have the HapiStructures 2.3 and 2.6 on your classpath, but 
this code should parse your message and return a class of the appropriate 
structure.

The only issues is if you want to have code that processes both 2.3 and 2.6 
messages in the same way.

In those cases you need to create your own custom structure that can deal with 
your case.

If you stick to HapiStructures then this code should process your message:

Message msg = new DefaultHapiContext().getPipeParser().parse( .... your 2.3 
message string here ... );

The underlying java type of the msg variable will change depending on the value 
of MSH-12.

-Mike


________________________________

This message is for the designated recipient only and may contain privileged, 
proprietary, or otherwise confidential information. If you have received it in 
error, please notify the sender immediately and delete the original. Any other 
use of the e-mail by you is prohibited. Where allowed by local law, electronic 
communications with Accenture and its affiliates, including e-mail and instant 
messaging (including content), may be scanned by our systems for the purposes 
of information security and assessment of internal compliance with Accenture 
policy.
______________________________________________________________________________________

www.accenture.com
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Hl7api-devel mailing list
Hl7api-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/hl7api-devel

Reply via email to