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条回答
Aaron 3364
2020-09-10 09:10

嗨,Evgeniy,

很高兴你在这里。

Xalan和Saxon都可以在我的xslt上正常工作。 在SWCV中,我在Mapping Runtime(第一个界面需要XSLT 2.0)中使用Saxon(而不是先写的Xalan),但是我想那不是模块中使用的。

您知道是否有一种方法可以告诉模块使用哪个处理器? (我能想到的最好的主意是为xslt转换开发自己的模块并在其中使用Xalan,但我希望有一种更简单的方法...)

亲切的问候,
Christian

一周热门 更多>