【问题标题】:How to Compare two Swift-MT message?如何比较两个 Swift-MT 消息?
【发布时间】:2016-08-11 07:06:08
【问题描述】:

我有两个 SWIFT 文件要比较,其中包含不同的 SWIFT 报文。是否有任何库可以比较 SWIFT 消息并显示它们之间的确切差异?

我有两条 SWIFT 消息如下:

{1:ABC}{2:DEF}{3:{108:valid}} 
{4::16R:GENL:20C::CORP//0000000519765434:20C::SEME//525200100000002:16S-} 
{1:ABC}{2:DEF}{3:{108:valid}} 
{4::16R:GENL:20C::CORP//0000000519765434:20C::SEME//528200100000009:16S-}

和

{1:ABC}{2:DEF}{3:{108:valid}} 
{4::16R:GENL:20C::CORP//0000000519765434:20C::SEME//610300100000001:16S-} 
{1:ABC}{2:DEF}{3:{108:valid}} 
{4::16R:GENL:20C::CORP//0000000519765434:20C::SEME//528200100000009:16S-}

如何比较这两条 SWIFT 报文?

已编辑: 我使用以下过程来比较记录,但一直在比较值:

IConversionService ics = new ConversionService();
        SwiftMessage sm1 = ics.getMessageFromFIN(source);
        SwiftMessage sm2 = ics.getMessageFromFIN(target);

        SwiftBlock4 source_block4 = sm1.getBlock4();
        SwiftBlock4 target_block4 = sm2.getBlock4();

        List<SwiftTagListBlock> source_tagListBlock = source_block4.getSubBlocks("16R", "16S");
        List<SwiftTagListBlock> target_tagListBlock = target_block4.getSubBlocks("16R", "16S");

        //SetMultimap<String, String> source_multimap1 = HashMultimap.create();

        ListMultimap<String, String> source_multimap = ArrayListMultimap.create();
        ListMultimap<String, String> target_multimap = ArrayListMultimap.create();

        for (SwiftTagListBlock s : source_tagListBlock) {
            Iterator<Tag> sourcetag_iterator = s.tagIterator();

            while (sourcetag_iterator.hasNext()) {
                Tag tag = (Tag) sourcetag_iterator.next();
                source_multimap.put(tag.getName(), tag.getValue());
            }
        }
        for (SwiftTagListBlock t : target_tagListBlock) {
            Iterator<Tag> targettag_iterator = t.tagIterator();

            while (targettag_iterator.hasNext()) {
                Tag tag = (Tag) targettag_iterator.next();
                target_multimap.put(tag.getName(), tag.getValue());
            }
        }

现在多重映射具有键值对单键多值。我想将记录显示为:

if(source_multimap.get(key).equals(target_multimap.get(key))) 然后比较两个 multimap 中的值并打印与 multimap 不同的值。

【问题讨论】:

    标签: swift-mt


    【解决方案1】:

    您可以使用 prowidesoftware 对妻子解析器的依赖,使用它您可以读取 mt 消息的所有块以及每个块中的每个字段。您可以比较所有内容。

    【讨论】:

    • 我使用了 WIFE 提供核心。你能帮我解决多地图场景吗?或者你也可以在这里查看:stackoverflow.com/q/37025495/5599600
    • 直到现在我还没有尝试使用 multimap 但我想从 SwiftMessage 建议你必须通过传递方法名称使用 java 反射概念创建对象特定字段。但首先检查该块应该不能为空。
    猜你喜欢
    • 2010-10-08
    • 2018-12-19
    • 2018-06-13
    • 2017-12-09
    • 2014-03-14
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多