Arquillian:添加 beans.xml 会导致“ArquillianServletRunner 未找到”

2024-01-09

我正在使用 Arquillian[1] 在 Eclipse[2]-IDE 内的嵌入式 glassfish 环境中测试我的 J2EE-App。

package test.java;

import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.shrinkwrap.api.ArchivePaths;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.asset.EmptyAsset;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;

@RunWith(Arquillian.class)
public class ArquillianTest {

    @Deployment
    public static WebArchive createDeployment() {
        return ShrinkWrap.create(WebArchive.class).addAsWebInfResource(EmptyAsset.INSTANCE,
            ArchivePaths.create("beans.xml"));
    }

    @Test
    public void test() {
        Assert.assertNull(null);
    }
}

测试执行正常,直到我添加显示的指令“.addAsWebInfResource(...)”。执行此操作时,会引发以下异常:

java.lang.IllegalArgumentException: ArquillianServletRunner not found. Could not determine ContextRoot from ProtocolMetadata, please contact DeployableContainer developer.
at org.jboss.arquillian.protocol.servlet.ServletUtil.determineBaseURI(ServletUtil.java:64)
at org.jboss.arquillian.protocol.servlet.ServletURIHandler.locateTestServlet(ServletURIHandler.java:60)
at org.jboss.arquillian.protocol.servlet.ServletMethodExecutor.invoke(ServletMethodExecutor.java:77)
at org.jboss.arquillian.container.test.impl.execution.RemoteTestExecuter.execute(RemoteTestExecuter.java:120)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
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.ClientTestExecuter.execute(ClientTestExecuter.java:57)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
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.container.test.impl.client.ContainerEventController.createContext(ContainerEventController.java:142)
at org.jboss.arquillian.container.test.impl.client.ContainerEventController.createTestContext(ContainerEventController.java:129)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
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.createTestContext(TestContextHandler.java:89)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
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:75)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
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:60)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
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:263)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
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:300)
at org.jboss.arquillian.junit.Arquillian.run(Arquillian.java:147)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

当然,如果没有 beans.xml,CDI 就无法工作。

我怎样才能避免这个异常?

我已将 pom.xml 上传到http://pastxt.com/P/7IT1VYWBUW http://pastxt.com/P/7IT1VYWBUW

环境:jdk1.7.0_02/Win7/Eclipse Juno SR1

[1] https://www.jboss.org/arquillian.html https://www.jboss.org/arquillian.html

[2] http://www.eclipse.org/ http://www.eclipse.org/


我已经查看了您的 POM 和测试。该问题似乎与玻璃鱼-16964 http://java.net/jira/browse/GLASSFISH-16964,查看以下日志条目:

SLF4J: The requested version 1.5.10 by your slf4j binding is not compatible with [1.6]
SLF4J: See http://www.slf4j.org/codes.html#version_mismatch for further details.
Dec 07, 2012 2:09:59 PM org.glassfish.api.ActionReport failure
SEVERE: Exception while loading the app
Dec 07, 2012 2:09:59 PM org.glassfish.deployment.admin.DeployCommand execute
SEVERE: Exception while loading the app : org.slf4j.spi.LocationAwareLogger.log(Lorg/slf4j/Marker;Ljava/lang/String;ILjava/lang/String;Ljava/lang/Throwable;)V

您的项目中有一些依赖项,需要引入 v1.6.1slf4j-api。这似乎与嵌入式 GlassFish 的要求相冲突 - 我相信它是1.5.10查看嵌入式 GlassFish 的日志。

要解决此特定问题,请降级到让 GlassFish 满意的版本。我将较低版本添加为托管依赖项。

<dependencyManagement>
    <dependencies>
      ....
      <dependency>
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-api</artifactId>
          <version>1.5.10</version>
          <scope>test</scope>
      </dependency>
    </dependencies>
</dependencies>

当然,这可能会对依赖于新版本 slf4-api 的其他库产生影响,因此您必须注意其他问题。

解决此问题的最佳方法是使用远程或托管 GlassFish Arquillian 适配器。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Arquillian:添加 beans.xml 会导致“ArquillianServletRunner 未找到” 的相关文章

随机推荐

  • 如何在不使用扩展器的情况下将 WPF 工具栏绑定到我的 VM 中的集合

    我有一个 WPF 窗口 其中有ToolBar 我的虚拟机中有一组要绑定的对象 它们显示为按钮 但总是被推到扩展的下拉部分ToolBar 如何使这些按钮出现在标准部分ToolBar 我有以下 XAML
  • C# 从邮件附件中获取文件名

    我有一个简单的 C 应用程序 用于发送 SMTP 电子邮件 使用 System Net Mail 类 发送 通过电子邮件发送 MailMessage 对象后 我想遍历附件列表并删除与这些附件关联的原始文件 但是我很难找到与每个附件关联的完整
  • Flutter Web 应用程序在部署到 Firebase 托管后返回空白页面

    我已成功将我的 flutter Web 应用程序部署到 Firebase 托管 但是 当我访问链接时返回空白页面 这是我的 firebase json database rules database rules json firestore
  • Flutter:如何避免 ListView 动态滚动(或改变其物理特性)

    我有一个ListView https api flutter dev flutter widgets ListView class html小部件 我想允许它基于某些逻辑可滚动或不可滚动 NeverScrollable滚动物理 https
  • 对向量进行排序 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 当对递增时 如何按降序对向量对进行排序
  • 如何对包装字符串的枚举变体进行模式匹配? [复制]

    这个问题在这里已经有答案了 我有一个枚举 enum T A String 我想匹配此枚举的变量 但此代码不起作用 match t T A a gt println a T A b gt println b gt println someth
  • 角度材质 (8) S2591:找不到名称“require”

    我正在尝试将日期 时间记录到 javascript 控制台中 我收到的错误消息如下 是由下面的代码生成的 ETA 该代码确实有效 日期将发送到控制台 仅保留错误消息 Message src app kdc services customer
  • Dockerfile 生产/构建/调试/测试环境

    假设您有 Web 应用程序和一些工作流程执行器 http server 提供预构建资产文件 生产 构建器 从源代码编译 捆绑 js css html 部署 开发 调试器 构建器 动态地从源构建 添加 js 源映射 开发 selenium 运
  • SWIFT:如何加载本地图像远程 HTML

    目前我正在开发适用于 Android 和 iOS 的应用程序 这是一个简单的 webView 正在调用远程 URL 这工作得很好 但现在我在弄清楚如何拦截图像的加载方面遇到了问题 我正在努力实现以下目标 加载远程URL 拦截加载并检查图像
  • 反应式异常处理

    如何使用一个Mono error
  • 有哪些独立开发人员编程方法? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 我可以在 Clojure 记录中创建可变状态吗?

    我正在考虑使用 Clojure 记录来映射到程序中不断变化的实体 它们是可变的吗 或者您是否需要在记录中使用额外的参考 我对此有点困惑 非常值得一看Rich Hickey 关于身份和状态的精彩视频 http www infoq com pr
  • 返回的日期格式为 mm/dd/yyyy hh:mm:ss AM/PM

    我对 sql 是个新手 我的公司只是让我很投入并说去做 因此 非常感谢任何帮助 我试图以 mm dd yyyy hh mm ss AM PM 的格式获取日期 例如 09 26 2014 11 04 54 AM 的日期 我尝试过使用代码 Se
  • 将此 pdf 保存在 ionic 上的缓存/本地存储中

    哈给大家 我按照本教程使用 pdfmake 生成的 pdf 创建模式视图 http gonehybrid com how to create and display a pdf file in your ionic app http gon
  • PHP 搜索多维数组中的值并获取相应的元素值[重复]

    这个问题在这里已经有答案了 我正在使用 PHP 我有一个多维数组 我需要搜索它以查看 键 的值是否存在 如果存在 则获取 字段 的值 这是我的数组 Array 0 gt Array key gt 31 field gt CONSTRUCTN
  • Owlready2动态类生成

    我正在尝试为 owlready2 本体动态创建一个类 文档建议使用以下代码行 NewClass types new class NewClassName SuperClass kwds namespace my ontology 就我而言
  • Laravel 4 - 读取配置文件

    如何从 laravel 读取配置文件 例如数据库连接 app config database php 我想要来自配置的 mysql 数据 对于一个包 你可以这样做 return Config get package group option
  • 如何防止GDB单步执行每一个函数

    我的 GDB 调试器会自动进入大多数函数 特别是我的外部库 标准库 这很烦人 因为我知道这些库比我的代码写得更好 如何才能阻止 GDB 这样做呢 有两种方法可以得到你想要的东西 一是使用next而不是step step将进入函数调用 但是n
  • Three.js计算充满屏幕所需的物体距离

    我见过很多关于如何缩放相机以使物体充满屏幕的问题 但我正在尝试移动物体以充满屏幕 我一直在尝试使用原始照片像素大小进行类似的操作 并且这些对象已缩放 var dist object originalSize height gt window
  • Arquillian:添加 beans.xml 会导致“ArquillianServletRunner 未找到”

    我正在使用 Arquillian 1 在 Eclipse 2 IDE 内的嵌入式 glassfish 环境中测试我的 J2EE App package test java import org jboss arquillian contai