Java 如何创建使用XStream的Arquillian测试?
如何创建使用XStream的Arquillian测试 部署方法应该是什么样子 我尝试的第一件事是添加我的类和XStream包Java 如何创建使用XStream的Arquillian测试?,java,xstream,jboss-arquillian,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("
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)
fromXML(xstream.java:1031)(…)
我还能做什么?碰巧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");
}
我花了一些时间才弄明白。我希望它能帮助一些人。碰巧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");
}
我花了一些时间才弄明白。我希望它能帮助别人。在上面的评论中回答你的问题:可以是一条路
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);
其他示例用法
为什么这么好?原因有两个:
- 您正在使用的每个库都可以有自己的可传递依赖项——因此您必须单独添加它(在您的示例中,这些库是:
和dom4j
)——但是可以有更多的依赖项xmlpull
- 重新打包库非常容易出错,您已经注意到了这一点
包覆膜式解析器是一款非常有用的软件。在上面的评论中回答您的问题:可以这样做
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);
其他示例用法
为什么这么好?原因有两个:
- 您正在使用的每个库都可以有自己的可传递依赖项——因此您必须单独添加它(在您的示例中,这些库是:
和dom4j
)——但是可以有更多的依赖项xmlpull
- 重新打包库非常容易出错,您已经注意到了这一点
包覆面提取解析程序是一款非常有用的软件。很高兴您解决了您的问题:),但请注意,当使用WAR
lib/
目录下添加的XStream
库时,您的问题将永远不会存在。@GrzesiekD。那太好了。我怎么能这么做?XStream依赖项是使用maven添加到我的项目中的,war是在部署方法中创建的。这个答案在使用wildfly-arquillian-container-remote的测试中使用XStream解决了我的问题。很高兴您解决了您的问题:),但也请注意,当使用XStream
作为WARlib/
目录下添加的库时,您的问题将永远不会存在。@GrzesiekD。那太好了。我怎么能这么做?使用maven将XStream依赖添加到我的项目中,并在部署方法中创建war。这个答案解决了我在使用wildfly-arquillian-container-remote进行测试时使用XStream的问题。太棒了!谢谢太好了!谢谢