2011-07-26 1 views
5

Come parte della mia soluzione probabilmente errata e ingombrante per stampare un modulo ho preso un documento MS-Word, salvato come XML e sto provando a memorizzare quell'XML come una stringa groovy così posso $ {fillOutTheFormProgrammatically}Groovy dice che la mia stringa Unicode è troppo lunga

Tuttavia, con documenti MS-Word grandi come sono, la stringa è 113100 caratteri unicode e Groovy dice che è limitata a 65536. C'è un modo per cambiare questo o sono io bloccato a spaccare la corda?

Groovy - need to make a printable form

Questo è quello che sto cercando di fare.

Aggiornamento: per essere chiaro è troppo lungo di una stringa Groovy .. Penso che una stringa normale potrebbe essere tutto buono. Andando a cambiare strategia e mettere alcune stringhe nel file posso facilmente trovare come%!% Variable_name%!% E poi fare .replace (... uh sento che una nuova domanda sta arrivando ...

risposta

5

State Embedding questa stringa direttamente in il tuo codice groovy? Lo stesso jvm ha un limite sulla lunghezza delle costanti di stringa, vedere lo VM Spec se si è interessati ai dettagli.

Una brutta soluzione potrebbe essere quella di dividere la stringa in parti più piccole e concatenarle in fase di runtime. Una soluzione migliore sarebbe quella di salvare il testo in un file esterno e leggere il contenuto dal codice. Puoi anche impacchettare questo file insieme al tuo codice e accedervi dal classpath usando Class#getResourceAsStream.

+0

Salvare il testo in un file e quindi leggerlo funziona alla grande! Grazie! – MeIr

0

Quale eccezione vuoi arrivare? non credo Groovy String è limitato a 65536, in quanto è fondamentalmente una stringa Java.

Sembra a me come si sta tentando di ricorsione da qualche parte e colpire il limite di stack di 65.536 chiamate.

Detto questo, caricare un 100K + char in memoria in un colpo solo sembra eccessivo.

Perché non analizzare l'XML utilizzando un parser SAX o s imilar per ottenere i risultati?

Oppure, perché non salvare solo i dati necessari per iniziare, piuttosto che basarsi su hunderds di migliaia di caratteri di XML (che presumo si desidera solo una piccola parte di)

+0

C'è un limite di stack di chiamate fisso? Fonte? –

+1

@Michael Sì, la profondità massima della risorsione è impostata sulla dimensione dello stack (il parametro '-Xss' per java può modificare l'impostazione predefinita) ... e in realtà, ho sbagliato, è [molto più di 65536 per impostazione predefinita] (http : //www.oracle.com/technetwork/java/hotspotfaq-138619.html#threads_oom) –