todvora / eet-client

Client and library for #EET communication - http://www.etrzby.cz/ , written in Java
MIT License
48 stars 26 forks source link

NullPointerException in EetErrorConverter #26

Closed JosefBoukal closed 7 years ago

JosefBoukal commented 7 years ago

Ahoj Tome,

  1. Díky za super práci na EET pro Javu, cením si toho nesmírně, kód a navržené API je super!

  2. Pokud přistupuju na PRODUCTION endpoint s modem TEST a odopvěď od EET je code: 0, content: "Datovou zpravu evidovane trzby v overovacim modu se podarilo zpracovat", pak v objektu OdpovedChybaType je test field null a v cz.tomasdvorak.eet.client.errors.EetErrorConverter#getErrorType to vylítne na NPE, viz stacktrace.

Koumnikaci zkouším s posledním 3.0.0-beta6 verzí.

Caused by: java.lang.NullPointerException
    at cz.tomasdvorak.eet.client.errors.EetErrorConverter.getErrorType(EetErrorConverter.java:16)
    at cz.tomasdvorak.eet.client.EETClientImpl.convertToSubmitResult(EETClientImpl.java:105)
    at cz.tomasdvorak.eet.client.EETClientImpl.sendSync(EETClientImpl.java:61)

S pozdravem

Pepa

todvora commented 7 years ago

Díky za bugreport a feedback. Chyba je opravená v čerstvém release 3.0.0-beta-7, doplnil jsem i test.

Mohu požádat o nějaký další feedback k připravované verzi 3.0.0? Je vše logické? Chybí něco nebo by se hodil nějaký helper, lepší rozhraní, logování?

Díky, Tomáš

JosefBoukal commented 7 years ago

Díky za rychlý fix, vyzkouším beta-7. Zatím pouze připravuju persistentní a transakční vrstvu nad EET client API, tak že pokud narazím na něco, co mi chybí nebo co bych rád změnil, tak určitě dám vědět.

Zatím díky, Pepa

todvora commented 7 years ago

Přidal jsem ještě demo implementaci aplikace postavené nad klientem ve verzi 3.0. Třeba se bude něco hodit: https://github.com/todvora/eet-client-demo

JosefBoukal commented 7 years ago

Ahoj Tome,

super, díky moc, nějak nestíhám reagovat... Příklad potvrdil můj postup, kde serializuju TrzbaType pomoci Jackson ObjectMapperu do JSON a ukladam do MySQL db a pak budu asynchronně zkoušet (několikrát) znova poslat pomocí Tvého API zase do EET. Bohužel jsem se ještě nedostal k tomu, abych fix otestoval, ale opět, jakmile se k tomu dostanu, tak dám feedback ;)

Pepa

JosefBoukal commented 7 years ago

Ahoj Tome,

tak jsem se k tomu konečně dostal. NPE je opraveno, ale nejsem si jist, že ta oprava je dobře, protože pokud mám response:

errorResponse = {OdpovedChybaType@14857}: content = "Datovou zpravu evidovane trzby v overovacim modu se podarilo zpracovat" kod = 0 test = null

Tak je sice test null, ale podle mého názoru platba prošla a ResponseWithErrorException výjimka už by se tedy neměla vyhazovat. Nevím, proč test jen null, to už jsem nezkoumal.

Pepa

todvora commented 7 years ago

Díky za test a hlášení, už to vidím. On totiž test není totéž, co overeni v hlavicce požadavku, ale

Je to příznak, kterým společné technické zařízení správce daně informuje pokladní zařízení poplatníka, zda datová zpráva evidované tržby byla zaslána do produkčního nebo neprodukčního prostředí.

http://www.etrzby.cz/assets/cs/prilohy/EET_popis_rozhrani_v3.1.1.pdf

Příznak test bychom tedy měli nejspíš zcela ignorovat a řešit jen kód a obsah text chyby. Celou situaci shrnuje tabulka z výše zmíněné dokumentace na straně 11.

Souhlasí to?

Díky, Tomáš

JosefBoukal commented 7 years ago

Ano, přesně to tak i chápu a dokonce v Tabulce 1 na str. 8 v mém scénáři (Ověřovací + Produkční) zmínka o "příznaku neprodukčního prostřed" není, z čehož usuzuji, že ho asi ani nenastavují, čili je logicky null. A přesně, jak píše, test příznaku v tomto případě ignorovat a řešit jen kód a text chyby.

A když koukám na tu tabulku, tak z ní vyplívá, že test=true platí jen pro Neprodukční prostředí a pro Produkční prostředí není test uveden vůbec (je null).

Pepa

todvora commented 7 years ago

Opraveno, už se kontroluje jen kód a zpráva, typ prostředí (příznak test nijak nepoužívám).

todvora commented 7 years ago

Release 3.0.0-beta-8 obsahuje mimo jiné i tuto opravu.

JosefBoukal commented 7 years ago

Potvrzuji, že je to nyní (3.0.0-beta-8) v pořádku.