WebLogic上的SOAP原子事务调用找不到事务协调器



简介
我正在尝试测试原子事务中WebCenter Content SOAP Services(GenericSOAP)的行为。
已安装的产品包括(来自 Oracle 页面上提供的安装,版本:12.2.1.3.0):

  • 网络逻辑
  • 网络中心内容

SOAP 客户端是部署在 WebLogic 上的简单 Web 应用程序,包括:

  • HTML 页面,只有一个调用 servlet 的链接
  • 调用服务类的 servlet
  • 具有 SOAP 客户端的服务类

问题的
简短描述 在原子事务中调用 GenericSOAP 时,出现错误:

Error while invoking endpoint http://<host>:7001/wls-wsat/RegistrationPortTypeRPC from client

注意:<host>是主机的实际IP地址,我只是在上面和下面的日志中手动将其替换为单词<host>。

更多细节
安装 WebLogic 和 WebCenter Content 后,通过使用企业管理器,我修改了 GenericSOAP Web 服务上的策略:

  • 删除了"甲骨文/wsmtom_policy">
  • 添加了"oracle/no_mtom_policy"(作为匿名用户工作的 SOAP 调用)
  • 添加了"oracle/wss_username_token_service_policy"用于简单的身份验证测试(用户工作时的 SOAP 调用)
  • 为原子事务添加了"oracle/atomic_transaction_policy"(SOAP 调用的工作原理取决于客户端配置)

如果我进行任何修改的 SOAP 调用以启用事务调用(与用于测试"oracle/wss_username_token_service_policy"的调用相同),则 SOAP 调用有效。
如果我使用以下注释将客户端注册为事务性

@weblogic.wsee.wstx.wsat.Transactional(
version = weblogic.wsee.wstx.wsat.Transactional.Version.DEFAULT,
value = weblogic.wsee.wstx.wsat.Transactional.TransactionFlowType.SUPPORTS
)

SOAP 调用不起作用,我收到此问题开头所述的错误。
通过删除上述注释,SOAP 调用将再次工作。通过重新添加它,SOAP 调用不起作用。

记录 SOAP 请求/响应时,请求中有具有上述地址的 CoordinationContext。

UCM_server1诊断.log的日志为:

[UCM_server1] [NOTIFICATION] [] [oracle.wsm.security.policy.scenario.util.ScenarioUtils] [tid: [ACTIVE].ExecuteThread: '9' for queue: 'weblogic.kernel.Default (self-tuning)'] [userId: <anonymous>] [ecid: e2b32686-5fe2-49d6-bdb4-1238c80399ad-00004c16,0:2] [APP: Oracle UCM Web Services] [partition-name: DOMAIN] [tenant-name: GLOBAL] [J2EE_APP.name: Oracle UCM Web Services] [J2EE_MODULE.name: idcws.war] [WEBSERVICE.name: GenericSoapService] [WEBSERVICE_PORT.name: GenericSoapPort] [oracle.wsm.policy.name: oracle/wss_username_token_service_policy] User name from authenticated subject: ranko
[UCM_server1] [ERROR] [] [] [tid: [ACTIVE].ExecuteThread: '9' for queue: 'weblogic.kernel.Default (self-tuning)'] [userId: <anonymous>] [ecid: e2b32686-5fe2-49d6-bdb4-1238c80399ad-00004c16,0:2] [APP: Oracle UCM Web Services] [partition-name: DOMAIN] [tenant-name: GLOBAL] [J2EE_APP.name: Oracle UCM Web Services] [J2EE_MODULE.name: idcws.war] [WEBSERVICE.name: GenericSoapService] [WEBSERVICE_PORT.name: GenericSoapPort] Error while invoking endpoint http://<host>:7001/wls-wsat/RegistrationPortTypeRPC from client; ServiceName: {http://schemas.xmlsoap.org/ws/2004/10/wscoor}RegistrationService_V10 ; PortName: {http://schemas.xmlsoap.org/ws/2004/10/wscoor}RegistrationCoordinatorPortTypePort ; Client side features: [weblogic.jws.jaxws.client.ClientIdentityFeature][com.sun.xml.ws.developer.MemberSubmissionAddressingFeature][com.sun.xml.ws.api.addressing.OneWayFeature]; Client side policies: 
[UCM_server1] [ERROR] [] [oracle.webservices.service] [tid: [ACTIVE].ExecuteThread: '9' for queue: 'weblogic.kernel.Default (self-tuning)'] [userId: <anonymous>] [ecid: e2b32686-5fe2-49d6-bdb4-1238c80399ad-00004c16,0:2] [APP: Oracle UCM Web Services] [partition-name: DOMAIN] [tenant-name: GLOBAL] An error occurred for port: {urn:GenericSoap}GenericSoapPort: oracle.fabric.common.PolicyEnforcementException: The server sent HTTP status code 404: Not Found.

为了使调用尽可能简单,我调用"DOC_INFO_BY_NAME",因为它只需要一个参数并且可以作为匿名用户执行。

来自其他研究:

  • 尝试向事务协调器注册服务时似乎失败
  • 不需要
  • 安装SOA就可以让ws-xt工作,WebLogic就足够了。
  • 在 JTA 中可以配置 WebLogic 控制台协调器部分,但只有我想保护交换的消息的部分。我不需要用于测试目的。据我所知,没有"启用/禁用"协调器、端口号等。
  • 按照文档(通过 WebLogic 控制台)中所述为事务配置 SOAP 终结点不起作用。泛型 SOAP 服务/端点在那里不公开/可见。
  • 在企业管理器中配置通用 SOAP 端点具有以下值(开箱即用):
    • 原子事务流选项:支持
    • 原子事务版本:默认

它看起来像一个"简单案例",其中协调器不起作用,应该打开/安装,但是,从我设法找到的内容来看,它应该在"普通"WebLogic上开箱即用/开箱即用。

感谢您的时间和亲切的问候,
兰科

Weblogic 12c 需要手动启用 WS-AT,因为默认情况下禁用:

readDomain('domain')
create('ofs','OptionalFeatureDeployment')
cd('OptionalFeatureDeployment/ofs')
create('WSAT', 'OptionalFeature') cd('OptionalFeature/WSAT')
set('Enabled',true)  
updateDomain()
closeDomain()
exit()

有关详细信息,请参阅: 看: https://docs.oracle.com/en/middleware/fusion-middleware/weblogic-server/12.2.1.4/wsget/jax-ws-atomictransaction.html#GUID-25C8E673-73A2-4596-8291-A7C351B5BB33

最新更新