bertramdev / grails-asset-pipeline

Grails Asset Pipeline

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

CKEditor language JS file processing errror on GET - Unexpected character '╗'

gharia opened this issue · comments

I am trying to use ng-ckeditor, for which it requires CKEditor in my Grails 3.1.3 project with angular profile. In build.gradle file, I added following bower for CKEditor:

'ckeditor'('4.5.x'){
        source 'ckeditor.js' >> '/ckeditor/'
        source 'config.js' >> '/ckeditor/'
        source 'lang/*' >> '/ckeditor/lang/'
        source 'skins/kama/*' >> '/ckeditor/skins/kama/'
        source 'skins/kama/images/*' >> '/ckeditor/skins/kama/images/'
        source 'skins/moono/*' >> '/ckeditor/skins/moono/'
        source 'skins/moono/images/*' >> '/ckeditor/skins/moono/images/'
        source 'skins/moono/images/hidpi/*' >> '/ckeditor/skins/moono/images/hidpi/'
}

This works file. On bowerInstall it adds all dependencies in bower folder under /grails-app/assets/bower/ckeditor'. Then I have included ckeditor.js in my gsp and used to create an editor with textarea as follow:

<textarea id="description" ckeditor="editorOptions" name="description" ng-model="ctrl.notice.description" ></textarea>

Now when ckeditor is initialized it calls the language file based of provided options. In my angular controller I have provided following options for CKEditor:

$scope.editorOptions = {
            language: 'en',
            allowedContent: true,
            entities: false
  };

So on initializing it tries to fetch en,js, English language, file from lang folder. At this point I am receiving server side error as follow:

ERROR org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/].[grailsDispatcherServlet] - Servlet.service() for servlet [grailsDispatcherServlet] in context with path [] threw exception [Filter execution threw an exception] with root cause
java.lang.Exception: Javascript error in ckeditor/lang/en.js
 [error: couldn't process source due to parse error, Unexpected character '╗' (1:1)]
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
        at org.springsource.loaded.ri.ReflectiveInterceptor.jlrConstructorNewInstance(ReflectiveInterceptor.java:1075)
        at org.codehaus.groovy.reflection.CachedConstructor.invoke(CachedConstructor.java:83)
        at org.codehaus.groovy.runtime.callsite.ConstructorSite$ConstructorSiteNoUnwrapNoCoerce.callConstructor(Constructor
Site.java:105)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:247)
        at com.craigburke.angular.AnnotateProcessor$_process_closure1.doCall(AnnotateProcessor.groovy:33)
        at com.craigburke.angular.AnnotateProcessor$_process_closure1.doCall(AnnotateProcessor.groovy)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1426)
        at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
        at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
        at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:294)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1021)
        at groovy.lang.Closure.call(Closure.java:426)
        at groovy.lang.Closure.call(Closure.java:420)
        at com.craigburke.asset.JavaScriptEngine.run(JavaScriptEngine.groovy:37)
        at com.craigburke.asset.JavaScriptEngine$run.call(Unknown Source)
        at com.craigburke.angular.AnnotateProcessor.process(AnnotateProcessor.groovy:27)
        at asset.pipeline.AbstractAssetFile.processedStream(AbstractAssetFile.groovy:160)
        at asset.pipeline.DirectiveProcessor.fileContents(DirectiveProcessor.groovy:307)
        at asset.pipeline.DirectiveProcessor$fileContents$2.callCurrent(Unknown Source)
        at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:52)
        at asset.pipeline.DirectiveProcessor$fileContents$2.callCurrent(Unknown Source)
        at asset.pipeline.DirectiveProcessor.loadContentsForTree(DirectiveProcessor.groovy:129)
        at asset.pipeline.DirectiveProcessor.compile(DirectiveProcessor.groovy:67)
        at asset.pipeline.DirectiveProcessor$compile$6.call(Unknown Source)
        at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
        at asset.pipeline.DirectiveProcessor$compile$6.call(Unknown Source)
        at asset.pipeline.AssetPipeline.serveAsset(AssetPipeline.groovy:38)
        at asset.pipeline.AssetPipelineFilter.doFilterInternal(AssetPipelineFilter.groovy:179)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
        at org.springframework.boot.actuate.trace.WebRequestTraceFilter.doFilterInternal(WebRequestTraceFilter.java:112)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
        at org.grails.web.servlet.mvc.GrailsWebRequestFilter.doFilterInternal(GrailsWebRequestFilter.java:73)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
        at org.grails.web.filters.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:67)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
        at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:121)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
        at org.springframework.boot.actuate.autoconfigure.MetricsFilter.doFilterInternal(MetricsFilter.java:103)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:522)
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1095)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672)
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500)
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Thread.java:745)

I am not sure is it an issue with asset pipeline or do I need to do need to specify something related to it in build.config.

I realized that ckeditor.js is making GET request of language js file on initialization based on language specified in editor options. On this GET request this error occurs. The url of this GET request is as follow:

http://localhost:8080/assets/ckeditor/lang/en.js?t=G14D

If I include en.js directly in gsp file by <asset:javascript src="ckeditor/lang/en.js"></asset:javascript>, then there is no error. The js file is loaded. In this case URL comes to as follow:

http://localhost:8080/assets/ckeditor/lang/en.js?compile=false

So as a work around we can include the en.js file in gsp, but it is not recommended.

this may be fixed in the next release, changing default encoding to utf-8