SOAP接收器通道模块链中的AxInvokerBean和MessageTransformBean

2020-09-10 08:30发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)晚上好。 我正在努力完成以下任务...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


晚上好。 我正在努力完成以下任务,希望能对此提供帮助。

设置为Proxy-> SOAP,问题出在SOAP接收器通道的模块链中。

我必须满足我需要使用的外部WebService的安全性要求。 在我的方案中,我已经配置了以下步骤:

1。 在上一个调用中(使用X.509证书对请求进行签名)从另一个服务中获取SAML安全令牌,并将其保存在ABAP后端中。

2。 将此安全令牌和请求数据一起从ABAP发送到PO。

3。 在PO中,首先在ICO的"接口确定"部分中执行XSLT映射,以创建SOAP头并将安全令牌放入该头中。 (并绘制一些其他内容,在这里并不重要。)

4。 然后,将其传递到选中了"不使用SOAP信封"的SOAP接收器通道。

我配置了以下模块链:

modules.jpg

parameters.jpg

我需要AxInvokerBean调用WSAllSender来添加时间戳,并使用密钥库中的证书对时间戳和正文进行签名。 这很好。

然后有效载荷如下:

信封

-标头

--安全性

---签名

---时间戳

--SAML令牌

-身体

但是我需要这个:

信封

-标头

--安全性

---SAML令牌

---签名

---时间戳

-身体

换句话说:我必须将SAML令牌放入"安全性"节点内。 为此,我创建了一个小的XSLT映射,并使用MessageTransformBean对其进行了调用:

 <?xml version =" 1.0" encoding =" UTF-8"?>
 
 
 
 
 
 
 

 

 
 
 
 
 
 

 
 

(我删除了所有名称空间声明,以使其更易于阅读,但在现实生活中,它们在那里)。 在开发过程中,我使用AxInvokerBean和LogHandler在每个模块调用之前保存有效负载。

此映射是我需要调用此WebService的最后一步。 如果我将AxInvoker产生的有效负载放入Eclipse的xslt中,它将产生我想要的内容。 这不是xslt问题。

最后是我的问题:

在此模块链中,xslt根本不执行任何操作,有效负载在调用之前和之后看起来相同(某些空格除外)。 我在xpi_inspector中可以看到已找到并调用了该转换,并且该转换已"成功执行",但是它什么也没做,我不知道为什么。

谢谢!

modules.jpg (28.6 kB)
4条回答
追夢秋陽
2020-09-10 09:08

嗨,基督徒!

在这种情况下很难建议。 我会尝试首先在模板中的"选择"属性中使用"//saml:Assertion",以确保在运行时模块处理过程中以正确的方式评估XPath表达式。

Evgeniy。/p>

一周热门 更多>