使用 WebServiceContext 测试 @Webservice EJB(使用 OpenEJB?)

2024-05-18

我有一些 EJB 作为 JAX-WS Web 服务:

@WebService
@Stateless
@Remote(MobileFacade.class)
public class MobileFacadeBean implements MobileFacade {
    ... 

   @Resource
   WebServiceContext wsc;

    ...
}

在此 Web Service 类中,通过 @Resource 注入 WebServiceContext。我使用此 WebServiceContext 来获取实现中的主体。这工作得很好,但现在我想知道如何(单元)测试这个类!

到目前为止,我正在使用 OpenEJB 来测试我的 EJB。由于 Web Service 类也是一个无状态会话 Bean,因此我真的很想在这里使用相同的方法。然而,它的工作并不那么容易——当然,它会抱怨当不作为 Web 服务调用时没有 WebServiceContext。

所以第一个问题是:有什么方法可以模拟OpenEJB中的WebServiceContext吗?

如果不是,您希望采用什么方法来测试这种 Web 服务类?

干杯, 坦率


有少数@WebServiceOpenEJB 示例 zip 文件中的单元测试示例。你想要的一切都应该工作正常。

  • 简单网络服务 http://svn.apache.org/repos/asf/openejb/tags/openejb-3.1.4/examples/simple-webservice/
  • 网络服务附件 http://svn.apache.org/repos/asf/openejb/tags/openejb-3.1.4/examples/webservice-attachments/
  • 网络服务安全 http://svn.apache.org/repos/asf/openejb/tags/openejb-3.1.4/examples/webservice-security/
  • webservice-ws-安全 http://svn.apache.org/repos/asf/openejb/tags/openejb-3.1.4/examples/webservice-ws-security/

webservice-security 示例听起来与您想要的完全一样。网上使用的版本@RolesAllowed让容器进行安全检查而不是在代码中进行,但可以在代码中检查原理。这是该示例的稍微修改后的版本,对我来说没有任何问题。

The bean

@DeclareRoles(value = {"Administrator"})
@Stateless
@WebService(
        portName = "CalculatorPort",
        serviceName = "CalculatorWsService",
        targetNamespace = "http://superbiz.org/wsdl",
        endpointInterface = "org.superbiz.calculator.CalculatorWs")
public class CalculatorImpl implements CalculatorWs, CalculatorRemote {

    @Resource
    private WebServiceContext webServiceContext;

    @RolesAllowed(value = {"Administrator"})
    public int sum(int add1, int add2) {
        // maybe log the principal or something -- prints "jane" in the test
        System.out.print(webServiceContext.getUserPrincipal());
        return add1 + add2;
    }

    @RolesAllowed(value = {"Administrator"})
    public int multiply(int mul1, int mul2) {
        return mul1 * mul2;
    }
}

The Test

public class CalculatorTest extends TestCase {

    private InitialContext initialContext;

    protected void setUp() throws Exception {
        Properties properties = new Properties();
        properties.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.client.LocalInitialContextFactory");
        properties.setProperty("openejb.embedded.remotable", "true");

        initialContext = new InitialContext(properties);
    }

    /**
     * Create a webservice client using wsdl url
     *
     * @throws Exception
     */
    public void testCalculatorViaWsInterface() throws Exception {
        URL url = new URL("http://127.0.0.1:4204/CalculatorImpl?wsdl");
        QName calcServiceQName = new QName("http://superbiz.org/wsdl", "CalculatorWsService");
        Service calcService = Service.create(url, calcServiceQName);
        assertNotNull(calcService);

        CalculatorWs calc = calcService.getPort(CalculatorWs.class);
        ((BindingProvider) calc).getRequestContext().put(BindingProvider.USERNAME_PROPERTY, "jane");
        ((BindingProvider) calc).getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, "waterfall");
        assertEquals(10, calc.sum(4, 6));
        assertEquals(12, calc.multiply(3, 4));
    }
}

图书馆

如果使用maven,请切换你的普通openejb-core依赖于openejb-cxf像这样。这会将 Apache CXF 和 OpenEJB/CXF 集成代码添加到您的类路径中。

<dependency>
  <groupId>org.apache.openejb</groupId>
  <artifactId>openejb-cxf</artifactId>
  <version>3.1.4</version>
  <scope>test</scope>
</dependency>

如果不使用 Maven,最简单的方法是添加来自lib/OpenEJB zip 文件的目录。

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

使用 WebServiceContext 测试 @Webservice EJB(使用 OpenEJB?) 的相关文章

随机推荐

  • 检测 AVAudioPlayer 中的播放结束

    我有几个短的 mp3 声音 我将它们存储在数组中 并希望连续播放它们 有什么方法可以检测 AVAudioPlayer 何时停止播放 以便我可以调用完成处理程序并播放下一个声音 我知道有一个委托 但我正在使用 Playground 和 SKS
  • 如何将行变成列?

    我有一个数据库 其中存储分组到项目中的关键字以及与每个关键字相关的数据 然后我显示每个项目的数据网格 每个关键字一行和几列 全部从同一个表 数据 中检索 我有 4 个表 关键字 项目 group keywords 和数据 keywords
  • 用于开始和/或包含搜索的最快字符串集合结构/算法是什么

    我有以下情况 我有一个大的字符串集合 比如说 250 000 平均长度可能是 30 我要做的就是在这些搜索中进行许多搜索 大多数搜索都是 StartsWith 和 Contains 类型的 该集合在运行时是静态的 这意味着选择的集合的初始读
  • 如何在ubuntu的conda环境中更改Rstudio中的R版本

    我在基本系统中安装了 R 4 3 和 Rstudio 在 conda 环境中安装了旧版本的 R 4 2 3 命令which R返回环境中安装的 R 的目录 home 用户 miniconda3 envs anndata2ri pip bin
  • Android上如何模拟后台Activity因内存不足而被系统杀死的过程?

    我正在处理 内存不足 不再有后台进程 问题 当这种情况发生时 我的活动处于后台并被杀死 我正在尝试保存并加载实例状态来解决它 但因为它并不是每次都会发生 在这种情况下我应该如何测试我的活动 Thanks 您可以通过 adb 强制进程终止 g
  • 使用 dpi 与 dp 缩放图像之间的差异

    我拥有所有由九个补丁位图组成的 dpi 可绘制目录 xxhdpi 和 xxxhdpi 是否必要 可绘制目录中的可绘制资源文件可检索所有缩放的位图 并且我使用可绘制资源文件 现在 我的问题是我还根据大小 小 正常等 创建了 缩放 布局目录 其
  • 如何在不创建安装程序的情况下安装 C# Windows 服务?

    有谁知道是否有一种方法可以安装用 C 创建的 Windows 服务而无需制作安装程序 我包括一个为我进行安装的课程 我使用命令行参数调用应用程序来安装或卸载应用程序 我过去还向用户提示是否要在直接从命令行启动时安装该服务 这是我使用的类 u
  • JSX 元素类型“Element[]”不是 JSX 元素的构造函数?

    types react 16 7 17 types react dom 16 0 11 打字稿 3 2 2 function ArryElement return div 1 div div 2 div function App retur
  • 如何根据服务器响应而不是HTTP 500触发 jquery.ajax() 错误回调?

    通过使用 jquery ajax 函数 我可以执行以下操作 ajax url url type GET async true dataType json data data success function data Handle serv
  • 来自 joda-time DateTimeFormatter 的模式字符串?

    是否可以从 joda time DateTimeFormatter 获取模式字符串 DateTimeFormatter formatter DateTimeFormat forPattern yyyyMMdd String original
  • 如何在 Symfony DateType 字段中设置日期范围?

    我需要在表单中的 dateType 字段的最小和最大日期上设置范围 我的代码在这里 public function buildForm FormBuilderInterface builder array options builder g
  • Angular JS 中的数组

    我是 Angular JS 新手 我正在将元素推送到数组中 然后想使用 ng repeat 在 html 中显示 scope groupedMedia Adding elements through a for loop scope gro
  • .Net 中是否有与 HTML 等效的 XmlReader?

    我用过Html敏捷包 http html agility pack net z codeplex过去在 Net 中解析 HTML 但我不喜欢它只使用 DOM 模型 在大型文档和 或具有大量嵌套的文档上 可能会遇到堆栈溢出或内存不足异常 另外
  • NextjS src 和默认外部图像 URL 的图像问题

    我正在使用最新版本的 NextJS 10 0 9 我有一个想要显示的图像 但是收到错误 Error Image with src https picsum photos 480 270 must use width and height p
  • 从 websocket 发送数据到 socket.io

    我使用 websocket 接口连接到 websocket 服务器 如果我想将通过 websocket 接口从 websocket 服务器接收到的数据发送到通过 http 服务器连接到我的客户端 我应该使用 socket io 吗 所以最后
  • Javascript - deepEqual 比较

    问题 来自 Eloquent Javascript 第二版 第 4 章 练习 4 编写一个函数 deepEqual 它接受两个值 并且仅当它们相等时才返回 true 是相同的值或具有相同属性的对象 其值也是 与对 deepEqual 的递归
  • 可以重复应用并产生相同结果的数据库操作吗?

    我现在一片空白 或者像有些人说的那样 正在经历一个高级时刻 我知道这个概念有一个正式的定义和名称 其中在数据库中运行的数据库操作 存储过程 如果重复运行将产生相同的结果 它属于数学家的自反 对称 传递等类型 您的意思是 确定性 吗 如果使用
  • 如何将 discord.py help 命令放入嵌入中?

    因此 我目前有一个使用 Discord py 运行的 Discord 机器人 正如您所知 discord py 带有自己的帮助命令 所以我不必自己制作 它非常有用 我将命令分为齿轮 类别 它确实有助于简化 因为现在我不必编写自己的帮助命令
  • 调用高阶组件时在 React 中访问类外部的 prop

    我正在尝试使用高阶组件 HOC 模式来重用一些连接到状态并使用 Redux Form formValueSelector 方法的代码 formValueSelector 需要一个引用表单名称的字符串 我想动态地设置它 并且每当我需要项目的值
  • 使用 WebServiceContext 测试 @Webservice EJB(使用 OpenEJB?)

    我有一些 EJB 作为 JAX WS Web 服务 WebService Stateless Remote MobileFacade class public class MobileFacadeBean implements Mobile