您的位置:首页 > 其它

加载jar包下面的resources目录下的文件

2014-01-20 14:26 239 查看
背景(如并不关心,可以直接跳至最后一项实现代码):

现在这个项目会调用一个远程的webservice叫做NP,但是一直都没有准备好提供给我们用,我们的web application又需要继续开发。于是我们使用了dreamhead所写的moco,为我们模拟远程的NP。Moco做的事情是启动一个服务,监听某已配置端口,接收到一个request后,判断这个请求然后返回相应的response。

Moco提供了两种方式来配置。一种是使用Plugin,通过Json文件配置request和response,运行web application前启动好moco的server,就可以工作了。另一种是内嵌的moco,将moco引入在java代码中启动和配置,这种方式不需要运行项目前启动moco的server。

我们发送的request是xml格式的,期望得到的response也是xml格式的,于是我们定义了许多期望得到的xml文件,配置moco通过判断request返回对应的response。

问题:moco不是引入在webapp的module下面的,而是一个叫service的module,且这些response的xml都放在service这个目录下面的resources目录中。moco有两个方法可以返回两种类型,一个是方法是file,需要参数是路径(相对和绝对都可以);另一个是方法text,需要的参数是string。可以希望能在代码中加载到用于response的xml的文件。

[b]项目目录结构:[/b]

+---qdem
|    |
|    +---qdem-jetty
|    +---qdem-services
|    |     |
|    |     +---src
|    |     |   |
|    |     |   +---com.qing
|    |     +---resources
|    |         |
|    |         ---response1.xml
|    +---qdem-webapp
|    +---qdem-tests


打包后的项目结构:

Maven在将webapp打包成war包的时候,将qdem-services打成了一个jar包,提供给webapp使用,由于moco是在这个jar包中被使用,所以只列出qdem-services这个jar包的目录结构。

qdem-services.jar
|
|---resonces1.xml
|---+---com.qing


加载resource目录下文件的方法:

当在配置Moco的response的时候,使用file方法传入xml的相对路径,即resources下文件的路径,但是单元测试能通过,但在在打完war包后,就找不到response1.xml文件了。所以这个方法是不成功的。

所以我们只有使用text方法,传入response.xml的string。可以使用class的ClassLoader去加载在resources目录下的文件。再将加载的文件转换为string。

我的Moco的配置在类MocoHttpEndPoint

// file("response1.xml"); //does not work

InputStream inputStream = MocoHttpEndPoint.class.getClassLoader().getResourceAsStream("response1.xml");
String value = IOUtils.toString(inputSteam, "UTF-8");
text(value);


IOUtils是commons-io包的方法,在maven中,添加了如下依赖:

<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐