Question

From our Grails/Groovy app we need to use a service from a legacy Java service class, the constructor of which has a parameter of type org.springframework.core.io.Resource, e.g.

public ServiceClass(Resource someResource)

We need to inject an instance of the service class into a Groovy class of our app using Spring DSL, with the Resource referring to an XML file within our /src/main/resources. I tried to create the Spring config for this purpose, but so far I couldn't find a working solution. The relevant part of the config file looks like this

beans = {
    xmlns aop:"http://www.springframework.org/schema/aop",
    sec:"http://www.springframework.org/schema/security",
    context:"http://www.springframework.org/schema/context"

    serviceClass(com.somepackage.ServiceClass) {
      //here we need to refer to the constructor arg XML file some way
    }
}

I have tried multiple syntaxes found in various tutorials, e.g. closure for beanDefinition.constructorArgs, but unfortunately without success so far. Although neither the app compilation (grails:war) nor the startup (grails:run-app) indicates any problems with the bean wiring, when the app is actually loaded into the browser, we receive a NPE stating that our Groovy class into which the service class is injected, is a null object. So it seems that the bean wiring was not successful after all. Any help is appreciated

Était-ce utile?

La solution

After fixing various issues with the project setup itself and multiple cleanups/recompiles, it seems that the following two approaches are both OK

serviceClass(com.somepackage.ServiceClass, '/WEB-INF/constructor-arg-xml-file.xml') {}

and

serviceClass(com.somepackage.ServiceClass) { bean ->
        bean.constructorArgs = [
            '/WEB-INF/constructor-arg-xml-file.xml'
        ]
    }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top