如何创建使用XStream的Arquillian测试?

时间:2014-12-20 21:10:54

标签: java xstream jboss-arquillian

如何创建使用XStream的Arquillian测试?

部署方法应该如何?

我尝试的第一件事是添加我的类和XStream包。

ShrinkWrap.create(WebArchive.class, "myTest.war")
    .addClass(...) // my classes
    .addClass(...) // my classes
    .addPackages(true, "com.thoughtworks.xstream")
    .addAsResource("META-INF/persistence.xml", "META-INF/persistence.xml")
    .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml");

错误抱怨缺少XStream依赖项,所以我添加了:

    .addPackages(true, "org.dom4j")
    .addPackages(true, "org.xmlpull")

之后,我仍然收到以下错误:

  

com.thoughtworks.xstream.io.StreamException:无法创建   XmlPullParser在   com.thoughtworks.xstream.io.xml.AbstractXppDriver.createReader(AbstractXppDriver.java:56)     在com.thoughtworks.xstream.XStream.fromXML(XStream.java:1040)at   com.thoughtworks.xstream.XStream.fromXML(XStream.java:1031)(...)

我还能做什么?

2 个答案:

答案 0 :(得分:3)

在上面的评论中回答您的问题:ShrinkWrap resolvers可以成为您的选择。

WebArchive archieve = ShrinkWrap
            .create(WebArchive.class, "myTest.war")
            .addPackages(true, "your.company.project")
            // other resources ...

File[] xstreamLib = Maven.resolver().resolve("com.thoughtworks.xstream:xstream:1.4.7")
            .withTransitivity().asFile();
archieve.addAsLibraries(xstreamLib);

其他样本使用here

为什么这么好?由于两个原因:

  • 您使用的每个库都有自己的传递依赖 - 因此您必须单独添加它(在您的情况下,这些是:dom4j和{{1} }) - 但可能会有更多的依赖。
  • 重新打包库非常容易出错,因为您已经注意到它了。

ShrinkWrap解析器是非常有用的软件。

答案 1 :(得分:2)

xmlpull的XmlPullParserFactory需要在META-INF目录中出现一个特殊文件才能工作。

要解决该问题,您需要在创建Web存档时添加以下行:

.addAsResource("META-INF/services/org.xmlpull.v1.XmlPullParserFactory", "META-INF/services/org.xmlpull.v1.XmlPullParserFactory")

工作部署方法如下所示:

@Deployment
public static WebArchive createDeployment() {
    return ShrinkWrap.create(WebArchive.class, "myTest.war")
            .addClass(...) // my classes
            .addClass(...) // my classes
            .addPackages(true, "com.thoughtworks.xstream")
            .addPackages(true, "org.dom4j")
            .addPackages(true, "org.xmlpull")
            .addAsResource("META-INF/persistence.xml", "META-INF/persistence.xml")
            .addAsResource("META-INF/services/org.xmlpull.v1.XmlPullParserFactory", "META-INF/services/org.xmlpull.v1.XmlPullParserFactory")
            .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml");

}   

我花了一些时间才弄明白。我希望它有所帮助。