nav-gov-hu / Online-Invoice

Public repository of the Online Invoice System
Other
138 stars 52 forks source link

[Q&A] XSD szeparáció, miért nem, ha igen? #1084

Closed PeterAdam closed 9 months ago

PeterAdam commented 9 months ago

A kérdés, amire választ szeretnék kapni / The question I would like to be answered Rövid és tömör leírása a kérdésnek. / A clear and concise description of the question.

A séma szét lett választva különálló XSD-kbe, de egy API hibában DATA elemet látok belekeverve (meg egy felesleges BASE elemet), de miért? A tool, ami osztályt generál az xsd-ből, megfekszik, ha egybe szeretném vonni a DATA és API sémát, az ugyanúgy elnevezett elemek miatt. A deszerializálás itt meghal, hogy ismeretlen névtér.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns2:GeneralErrorResponse xmlns="http://schemas.nav.gov.hu/NTCA/1.0/common"
                          xmlns:ns2="http://schemas.nav.gov.hu/OSA/3.0/api"
                          xmlns:ns3="http://schemas.nav.gov.hu/OSA/3.0/base"
                          xmlns:ns4="http://schemas.nav.gov.hu/OSA/3.0/data"
                          **xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                          xsi:schemaLocation="
                          http://schemas.nav.gov.hu/NTCA/1.0/common common.xsd
                          http://schemas.nav.gov.hu/OSA/3.0/api invoiceApi.xsd
                          http://schemas.nav.gov.hu/OSA/3.0/base invoiceBase.xsd
                          http://schemas.nav.gov.hu/OSA/3.0/data invoiceData.xsd
                          "**
                          >
    <header>
        <requestId>AXP2024021422124480</requestId>
        <timestamp>2024-02-14T21:12:44.803Z</timestamp>
        <requestVersion>3.0</requestVersion>
        <headerVersion>1.0</headerVersion>
    </header>
    <result>
        <funcCode>ERROR</funcCode>
        <errorCode>BAD_QUERY_PARAM_RANGE_EXCEEDED</errorCode>
        <message>A lekérdező paraméter által meghatározott intervallum hossza legfeljebb 35 nap lehet.</message>
    </result>
    <ns2:software>
        <ns2:softwareId>111111111111111111</ns2:softwareId>
        <ns2:softwareName>SzamlaBetolto4</ns2:softwareName>
        <ns2:softwareOperation>LOCAL_SOFTWARE</ns2:softwareOperation>
        <ns2:softwareMainVersion>4</ns2:softwareMainVersion>
        <ns2:softwareDevName>Neduddgi</ns2:softwareDevName>
        <ns2:softwareDevContact>neduddgi@gmail.com</ns2:softwareDevContact>
        <ns2:softwareDevCountryCode>HU</ns2:softwareDevCountryCode>
        <ns2:softwareDevTaxNumber>11111111</ns2:softwareDevTaxNumber>
    </ns2:software>
</ns2:GeneralErrorResponse>
PeterAdam commented 9 months ago

A **..** közötti rész csak az XML Tools validálás miatt lett hozzáadva, a többi az eredeti válaszból van

renced42 commented 9 months ago

Kedves @PeterAdam

Az XSD szétválasztásoknak üzleti és technikai okai vannak, tekintettel arra, hogy ezekre a sémákra külön külön más rendszerek is rá épülnek.

Nem tudom, milyen toolt használsz, de normál esetben az XML-ben a névterek alapján - még ha lenne is ugyanolyan nevű elem az XSD-kben, de szerintem nincs - elkülönülnek, így ez nem okozhat problémát.

PeterAdam commented 9 months ago

Kedves @renced42 ,

értem a szétválasztást, bár rossz ötletnek tartom az objektum-orientált leszármazós elvek adatokra alkalmazását.

De ha el van választva, akkor egy API kérésre adott hibaüzenetben mit keres a DATA séma?

EPluribusUnum commented 9 months ago

A 02.09-én közzétett új xsd-kben már nincs OSA import, csak EAR és NTCA. Nem lehet hogy a NAV teszt rendszer, vagy a feladó oldal még nem aktuális xsd alapján készít xml-t?

PeterAdam commented 9 months ago

A 02.09-én közzétett új xsd-kben már nincs OSA import, csak EAR és NTCA. Nem lehet hogy a NAV teszt rendszer, vagy a feladó oldal még nem aktuális xsd alapján készít xml-t?

Online-invoice kérdés, nem eVAT. A fenti hiba egy számla digest lekérésre adott válasz, amely túl hosszú időszak lekérésére érkezett (ez pedig könyvelők teljesítés kelte igénye az OSz számla kelte nézőpontja ellenében.)

renced42 commented 9 months ago

De ha el van választva, akkor egy API kérésre adott hibaüzenetben mit keres a DATA séma?

Nem teljesen értem, hogy mi a probléma azzal, hogy névterek fel vannak sorolva a headerben. Egy XML-nek nem kötelező névtér szerinti elemeket felsorolni. Azonban való igaz, hogy nincs jelenleg a válaszban olyan elem ami Data típusú.

Nem tudom milyen tool használsz de igazából az API-ból lehet minden osztályt származtatni ami az api híváshoz szükséges. Esetleg azt lehet csinálni, hogy az XSD-ben (Valamennyiben) add meg a sémalokációkat és így azokat fel fogja kapni. Itt láthatod mire gondolok: #556

PeterAdam commented 9 months ago

A tool az a standard xsd.exe, a problémája pedig, hogy ha az osztály képes deszerializálni mind az api, mind a data névteret, akkor ami tkp. base, vagy common, az nem egyértelmű, hogy az api, vagy a data névtérből kezelje - mint írtam fentebb, a leszármaztatás adatokra nem túl jó megoldás. Főleg, hogy általában OO nyelvekben egy ős van, itt pedig megoldható, hogy több legyen. Tehát szét kell szedni két osztályra - de akkor az egyik kap olyan névteret, ami a másiknak szól.

El lehet vinni ezt a végtelenségig, elrettentő példa a folyamatosan fixelt több gigányi XSD az EBA XBRL formátumú jelentéseihez...

Ősosztályra castolva megoldva, zárható.