Izvedba u Javi

Nov 22, 2012 at 11:22 AM

Jel' netko uspio potpisati ispravno xml u Javi?

Ja sam složio skoro sve, jedino me još to muči.

Nov 23, 2012 at 9:44 AM
Edited Nov 23, 2012 at 9:44 AM

Pozdrav,

Nemam nikakve veze s Javom ali i sam sam sinoć nešto tražio i naišao na ovo pa možda pomogne.

http://stackoverflow.com/questions/5330049/java-equivalent-of-c-sharp-xml-signing-method

Pozdrav

Nov 26, 2012 at 7:53 AM

Hvala na info. Proučio sam i taj primjer. Mene zabrinjava ovo:

http://stackoverflow.com/questions/9203478/digestvalue-in-xmlsignature-in-java-is-different-from-c-sharp?rq=1

izgleda da MSova riješenja po običaju rade nešto mimo standarda i da su već poznati problemi u razlici potpisa xml-a kada se koristi .Net tehnologija i ostale. Nije mi jasno kako će to riješiti ljudi koji neće koristiti .Net i njemu slične tehnologije. A liudi u Apisu su sigurno instalirali MSov web servis koji obrađuje soap poruke..

U mom slučaju je očito da Java jsr105 lib ne potpisuje na isti način kao iz C#, pa ću valjda morati promijeniti nešto ili uzeti druge metode.

 

I

Coordinator
Nov 26, 2012 at 7:58 AM

Po svemu sudeći, APIS-ov web servis je na Java-i...

Nov 26, 2012 at 8:24 AM
Edited Nov 26, 2012 at 8:24 AM

 Mislim da je najčešća razlika digesta radi ovoga :

http://fiskalizacija.codeplex.com/discussions/403580

Ukratko, višak razmaka mijenja digest ali ne i formalnu ispravnost XMLa.

Nov 27, 2012 at 11:20 AM

Hvala na pomoći. Na kraju sam morao eksprimentirati i shvatio da jsr105 biblioteka ne potpisuje ispravno ako je ulazni xml formatiran (praznine, tabovi, redovi), već se cijeli xml treba učitati kao jedna linija: 
                       

...
String thisLine = ""; String xmlString = ""; BufferedReader br = new BufferedReader(new FileReader(xmlFile)); while ((thisLine = br.readLine()) != null) { xmlString = xmlString + thisLine.trim(); } br.close(); ByteArrayInputStream xmlStream = new ByteArrayInputStream(xmlString.getBytes()); xmlDocument = docBuilder.parse(xmlStream); ...

Ono što mi nije baš jasno, kako iz xml objekta izvući isti rezultat bez da spremam na disk pa učitavam i koristim parser.

Nov 28, 2012 at 7:06 PM

Radim rješenje u Javi, medjutim imam problema sa WSDLom. 

dobio sam generiranjem tri metode,

String echo(String request)

RacunOdgovor racuni(RacunZahtjev request)

PoslovniProstorOdgovor poslovniProstor(PoslovniProstorZahtjev request)

echo prolazi jer je jednostavan, metoda trazi String i ne potpisuje se. Medjutim ostale dvije metode traze digitalni potpis. Klasa RacunZahtjev se sastoji od klasa zaglavlje, racun i signature, medjutim kako dobit signature odnosno napunit objekt tipa signature?

Probavao sam razne fore sa JAXB marshal i unmarshal metode, medjutim nema uspjeha...

Nov 29, 2012 at 7:08 AM

ne znam, ja koristim DOM i jsr105 unatoč gore navedenom problemu. za WSDL nemam pojma kako koristiti. Iz APIS-a naravno nikakva pomoć oko Jave, tako da stvari izgleda funkcioniraju "snađi se druže" ...

svaka čast raverusu i njegovom projektu.

Nov 29, 2012 at 7:43 AM

Uspio sam pomocu jaxb klasa stvoriti objekt racun, to je bilo peaceof cake, marshal-ao sam ga van, jsr-om udario potpis i tu sam udario u zid. Hocu poslat SOAP poruku sa SAAJom medjutim stalno mi javlja Internal Error 500 i vraca poruku <faultcode>env:Client</faultcode><faultstring>Rejected (from client)</faultstring>.

Da li si imao slicne probleme i jesi li uopce koristio SAAJ za slanje SOAP poruke SSLom?

Nov 29, 2012 at 8:21 AM

nisam imao tih problema.

možda si zaboravio ubaciti democacert.cer certifikat za ssl u $JAVA_HOME/jre/security/cacert (ili koju CA datoteku već koristiš).

Nov 29, 2012 at 8:37 AM
Edited Nov 29, 2012 at 8:37 AM

Ma nije, uspio sam, imao sam gresku. Kod sout-a sam vidio da mi SOAP brise xmlns atribut iz racuna i signatura, dodao sam u Document DuilderFactory dbFactory.setNamespaceAware(true); i onda je sve proslo, medjutim javlja mi da mi je dig. potpis neispravan. To mi se isto desavalo kada sam pomocu WS slao poruku, mislio sam da je stvar do unmarshal metode, odnosno da mi mijenja xml... ali ocito nije... Mozda radim nesto krivo s kljucevima. Ako sam dobro shvatio xml se potpisuje s privatnim kljucem dobivenim zahtjevom? Ili s javnim kljucem. U keystore-u imam znaci par kljuceva koji se sastoji od privatnog i javnog, oni su naravno pod lozinkom unutar keystora i imam fiskalcistest.cer za handshake sslom. Ne kuzim, jel nesto krivo radim?

Nov 29, 2012 at 9:32 AM

U gore navedenoj poruci sam objasnio. Znači jedan od razloga je bug u jsr105 (ili jednostavno to tako radi). S obzirom da nisam ekspert za Javu, ne bih htio okolo dijeliti nepotrebne savjete.

Ono što sam vidio po forumima još je bilo ljudi sa istim problemom, da c# drugačije potpiše xml nego java, a isti je ključ i xml poruka.

Nov 29, 2012 at 1:47 PM

Evo riješio sam, dobio sam JIR, zahvaljujem idelac na podršci. Uskoro cu staviti source na web, kada malo uljepsam klase i metode :)

Nov 29, 2012 at 3:55 PM
Edited Nov 29, 2012 at 3:55 PM

Stavio sam riješenje na sourceforge, doduše jednu klasu, ali možda nekome pomogne:

https://sourceforge.net/projects/fiskalizacijapo/files/

Oct 2, 2013 at 12:29 PM
Edited Oct 2, 2013 at 12:30 PM
Imam pitanjce vezano uz tvoje rješenje za slanje iz jave.... Jesi li ti to pokušao poslati preko androida ili ovaj kod zahtjeva neko pretumbavanje koda....Zanima me to jer dosad nisam nikad radio ništa do nedavno u javi (androidu), a sad sam prihvatio jedan posao, za izradu aplikacije u androidu....
Oct 2, 2013 at 12:30 PM
expozed wrote:
Stavio sam riješenje na sourceforge, doduše jednu klasu, ali možda nekome pomogne: https://sourceforge.net/projects/fiskalizacijapo/files/
Imam pitanjce vezano uz tvoje rješenje za slanje iz jave.... Jesi li ti to pokušao poslati preko androida ili ovaj kod zahtjeva neko pretumbavanje koda....Zanima me to jer dosad nisam nikad radio ništa do nedavno u javi (androidu), a sad sam prihvatio jedan posao, za izradu aplikacije u androidu....
Oct 2, 2013 at 4:25 PM
Pisano je za desktop aplikaciju, Android ne podrzava JKS kljuceve vec BKS, netko me je vec priupitao za pomoc oko Android verzije potpisivanja xml-a, međutim ne znam da li je dosao do rješenja. Znaci u svakom slucaju morao bi prilagodit kod.