如何创建使用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)(...)
我还能做什么?
答案 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");
}
我花了一些时间才弄明白。我希望它有所帮助。