JBoss 4.2.2 Web服务soap:地址

2024-01-30

我在 JBoss 4.2.2 中部署了一个 EJB3 bean 作为 Web 服务。在生产中,服务器位于 Apache 服务器后面,该服务器将请求重定向到 Jboss 服务器。这使得 WSDL 具有错误的soap:address 位置。我能够通过 server\default\deploy\jbossws.sar\jbossws.beans\META-INF 中的配置文件更改端口和主机名,但我无法将协议切换为 https 。

我发现的唯一方法是指定我自己的 WSDL(通过here https://stackoverflow.com/questions/1380355/javax-jws-webservice-wsdllocation-with-jboss-4-2-2/1380499#1380499)。通过在 WSDL 中指定 https,JBoss 会识别出它是 https。然而,尽管这在生产中很好,但在 QA 中不使用 https(并且连接到它的服务需要有效的 https,因此自签名证书不行)。因此,虽然我可以获得真正的 QA 证书(假证书颁发机构不会这样做),但我宁愿在 QA 中使用 http。有没有办法强制 JBoss 更改协议或以其他方式更改地址,以便它在soap:address 中使用http?

编辑:这个问题似乎是最近在他们的错误数据库 https://jira.jboss.org/jira/browse/JBPAPP-2605并被拒绝。这对我来说意味着他们有解决办法。但它是什么?

进一步编辑:此时,我知道 EJB3 拦截器不起作用(它们根本没有被激活 https://jira.jboss.org/jira/browse/EJBTHREE-1206)并且 SOAPHandler 不会拦截检索 WSDL 的调用(经过测试 - 它们会获取其他所有内容)。所以过滤器的想法很有趣,但还不清楚把它放在哪里。

JBoss 显示的 URL 是:

端点名称 jboss.ws:context=QuickBooks-QuickBooksWebService,endpoint=QBWSBeanEJB 端点地址https://127.0.0.1:8443/QuickBooks-QuickBooksWebService/QBWSBeanEJB?wsdl https://127.0.0.1:8443/QuickBooks-QuickBooksWebService/QBWSBeanEJB?wsdl

(请注意,这是当我使用自定义 WSDL 强制 https 但 JBoss 配置为重写它时)。

我使用的 JBossWS 版本是与 4.2.2 捆绑在一起的,根据this http://anonsvn.jboss.org/repos/jbossas/tags/JBoss_4_2_2_GA/build/docs/readme.html是 2.0.1

编辑:关于重写 http://www.jboss.org/community/wiki/JBossWS-UserGuide#Address_rewrite,这确实是尝试过的。这是我发现的。我可以让它重写主机(或不根据需要)和端口,但仅限于可识别的协议。因此,为了让它发出 https,我必须将 bean 的传输保证配置为 CONFIDENTIAL,并在 JBoss 服务器上启用 https,然后所有请求都重定向到 JBoss 内的 https。我没有测试这是否适用于 mod_jk(如果需要 CONFIDENTIAL,AJP 协议是否仍然有效,如果请求通过 AJP 发送,WSDL 是否会获得正确的协议?我没有测试它),但是这样做具有相同的最终效果 - 请求必须通过 https 进行。没有办法让请求通过 http 或 AJP 传入,然后让它以 https 的形式发出soap:address,专门针对每个服务器进行配置(在 QA 和开发中,http,但在生产 https 中,即使ssl 已被 Apache 终止)。使用自定义 WSDL 让我更接近了,因为请求是通过 HTTP 传入的,但soap:address 显示的是 https。非常适合生产(使用重写功能将端口推送到 443 而不是 8443),但对于 QA 来说毫无用处(我不关心开发,因为开发版本可能不同,如果需要的话可以创建不同的 jar,但我'如果我可以避免的话,我对 QA 和生产具有不同的构建流程感到不舒服)。


为什么不在您的 Web 应用程序上设置一个 servlet 过滤器来监视 WSDL 请求并重写soap:address在响应中使用其配置中的值?然后您可以根据需要进行设置。

我同意,这可能不是最优雅的解决方案:-) - 但那样的话,JBoss 中的可配置性就可以了,不是吗?如果 JBoss 最终引入了此功能,您只需删除过滤器即可。

Update:典型的 JBoss EAR 具有以下结构:



myapp.ear
|+ META-INF
   |+ applications.xml and jboss-app.xml
|+ myapp.war
   |+ web pages and JSP /JSF pages
   |+ WEB-INF
      |+ web.xml, jboss-web.xml, faces-config.xml etc.
      |+ lib
         |+ tag library JARs
      |+ classes
         |+ servlets and other classes used by web pages
|+ myapp.jar
   |+ EJB3 bean classes
   |+ META-INF
      |+ ejb-jar.xml and persistence.xml
|+ lib
   |+ Library JARs for the EAR
  

您能否确认您部署的 EAR 具有这种结构?如果不是,有什么不同?

更新#2:JBoss自动生成一个web.xml对于 EJB3 bean,它们位于正在部署的 EAR 内的 JAR 中。这web.xml绝对是硬编码的(即不使用可以调整的 XML 文件作为基础),因此更改它以包含过滤器是很尴尬的(尽管并非不可能)(您基本上需要更改中的各种内容)jboss-beans.xml指向你自己的web.xml生成器,它可以做任何你想做的事情)。如果 EJB3 bean 位于 WAR 文件中,那么开发工作就会少很多 - 那么您可以使用 WAR 的常规方式配置过滤器web.xml,您大概可以控制。但是,如果您使用的是第三方 JAR,这可能会出现问题,也可能不会。在不了解细节的情况下,很难看出哪种方法是最好的。


问题作者的编辑:

感谢大家的努力。这似乎是基本方法 - 拦截并更改 WSDL。如果你不能让你的webservice成为一个在战争中分配的POJO,你可以在其中使用servlet过滤器,那么你可以创建一个代理请求的servlet,并这样做。这就是我的解决方案 https://stackoverflow.com/questions/1369624/jboss-4-2-2-web-service-soapaddress/1408167#1408167.

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

JBoss 4.2.2 Web服务soap:地址 的相关文章

随机推荐

  • Angular 2 双向数据绑定不起作用

    我在 Angular 2 中获取自定义双向数据绑定时遇到问题 文档表明盒子模型中的香蕉 只是语法糖 但是在我的示例中 这种方式不起作用 而且时间更长方法的工作原理
  • ggplot 中轴/变量标签的键值映射

    我经常使用具有 R 友好 程序员友好 列名称的数据框 通常没有空格和 或缩写 在进行分析时懒于输入全名 例如 ir lt data frame sp iris Species sep len iris Sepal Length sep wi
  • Long 不能取消引用

    我几乎做了一切来解决 长不能取消引用 这个恼人的问题 但一切都解决了 因此 有人可以帮助我吗 问题是当我检查程序是否超时时if System currentTimeMillis longValue finish 比较不起作用 public
  • Sql ServerPreparedStatement为SQL“in(?)”子句设置参数

    我有一个sql看起来像这样 SELECT FROM T TABLE WHERE ID IN 我想设置参数IN via PrepareStatement 我认为所需的方法如下所示 prepareStatement setList 1 Arra
  • 为什么不是 scanf("%*[^\n]\n");和 scanf("%*[^\n]%*c");清除悬挂的换行符?

    拨打电话后scanf d variable 我们留下了一个换行符挂在stdin 应在调用之前清除fgets 或者我们最终给它提供一个换行符并使其过早返回 我找到了建议使用的答案scanf n c 第一次致电后scanf放弃换行符和其他建议使
  • oracle查询比较表中具有相同id的所有行

    需要一个 sql 查询来生成具有相同 id 的状态为完整的记录 例如 mytable是包含各种记录的表名 我们需要找到同一 ID 的所有状态为完整的 ID id status 12 complete 12 required 12 activ
  • Google 网站管理员工具 API:通过 OAUTH2 下载查询

    我正在尝试使用 Google 的网站管理员工具 API 下载最近搜索查询的 CSV 文件 我知道如何使用他们的 Python 示例来做到这一点http googlewebmastercentral blogspot com 2011 12
  • 如何向 .DecimalPad iOS 键盘添加减号?

    如何向 DecimalPad 类型 iOS 键盘添加减号 就像下面链接中的应用程序一样 如果我错了 请纠正我 但这对我来说似乎不是一个自定义键盘 它看起来像是苹果公司的默认十进制键盘 带减号的十进制键盘 https i stack imgu
  • Apache 基准 HTTPS 失败

    我在 Ubuntu 虚拟机中使用 Apache 2 4 2 我用它来加载测试 将请求发送到某个 HTTPS url 失败的请求数为零 但我的请求都无法真正得到处理 已经在数据库中查找 使用相同的url 通过浏览器调用它就可以了 数据库已更新
  • Python 中按年月分组并删除所有 NaN 的列

    基于来自的输出数据帧这个链接 https stackoverflow com questions 69937232 groupby year month and find top n smallest values columns in p
  • 原子属性的 setter 和 getter

    对于以下属性值 自动生成的 getter 和 setter 是什么样的 in h interface MyClass NSObject private NSString value property retain NSString valu
  • Qt/C++ 如何迭代给定类对象的 QMetaObject 属性/数据类型?

    在 C Java 中 我使用反射来读取类的属性 我尝试过使用 Qt 但不知道是否能正确解决我的问题 一个简单的 Person 类头 注意 3 个属性 id fname lname ifndef PERSON H define PERSON
  • 我可以创建私有枚举构造函数吗?

    在 Haskell 中我可以做这样的事情 示例改编自学习 Haskell http learnyouahaskell com making our own types and typeclasses algebraic data types
  • Angular - 顺序进行多个 HTTP 调用

    我需要创建一个函数来顺序进行 HTTP 调用 以便使用一个调用的响应到另一个调用 例如从第一次调用中获取用户的 IP 地址 并使用该 IP 在第二次调用中注册用户 演示代码 registerUser user User this utili
  • 如何配置 Sublime Text 在保存时始终转换为 Unix 行结尾?

    我希望我在 Sublime Text 中保存的所有文件都采用 Unix 行结束格式 即使我打开最初以不同格式保存但后来在 Sublime Text 中编辑的文件也是如此 简单设定 default line ending unix 还不够 因
  • Django INSTALLED_APPS 'polls' 与 'polls.apps.PollsConfig'

    在每个 YouTube 教程中 我都看到人们只是将 app name 添加到 INSTALLED APPS 列表中 昨天我开始了官方 Django 教程 他们建议使用 app name apps App nameConf 符号 我猜官方方法
  • 理解java的同步集合

    我正在阅读java官方doc https docs oracle com javase tutorial collections implementations wrapper html关于包装器实现 它们是静态方法收藏用于获取同步集合 例
  • 数字签名时间戳在 XP/Vista 上“不可用”,导致验证失败

    背景 我有一个 WiX Burn 安装包 其中包括安装 ReportViewer 2012 Runtime 在 Windows 7 或更高版本的计算机上运行时 它工作正常 在 XP SP3 或 Vista SP1 上它会失败 现在 检查Re
  • 使用mysqldump将表数据导出到csv文件

    我想使用 mysqldump 将表数据导出到 csv 文件中 我想做一些类似的东西 mysqldump compact no create info tab testing fields enclosed by fields termina
  • JBoss 4.2.2 Web服务soap:地址

    我在 JBoss 4 2 2 中部署了一个 EJB3 bean 作为 Web 服务 在生产中 服务器位于 Apache 服务器后面 该服务器将请求重定向到 Jboss 服务器 这使得 WSDL 具有错误的soap address 位置 我能