Skip to content

Absolute links not working outside web context #15330

@jglapa

Description

@jglapa

Expected Behavior

after setting grails.serverURL = 'http://localhost:8080'

class MakeLinkController {

    LinkGenerator grailsLinkGenerator

    def index() {

        String link
        Thread.start {
            try {
                link = grailsLinkGenerator.link(
                        absolute: true,
                        controller: 'MakeLink',
                        action: 'index',
                        id: 1
                )
            } catch (Exception e) {
                e.printStackTrace()
            }
        }


        String link2 = grailsLinkGenerator.link(
                absolute: true,
                controller: 'MakeLink',
                action: 'index',
                id: 1
        )

        render link + link2
    }
}

action result:

http://localhost:8080/makeLink/index/1http://localhost:8080/makeLink/index/1

Actual Behaviour

action result:

nullhttp://localhost:8080/makeLink/index/1


java.lang.IllegalStateException: Attribute absolute='true' specified but no grails.serverURL set in Config
        at org.grails.web.mapping.DefaultLinkGenerator.handleAbsolute(DefaultLinkGenerator.groovy:407)
        at org.grails.web.mapping.DefaultLinkGenerator.link(DefaultLinkGenerator.groovy:281)
        at org.grails.web.mapping.DefaultLinkGenerator.link(DefaultLinkGenerator.groovy)
        at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321)
        at grails7.absolute.link.issue.MakeLinkController$_index_closure1.doCall(MakeLinkController.groovy:14)
        at grails7.absolute.link.issue.MakeLinkController$_index_closure1.doCall(MakeLinkController.groovy)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:569)
        at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:343)
        at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:328)
        at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:280)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1007)
        at groovy.lang.Closure.call(Closure.java:433)
        at groovy.lang.Closure.call(Closure.java:412)
        at groovy.lang.Closure.run(Closure.java:505)
        at java.base/java.lang.Thread.run(Thread.java:840)

Steps To Reproduce

  1. set grails.serverURL
  2. generate a link outside web context (e.g. quartz job or a new thread)

Environment Information

No response

Example Application

https://github.com/jglapa/grails7-absolute-link-issue

Version

7.0.5

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    Status

    Done

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions