При запуске maven с параметрами теста я получаю вышеупомянутое исключение. При создании развертывания тестовой интеграции, я получаю следующее:Не удалось обработать бизнес-интерфейсы для класса EJB
org.jboss.as.server.deployment.DeploymentUnitProcessingException: WFLYEJB0466: Failed to process business interfaces for EJB class class ..contract.ContractMockService
относительно класса выглядит следующим образом:
package ..integration.bestand.contract;
import java.time.LocalDate;
import java.util.ArrayList;
import javax.ejb.Local;
import javax.ejb.Stateless;
import org.apache.deltaspike.core.api.exclude.Exclude;
import org.apache.deltaspike.core.api.projectstage.ProjectStage;
...
@Exclude(ifProjectStage = {
ProjectStage.Production.class,
ProjectStage.Staging.class,
..Integration.class,
..Qs.class,
..PatchQs.class
})
@Stateless
@Local(IContractIntService.class)
public class ContractMockService implements IContractIntService {
...
return ContractBuilder.build();
}
}
Интерфейс IContractIntService
выглядит следующим образом:
package ..integration.bestand.contract;
import javax.ejb.Local;
...
@Local
public interface IContractIntService {
public enum State {
SUCCESS,
UNKNOWN_ERROR,
NOT_FOUND;
// TODO: Stati für Fehler hier definieren
}
//Interface comment
Result<State, ContractDTO> retrieveContract(String contractIdentifier);
}
Примечание: Интерфейс находится в другом проекте, который включен через maven.
Тест выглядит следующим образом:
package ..api.contractregistration.service;
import static org.hamcrest.CoreMatchers.any;
import static org.hamcrest.MatcherAssert.assertThat;
import java.util.logging.Logger;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.asset.EmptyAsset;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.junit.Rule;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.junit.rules.TestWatcher;
import org.junit.runner.RunWith;
import ..core.test.IntegrationTest;
@RunWith(Arquillian.class)
@Category(IntegrationTest.class)
public class ContractRegistrationIntegrationTest {
protected final Logger log = Logger.getLogger(ContractRegistrationIntegrationTest.class.getCanonicalName());
@Rule
public TestWatcher watcher = new TestWatcher() {
@Override
protected void starting(org.junit.runner.Description description) {
log.info(String.format("---> Starting test: %s", description));
}
@Override
protected void failed(Throwable e, org.junit.runner.Description description) {
log.info(String.format("<--- Test failed: %s", description));
}
@Override
protected void succeeded(org.junit.runner.Description description) {
log.info(String.format("<--- Test succeeded: %s", description));
}
};
@Deployment
public static WebArchive createDeployment() {
WebArchive result = ShrinkWrap.create(WebArchive.class)
.addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml")
.addAsResource("META-INF/persistence.xml", "META-INF/persistence.xml")
.addPackages(true, "..ejb.portal")
.addPackages(true, "..core")
.deletePackages(true, "..core.config.deltaspike")
.addPackages(true, "..integration")
.addPackages(true, "..api")
.addPackages(true, "org.apache.deltaspike.core")
.addPackages(true, "..ejb.util");
System.out.println("########## TEST DEPLOYMENT########" + result.toString(true));
return result;
}
@Test
public void test() {
String tempPw = "bla"; // result.getDto();
assertThat(tempPw, any(String.class));
}
}
Замечательная вещь об этом тесте, что я даже не использовать что-либо из MockService
внутри теста.
The Maven выглядит следующим образом:
Цели: clean test -Parq-wildfly-managed
JRE VM Аргументы: -Djboss.home="myLocalWildflyDirectory"
JAVA_HOME
установлен в jdk8.
Последняя вещь мой ПОМ, в частности, часть контейнера «АЗП-wildfly-управляемый»:
...
<profile>
<!-- An optional Arquillian testing profile that executes tests in your WildFly instance, e.g. for build server -->
<!-- This profile will start a new WildFly instance, and execute the test, shutting it down when done -->
<!-- Run with: mvn clean test -Parq-wildfly-managed -->
<id>arq-wildfly-managed</id>
<dependencies>
<dependency>
<groupId>org.wildfly.arquillian</groupId>
<artifactId>wildfly-arquillian-container-managed</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>de.ivi.torino</groupId>
<artifactId>torino-integration-bestand-mock-ejb</artifactId>
<version>1.0.0-SNAPSHOT</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>de.ivi.torino</groupId>
<artifactId>torino-integration-docservice-mock-ejb</artifactId>
<version>1.0.0-SNAPSHOT</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>de.ivi.torino</groupId>
<artifactId>torino-integration-bestand-api</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
</dependencies>
</profile>
...
Нормальный специалист строить с clean verify package install
(только ни один тест не входит в комплект) строит успешно.
Примечание: для этого сообщения я переименовал пакеты, чтобы исключить специализации компании.
Подобные ошибки предполагают исправление развертывания ShrinkWrap, но я включил практически все пакеты и даже попытался явно включить интерфейс-класс. Но тем не менее такая же ошибка сохраняется.
Что может быть причиной этого?
Возможно, вы неправильно поняли жизненный цикл maven. Если вы вызываете maven через 'mvn clean check package install', чем несколько вещей работают двойными или тройными. То, что вам просто нужно: 'mvn clean install' или' mvn clean verify'..Recommend читать https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html – khmarbaise
@khmarbaise спасибо за ваше предложение. Я могу ясно сказать, что я не эксперт с maven. Раньше я использовал ваши упомянутые сценарии запуска, и они работали, но мой вопрос не был нацелен на рабочие сборки. Строка 'test' выдает вышеупомянутую ошибку и оставляет меня бессвязным ... – EngJon
Возможно, ваш IContractService не может быть загружен из-за отсутствия зависимостей. Вы можете проверить свой журнал под категорией org.jboss.weld.Bootstrap на уровне INFO, чтобы убедиться, что все ваши определения beans правильно зарегистрированы. – Franck