Frage

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

War es hilfreich?

Lösung

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'
        ]
    }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top