-
Notifications
You must be signed in to change notification settings - Fork 28
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Problem with Wildfly 8.2.0.Final #63
Comments
One of the goal of the project is to get rid of in container scanning, annotations should have been loaded already in loadCucumberAnnotationsAndEnrichers so scanning shouldnt happen at all in container but on client side (https://github.com/cukespace/cukespace/blob/master/core/src/main/java/cucumber/runtime/arquillian/client/CucumberArchiveProcessor.java#L126). Can you check loadCucumberAnnotationsAndEnrichers is triggered in container please and the processor scans the annotations (your app needs to be a war and not a jar)? |
Actually, my app is deployed as an EAR (Enterprise Archive). Haven't been While debugging the thing, I did investigate whether or not And even then, this method would load the annotations from a text file, Le ven. 16 oct. 2015 à 14:06, Romain Manni-Bucau notifications@github.com
Merci! Patrick ROBERT Développeur Java | Acquisio Courriel : probert@acquisio.com Suivez-nous : Twitter : http://twitter.com/acquisio LinkedIn : http://www.linkedin.com/company/acquisio Facebook : http://www.facebook.com/acquisio 6300, rue Auteuil, bureau 300 Brossard, QC J4Z 3P2 |
This is not documented cause an internal detail. Idea is on client side to list extensions and enrich the server with all annotation list to reload them on server without scanning. Maybe check your arquillian version 1.1.8.Final is known to work |
Using Arquillian 1.1.8.Final for this already. Le ven. 16 oct. 2015 15:46, Romain Manni-Bucau notifications@github.com a
Merci! Patrick ROBERT Développeur Java | Acquisio Courriel : probert@acquisio.com Suivez-nous : Twitter : http://twitter.com/acquisio LinkedIn : http://www.linkedin.com/company/acquisio Facebook : http://www.facebook.com/acquisio 6300, rue Auteuil, bureau 300 Brossard, QC J4Z 3P2 |
An you share a project reproducing it? Wonder if it can be linked to wildfly ear classloading |
Ok, I'll try to reproduce it in a standalone project and share it to demonstrate the problem. |
I have a problem using cukespace-core v1.6.1 with a managed Wildfly 8.2.0.Final server, with a @deployment routine in server mode (testable = true). If I change the @deployment to "testable = false", it works, but I want to run my test in full server mode where DI is working and I have a fully operational server context.
At some point ArquillianCucumber.performInternalCucumberOperations is calling ArquillianBackend.loadGlue(), then ArquillianBackend.scan(), which is scanning deployed classes for cucumber annotations (Given, When, etc.). And because of Wildfly's VFS filesystem, it ends up producing this exception:
// BEGINNING OF STACK TRACE
cucumber.runtime.CucumberException: Expected a file URL:vfs:/C:/dev/projets/VC8-844_W42/AcquisioSearch/content/JunitTest2.ear/lib/cucumber-junit-1.2.4.jar/cucumber/api/
at cucumber.runtime.io.Helpers.filePath(Helpers.java:16)
at cucumber.runtime.io.FileResourceIteratorFactory.createIterator(FileResourceIteratorFactory.java:28)
at cucumber.runtime.io.ZipThenFileResourceIteratorFactory.createIterator(ZipThenFileResourceIteratorFactory.java:23)
at cucumber.runtime.io.DelegatingResourceIteratorFactory.createIterator(DelegatingResourceIteratorFactory.java:49)
at cucumber.runtime.io.ClasspathResourceIterable.iterator(ClasspathResourceIterable.java:33)
at cucumber.runtime.io.ResourceLoaderClassFinder.getDescendants(ResourceLoaderClassFinder.java:22)
at cucumber.runtime.arquillian.lifecycle.CucumberLifecycle.cucumberAnnotations(CucumberLifecycle.java:129)
at cucumber.runtime.arquillian.backend.ArquillianBackend.readFromJava(ArquillianBackend.java:122)
at cucumber.runtime.arquillian.backend.ArquillianBackend.scan(ArquillianBackend.java:110)
at cucumber.runtime.arquillian.backend.ArquillianBackend.loadGlue(ArquillianBackend.java:80)
at cucumber.runtime.Runtime.(Runtime.java:91)
at cucumber.runtime.Runtime.(Runtime.java:69)
at cucumber.runtime.arquillian.ArquillianCucumber$CucumberRuntime.(ArquillianCucumber.java:467)
at cucumber.runtime.arquillian.ArquillianCucumber.performInternalCucumberOperations(ArquillianCucumber.java:149)
at cucumber.runtime.arquillian.ArquillianCucumber$InstanceControlledFrameworkMethod.invokeExplosively(ArquillianCucumber.java:449)
at org.jboss.arquillian.junit.Arquillian$6$1.invoke(Arquillian.java:270)
at org.jboss.arquillian.container.test.impl.execution.LocalTestExecuter.execute(LocalTestExecuter.java:60)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94)
at org.jboss.arquillian.core.impl.EventContextImpl.invokeObservers(EventContextImpl.java:99)
at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:81)
at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:135)
at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:115)
at org.jboss.arquillian.core.impl.EventImpl.fire(EventImpl.java:67)
at org.jboss.arquillian.container.test.impl.execution.ContainerTestExecuter.execute(ContainerTestExecuter.java:38)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94)
at org.jboss.arquillian.core.impl.EventContextImpl.invokeObservers(EventContextImpl.java:99)
at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:81)
at org.jboss.arquillian.test.impl.TestContextHandler.createTestContext(TestContextHandler.java:102)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94)
at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:88)
at org.jboss.arquillian.test.impl.TestContextHandler.createClassContext(TestContextHandler.java:84)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94)
at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:88)
at org.jboss.arquillian.test.impl.TestContextHandler.createSuiteContext(TestContextHandler.java:65)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94)
at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:88)
at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:135)
at org.jboss.arquillian.test.impl.EventTestRunnerAdaptor.test(EventTestRunnerAdaptor.java:111)
at org.jboss.arquillian.junit.Arquillian$6.evaluate(Arquillian.java:263)
at org.jboss.arquillian.junit.Arquillian$4.evaluate(Arquillian.java:226)
at org.jboss.arquillian.junit.Arquillian.multiExecute(Arquillian.java:314)
at org.jboss.arquillian.junit.Arquillian.access$100(Arquillian.java:46)
at org.jboss.arquillian.junit.Arquillian$5.evaluate(Arquillian.java:240)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
at cucumber.runtime.arquillian.ArquillianCucumber.runChild(ArquillianCucumber.java:122)
at cucumber.runtime.arquillian.ArquillianCucumber.runChild(ArquillianCucumber.java:71)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
at org.jboss.arquillian.junit.Arquillian$2.evaluate(Arquillian.java:185)
at org.jboss.arquillian.junit.Arquillian.multiExecute(Arquillian.java:314)
at org.jboss.arquillian.junit.Arquillian.access$100(Arquillian.java:46)
at org.jboss.arquillian.junit.Arquillian$3.evaluate(Arquillian.java:199)
at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
at org.jboss.arquillian.junit.Arquillian.run(Arquillian.java:147)
at org.junit.runner.JUnitCore.run(JUnitCore.java:160)
at org.junit.runner.JUnitCore.run(JUnitCore.java:138)
at org.jboss.arquillian.junit.container.JUnitTestRunner.execute(JUnitTestRunner.java:65)
at org.jboss.arquillian.protocol.servlet.runner.ServletTestRunner.executeTest(ServletTestRunner.java:160)
at org.jboss.arquillian.protocol.servlet.runner.ServletTestRunner.execute(ServletTestRunner.java:126)
at org.jboss.arquillian.protocol.servlet.runner.ServletTestRunner.doGet(ServletTestRunner.java:90)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:687)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85)
at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:61)
at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131)
at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:56)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:45)
at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:63)
at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:58)
at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:70)
at io.undertow.security.handlers.SecurityInitialHandler.handleRequest(SecurityInitialHandler.java:76)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:261)
at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:247)
at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:76)
at io.undertow.servlet.handlers.ServletInitialHandler$1$1.run(ServletInitialHandler.java:172)
at java.security.AccessController.doPrivileged(Native Method)
at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:169)
at io.undertow.server.Connectors.executeRootHandler(Connectors.java:197)
at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:759)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
// END OF STACK TRACE
My main test script is setup with the following annotations:
@RunWith(ArquillianCucumber.class)
@CucumberOptions(features = "src/features/BidRuleJobProcessor.feature", plugin = {"pretty", "html:target/cucumber-reports",
"junit:target/cucumber-reports/cucumber.xml"}, monochrome = true, strict = true, tags = "~@ignore")
So no glue classes at all, all the code is within the main cucumber test class.
My solution has been to make a modification to CukeSpace's CucumberLifecycle:
A static initialization block for CUCUMBER_ANNOTATIONS:
static {
CUCUMBER_ANNOTATIONS.addAll(
(Collection<? extends Class<? extends Annotation>>) Arrays.asList(Given.class, When.class, Then.class, And.class, But.class, Before.class, After.class));
}
Commenting out a clear of this same collection in the reset() method:
public void reset(final @observes AfterClass afterClass) {
System.setOut(ORIGINAL_OUT);
// CUCUMBER_ANNOTATIONS.clear();
TEST_ENRICHERS.clear();
RESOURCES_LOADERS = null;
}
So my question is: would there be another way to make it work, rather than forking the project to make this change?
Thx
The text was updated successfully, but these errors were encountered: