使用JAX-RS和WildFly的应用程序/部署特定属性

时间:2015-05-14 23:09:29

标签: java configuration jax-rs resteasy wildfly

我习惯在Tomcat / Jetty上使用Spring,现在我正在使用在WildFly上运行的现有JAX-RS项目(RESTEasy)。

我想知道应用程序/部署属性文件在WildFly,standalone / configuration / myapp.properties上的位置是什么?

然后应用程序如何加载它们?我在我们的类中尝试扩展javax.ws.rs.core.Application:

@javax.ws.rs.ApplicationPath("")
public class ApplicationConfig extends Application {

    @Override
    public Map<String, Object> getProperties() {
        System.out.println(">>>>>>>>>>>>>>>> get properties");
        // I added this method but nothing is printed...
    }

    @Override
    public Set<Class<?>> getClasses() {
        System.out.println(">>>>>>>>>>>>>>>> get classes");
        // This is printed
        ...
        // classes are loaded correctly
    }
}

然后我将如何访问控制器中的属性?顺便说一下,我们不使用依赖注入。

谢谢!

1 个答案:

答案 0 :(得分:1)

一些调查......

通常应该工作

  1. 应在启动时调用getProperties()以加载任何所需的应用程序属性。
  2. 您应该能够将javax.ws.rs.core.Configuration注入资源类(使用@Context)并通过该对象检索属性。这在javadoc中说明

      

    可以使用Context注释注入此接口。

  3. 测试

    @ApplicationPath("/api")
    public class RestApplication extends Application {
    
        @Override
        public Map<String, Object> getProperties() {
            System.out.println(">>>>>>>>>>>>>>>> get properties");
            Map<String, Object> props = new HashMap<>();
            props.put("message", "Hello Configuration Properties!");
            return props;
        }
    }
    
    @Path("config")
    public class ConfigResource {
    
        @Context
        private Configuration configuration;
    
        @GET
        public Response getProperty(@QueryParam("prop") String prop) {
            String propValue = (String)configuration.getProperty(prop);
            return Response.ok(propValue).build();
        }
    }
    

    发现

    • 上面的内容与我在Resteasy 3.0.9.Final上测试的结果不同。我得到一些关于此类型没有上下文的错误。我不知道为什么。可能是一个错误,我不知道。也许你可以看一下。
    • 以上情况适用于Jersey 2.16

    什么适用于Resteasy

    可以与Resteasy合作的方法是将Application(如前所述here注入资源(也使用@Context)并获取属性那样。

    @Path("config")
    public class ConfigResource {
    
        @Context 
        Application application;
    
        @GET
        public Response getProperty(@QueryParam("prop") String prop) {
            String propValue = (String)application.getProperties().get(prop);
            return Response.ok(propValue).build();
        }
    }