0

我有一个使用 Resteasy(在 Appengine 之上运行)的 Rest 服务,具有以下伪代码:

@Path("/service")
public class MyService {
  @GET
  @Path("/start")
  public Response startService() {
     // Need to read properties file here.
     // like: servletContext.getResourceAsStream("/WEB-INF/config.properties")
  }
}

但是很明显,这里无法访问 servlet 上下文。

和像这样的代码:

 InputStream inputStream = this.getClass().getClassLoader()
                .getResourceAsStream("/WEB-INF/config.properties");  

无法在 Appengine 环境中执行。

编辑:

我试过用 Spring 来做,比如:

appContext.xml

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations" value="/WEB-INF/auth.properties"/>
</bean>

然后,把它放在实际的类字段上:

@Path("/service")
public MyService{
    @Autowired
    @Value("${myservice.userid}")
    private String username;
    @Autowired
    @Value("${myservice.passwd}")
    private String password;
 // Code omitted
}

但是,MyService抱怨的部分代码因为usernameandpassword没有被“注入”,我的意思是它是空的,尽管它在auth.properties文件中

4

2 回答 2

2

如果您将文件放入/WEB-INF/classes/(重要的是,位于类路径中),这应该可以工作,将 config.properties 指定为顶级文件。

this.getClass().getClassLoader().getResourceAsStream("/config.properties");

看到这个类似的问题:如何在 Google App Engine 中加载属性文件?

编辑:现在您已编辑,我将回复并回答与 Spring 相关的问题。因此,将 auth.properties 放入 /WEB-INF/classes/ ,然后指定类路径,如下所示。

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location" value="classpath:auth.properties"/>
</bean>
于 2012-04-30T07:43:27.897 回答
2

在 RESTEasy 中,您可以通过 @Context 注释轻松注入 Servlet 上下文:http: //docs.jboss.org/resteasy/docs/2.3.1.GA/userguide/html_single/index.html#_Context

可以在此处找到示例:Rest easy 和 init params - 如何访问?

于 2012-04-30T10:46:36.813 回答