2014-12-20 6 views
0

XStream을 사용하는 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: Cannot create XmlPullParser at com.thoughtworks.xstream.io.xml.AbstractXppDriver.createReader(AbstractXppDriver.java:56) at com.thoughtworks.xstream.XStream.fromXML(XStream.java:1040) at com.thoughtworks.xstream.XStream.fromXML(XStream.java:1031) (...)

을 ?

답변

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.

왜 이렇게 좋습니까? 때문에 두 가지 이유 :하지만이있을 수있다 : -

  • 당신이 자신의 이적 종속성을 가질 수 있습니다 사용하고있는 모든 라이브러리 - 당신이 별도로 추가해야하므로 (dom4jxmlpull이 귀하의 경우입니다) 훨씬 더 많은 의존성.
  • 리 패키징 라이브러리은 이미 알아 차렸으므로 오류가 발생하기 쉽습니다.

해결 자들은 소프트웨어의 정말 유용한 부분입니다.

+0

그게 좋습니다! 감사! – pablosaraiva

+0

다행스럽게도 :) –

2

작동하려면 xmlpull의 XmlPullParserFactory에 META-INF 디렉토리에 특수 파일이 있어야합니다.

.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"); 

} 

그것은에 좀 시간이 걸렸습니다 그것을 알아 내라. 나는 그것이 누군가를 돕기를 바랍니다.

+1

다행히 문제를 해결 했으니 까 :) 그러나'XStream'을 WAR'lib /'디렉토리 아래에 추가 된 라이브러리로 사용할 때 - 그 문제는 결코 존재하지 않았을 것입니다. –

+0

@GrzesiekD. 그것은 좋은 것입니다. 내가 어떻게 할 수 있니? XStream 의존성은 maven을 사용하여 프로젝트에 추가되고 war는 배포 메소드에서 생성됩니다. – pablosaraiva

+1

이 답변은 wildfly-arquillian-container-remote로 테스트에서 XStream을 사용하여 문제를 해결했습니다. – yamass