java - 无法处理 EJB 类的业务接口(interface)

标签 java maven-2 jboss-arquillian wildfly-10

在使用测试参数启动 maven 时,出现上述异常。在创建集成测试部署时,我得到以下信息:

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();
  }

}

接口(interface) 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);
}

注意:该接口(interface)位于另一个通过 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

maven 配置如下所示:

目标:干净的测试 -Parq-wildfly-managed JRE 虚拟机参数:-Djboss.home="myLocalWildflyDirectory"

JAVA_HOME 设置为 jdk8。

最后是我的 pom,特别是容器“arq-wildfly-managed”的部分:

...

        <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 的普通 Maven 构建(只是不包括测试)构建成功。

注意:对于这篇文章,我重命名了包以排除公司特化。

类似的错误建议更正 ShrinkWrap 部署,但我实际上包括了所有的包,甚至试图明确包括接口(interface)类。但是,同样的错误仍然存​​在。

这可能是什么原因造成的?

最佳答案

在测试中试试这个 (ShrinkWrap):

.addAsResource(new StringAsset("org.apache.deltaspike.ProjectStage=IntegrationTest"), "META-INF/apache-deltaspike.properties")

并将您的 Exclude 更改为:

@Exclude(exceptIfProjectStage = ProjectStage.IntegrationTest.class)

如果您需要排除其他阶段,请将它们添加到这个非常排除的语句中

关于java - 无法处理 EJB 类的业务接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36936176/

相关文章:

java - 在 Java 中使用 Integer 作为 HashMap 的键

java - Maven Central Repository 中是否可能缺少 jar?

maven-2 - 带有依赖项的 jar Maven 程序集

java - maven 中的 wsdlDirectory 设置应该有效吗?

java - 在 arquillian 测试中使用 shrinkWrap 在部署 jar 中添加包

java - JBoss Forge 生成的 REST 端点返回 NULL 实体

Java 和 Selenium 显示 Google 搜索结果的最佳方式

java - 确定项目实际需要哪些 jar

java - java中没有分配的字符串连接

Hibernate SchemaExport 无法首先创建架构