Does JasperReports leggono i metadati colonne prima di generare rapporti?
-
20-09-2019 - |
Domanda
Ho un paio di JasperReports effettuate e in esecuzione molto fine su una macchina Windows. Il problema è iniziato quando i rapporti sono stati impostati per l'esecuzione su un mainframe con il sistema operativo zOS.
Il problema è: quando si crea il report Jasper sembra di leggere le tabelle dei metadati dal database e basati su di esso si aspettano i dati a venire
.
Esempio: se ho una colonna di tipo varchar (20), quindi Jasper sarà in attesa per 20 caratteri soltanto anche se il campo relazione è definita come stringa.
Questo non accade in ambiente Windows, ma sul mainframe la codifica dei caratteri è EBCDIC, e così la colonna potrebbe avere 19 caratteri sul mainframe, ma quando la sua codificato restituito al report come 23 o 24 caratteri.
Nota: questo problema si verifica solo in caratteri non inglesi.
Aggiorna
Un ConversionBufferFull
viene generata quando Jasper sta creando il rapporto, non ho la piena traccia visto che non posso accedere al registro mainframe. Il problema si verifica con una sola colonna chiamata COUNTRY_DESC quando il valore è di circa 17-20 caratteri, l'eccezione si verifica.
Come già detto i set di caratteri sul mainframe è EBCDIC, ma quando la sua lettura attraverso la sua JDBC convertito in Unicode. per esempio in EBCDIC parola sarà 17 caratteri, ma quando convertito diventare 22. Per qualche motivo sconosciuto Diaspro aspetta 20 solamente in questo campo.
Soluzione
JasperReports sé non gestisce la conversione dei dati, né la lunghezza del campo. Questo appare come un problema con il driver JDBC.
Sherman Jaspersoft
Altri suggerimenti
sun.io.ConversionBufferFullException
è gettato da convertitori di codifica dei caratteri sun.io
e bolla di maggio attraverso classi java.io
nelle vecchie versioni di Java. Questa API è stato deprecato da qualche tempo e non è più in uso dal Java 6 -. java.nio.charset
è usato al posto
Si tratta di una conversione bug personaggio in entrambi JasperReports, il driver JDBC o cose utilizzate per quei due. Non credo che abbia niente a che fare con la lettura di meta-dati da JDBC ResultSet di per sé, anche se potrebbe essere le stringhe nel meta-dati che viene convertito in modo non corretto.
E 'difficile dare la colpa o pensare a un work-in giro senza l'analisi dello stack.