2013-10-29 1 views
5

मैं कैसे SimpleTemplateEngine या GStringTemplateEngine 65535 वर्णों से एक टेम्पलेट बड़ा कार्रवाई करने के लिए उपयोग कर सकते हैं?बड़ी (> 64k) टेम्पलेट के साथ ग्रूवी TemplateEngines का उपयोग

groovy.lang.GroovyRuntimeException: Failed to parse template script (your template may contain an error or be trying to use expressions not currently supported): startup failed: SimpleTemplateScript1.groovy: 5614: String too long. The given string is 198495 Unicode code units long, but only a maximum of 65535 is allowed.

मैं निम्नलिखित कोड का उपयोग कर टेम्पलेट का निर्माण कर रहा हूँ: GStringTemplateEngine fails to work with >64K strings:

def templateEngine = new SimpleTemplateEngine() 
def binding = [:] 
templateEngine 
    .createTemplate(new FileReader("input.txt)) 
    .make(binding) 
    .writeTo(new FileWriter(new File("output.txt"))) 

मैं JIRA 3487 इस मुद्दे से संबंधित पाया

मैं निम्न त्रुटि प्राप्त।

मैंने इनपुट को तोड़ने के बारे में सोचा है, लेकिन यह सुनिश्चित करता है कि अभिव्यक्ति के बीच में तोड़ना न पड़े, यह अपनी जटिलताओं को लाता है।

मैं किसी अन्य सुझाव की सराहना करता हूं।

उत्तर

3

GStringTemplateEngine के लिए कुछ प्रतिस्थापन पाए गए ये बड़े स्ट्रिंग्स को संभाल सकते हैं।

https://github.com/mbjarland/groovy-streaming-template-engine

https://github.com/mbknor/gt-engine

+0

यह सुनिश्चित नहीं है कि जब मैं समाधान ढूंढ रहा था तो मैं उस परियोजना को कैसे चूक गया। स्पष्ट रूप से मेरे Google-F को काम की ज़रूरत है। – jamesallman

+0

ग्रोवी-स्ट्रीमिंग-टेम्पलेट-इंजन मेरे लिए काम नहीं करता है। यह लगभग असफल हो जाता है (java.lang.RuntimeException: विधि कोड बहुत बड़ा!) मेरे लगभग। 250KB टेम्पलेट बिल्कुल groovy अंतर्निहित टेम्पलेट इंजन की तरह। – arturro

1

इसके बजाय GStringTemplateEngine का उपयोग करने का प्रयास करें। जावाडोक से:

Processes template source files substituting variables and expressions into placeholders in a template source text to produce the desired output using a streaming approach. This engine has equivalent functionality to the SimpleTemplateEngine but creates the template using writable closures making it potentially more scalable for large templates or in streaming scenarios.

आप शायद बस new GStringTemplateEngine() साथ new SimpleTemplateEngine() की जगह के साथ भाग मिल जाएगा, लेकिन निश्चित रूप से यह परीक्षण करना चाहिए।

+0

मैं साथ ** GStringTemplateEngine ** एक ही त्रुटि प्राप्त। – jamesallman

+2

अब यह एक आश्चर्यचकित था। कुछ परीक्षणों के बाद ऐसा लगता है कि अगर टेम्पलेट के भीतर टेक्स्ट का एक बड़ा हिस्सा (> 64 के) है तो इसमें विफल रहता है जिसमें कोई चर नहीं होता है। कम से कम यह मेरे लिए ~ 100K फ़ाइलों पर काम करता है जब चर फैलता है। यदि पाठ बहुत बड़ा है, हालांकि (मुझे यह 550K फ़ाइल पर बहुत सारे और बहुत सारे चर के साथ मिला है) इस वर्ग के कार्यान्वयन से संबंधित एक और सीमा होती है (विधि बहुत लंबी होती है)। वास्तव में एक दयालुता। यह सही होने के लिए बहुत कठिन नहीं होना चाहिए, लेकिन इसे ठीक करने में कोई भी दिलचस्पी नहीं लेता है। – Steinar

+0

वही समस्या यहाँ। बहुत बुरा यह तय नहीं किया जा सकता है। असली बमर –

संबंधित मुद्दे