0

Web アーカイブのリソース フォルダーではなく、ファイル システムから読み取るライブラリをインポートしています。ShrinkWrap を使用してそのパスにアセットを追加することで、基本的にそのファイルをモックできるようにしたいので、ファイル システムにこれらすべてのファイルがあることを保証せずにビルド サーバーでテストを実行できます。適切なパスに文字列アセットを追加しようとしましたが、コードでそのアセットが見つかりません。これが私が達成しようとしていることの例です。

リソースの残り

@Path("/hello-world")
public class HelloWorldResource {

    @GET
    public Response getHelloWorld(){
        return Response.ok(getFileContent()).build();
    }

    private String getFileContent() {

        StringBuilder builder = new StringBuilder();
        try {
            BufferedReader bufferedReader = new BufferedReader(
                    new FileReader(
                            "/usr/myFile.txt"));
            String line = bufferedReader.readLine();
            while (line != null) {
                builder.append(line);
                line = bufferedReader.readLine();
            }
        }
        catch (Exception e) {
            e.printStackTrace();
        }
        return builder.toString();
    }
}

テスト

@RunWith(Arquillian.class)
public class HelloWorldResourceTest {

    @Deployment
    public static WebArchive createDeployment()
    {
        WebArchive webArchive = ShrinkWrap
                .create(WebArchive.class)
                .addPackages(true,
                        HelloWorldApplication.class.getPackage(),
                        HelloWorldResource.class.getPackage(),
                        Hello.class.getPackage())
                .add(new StringAsset("Blah"),"/usr/myFile.txt")
                .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml");
        System.out.println("WebArchive: " + webArchive.toString(true));
        return webArchive;
    }

    @Test
    @RunAsClient
    public void testHello(
            @ArquillianResteasyResource("hello-world") final WebTarget webTarget)
    {
        final Response response = webTarget
                .request(MediaType.APPLICATION_JSON)
                .get();
        String hello = response.readEntity(String.class);
        System.err.println("Hello: " + hello);

        Assert.assertEquals("Status is not OK", response.getStatus(), 200);
    }
}

Web アーカイブ toString

/WEB-INF/
/WEB-INF/classes/
/WEB-INF/classes/com/
/WEB-INF/classes/com/
/WEB-INF/classes/com/
/WEB-INF/classes/com/helloworld/
/WEB-INF/classes/com/helloworld/application/
/WEB-INF/classes/com/helloworld/application/HelloWorldApplication.class
/WEB-INF/classes/com/helloworld/resource/
/WEB-INF/classes/com/helloworld/resource/HelloWorldResourceTest.class
/WEB-INF/classes/com/helloworld/resource/HelloWorldResource.class
/WEB-INF/classes/com/helloworld/dataobjects/
/WEB-INF/classes/com/helloworld/dataobjects/Hello.class
/WEB-INF/beans.xml
/usr/
/usr/myFile.txt

次のエラーが表示されます。

java.io.FileNotFoundException: /usr/myFile.txt (そのようなファイルまたはディレクトリはありません)

ShrinkWrap は、/usr/myFile.txt がファイル システムのルート ディレクトリにあるように見せるのではなく、アーカイブ内の相対パスとして /usr/myFile.txt を追加しているようです。ShrinkWrap に自分のやりたいことをさせる方法はありますか?

4

1 に答える 1