Как должен выглядеть файл edimap? Smooks не находит ни одного поля

Я использую Smooks 1.5 и пытаюсь сгенерировать XML-файл из EDI-сообщения, которое я пробовал также с помощью стандартного плагина, который генерирует большое количество пространств имен, которые я не смог обработать из-за FreeMaker Template-Engine. Этот пример без FreeMaker-Engine.

У меня есть REMADV-сообщение (формат D.01B), которое выглядит так:

UNA:+.?'
UNB+UNOC:3+4304449000000:14:7611937000723+7610603000005:14+141013:0901+949317133000++REMADV+++EANCOM+1'
UNH+1+REMADV:D:01B:UN:EAN005'
BGM+481+128275+9'
DTM+137:20141011000000:204'
DTM+138:20141017000000:204'
RFF+RA:128275'
RFF+AEK:490359'
PAI+1::42'
NAD+PR+7611937000723::9'
NAD+PE+7610603000005::9+++++++CH'
CUX+2:CHF:11'
DOC+380:::RG+26838'
MOA+12:61.12'
MOA+9:64.17'
MOA+265:-3.05'
MOA+109:-1.28'
DTM+137:20140924000000:204'
DTM+140:20141010000000:204'
...

У меня вопрос, как мне настроить Mapping-файл? Нужно ли указывать каждую строку или достаточно указать только те поля, которые меня интересуют?

Мой файл сопоставления:

->
<medi:description name="MESSAGE" version="1.0"/>

<medi:delimiters segment="'!$" field="+" component=":" sub-component="~" />

<medi:segments xmltag="REMADV">

    <medi:segment minOccurs="1" maxOccurs="1" segcode="BGM" xmltag="Header">
        <medi:field xmltag="Code"/>
        <medi:field xmltag="Zahlungsavisnummer"/>
        <medi:field xmltag="Code2"/>
    </medi:segment> 
    <medi:segment minOccurs="1" maxOccurs="2" segcode="DTM" xmltag="DATE">
        <medi:field xmltag="abc" >
            <medi:component xmltag="1"/>
            <medi:component xmltag="2"/>
            <medi:component xmltag="3"/>      
        </medi:field>
    </medi:segment>


    <medi:segmentGroup xmltag="Dataset" maxOccurs="-1">

        <medi:segment minOccurs="0" maxOccurs="-1" segcode="DOC" xmltag="Rechnung" truncatable="true">
                <medi:field xmltag="Code"/>
                <medi:field xmltag="Belegart"/>
                <medi:field xmltag="Belegnummer"/>
        </medi:segment>

        <medi:segment minOccurs="0" maxOccurs="-1" segcode="MOA" xmltag="Rechnung" truncatable="true">
                <medi:field xmltag="Code"/>
                <medi:field xmltag="TotalAmount"/>
        </medi:segment>
    </medi:segmentGroup>    

        <!-- UNT+8+66059903600010' -->
    <medi:segment minOccurs="0" segcode="UNT" xmltag="EndsegmentDatensatz"/>


    <!-- UNZ+10+00402' -->
    <medi:segment minOccurs="0" segcode="UNZ" xmltag="EndsegmentDokument"/>
</medi:segments>

Конфиг smooks выглядит так:

<?xml version="1.0" encoding="UTF-8"?>
<smooks-resource-list xmlns="http://www.milyn.org/xsd/smooks-1.1.xsd"
                  xmlns:edi="http://www.milyn.org/xsd/smooks/edi-1.1.xsd">

<!--
Configure the EDI Reader to process the message stream into a stream of SAX events.
-->
<edi:reader mappingModel="REMADV-EDI-To-XML-Mapping.xml"/>

</smooks-resource-list>

Сообщение об ошибке всегда одинаково:

Must be a minimum of 1 instances of segment [BGM].  Currently at segment number 1.

Похоже, что он не находит соответствия. Кто-нибудь имеет представление, почему я не могу найти какое-либо поле в EDI-сообщении?

Рето

1 ответ

Лучший способ - использовать наборы карт, сгенерированные Smooks.

smooks-config.xml

<?xml version="1.0"?>
<smooks-resource-list xmlns="http://www.milyn.org/xsd/smooks-1.1.xsd"
                      xmlns:core="http://www.milyn.org/xsd/smooks/smooks-core-1.4.xsd"
                      xmlns:xsl="http://www.milyn.org/xsd/smooks/xsl-1.1.xsd"
                      xmlns:unedifact="http://www.milyn.org/xsd/smooks/unedifact-1.5.xsd">


    <unedifact:reader mappingModel="urn:org.milyn.edi.unedifact:d01b-mapping:1.4" ignoreNewLines="true" />

    <core:filterSettings type="DOM" />
    <core:exports>
        <core:result type="org.milyn.payload.StringResult"/>
    </core:exports>
</smooks-resource-list>

И добавьте к своему POM зависимость:

    <dependency>
        <groupId>org.milyn.edi.unedifact</groupId>
        <artifactId>d01b-mapping</artifactId>
        <version>1.4</version>
    </dependency>  
Другие вопросы по тегам