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

2020-09-10 08:30发布

         点击此处--->   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)

         点击此处--->   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条回答
派大星 ヾ
1楼-- · 2020-09-10 09:12

嗨,克里斯蒂安!

您是否使用Xalan处理器在Eclipse中进行测试?

关于此,Evgeniy。

hengyuye
2楼-- · 2020-09-10 09:17

嗨,克里斯蒂安,

是否可以在这里共享您的输入xml?

还可以尝试在xslt中添加一些日志记录,以便可以看到使用xpi_inspector日志执行xslt时会发生什么。 p>

希望您在Eclipse中使用了正确的xalan版本jar。

https://answers.sap.com/questions/316247/how-to-find-the-xalan-jar-version-in- sap-po-74-sp.html

致谢

Muni

Aaron 3364
3楼-- · 2020-09-10 09:10

嗨,Evgeniy,

很高兴你在这里。

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

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

亲切的问候,
Christian

追夢秋陽
4楼-- · 2020-09-10 09:08

嗨,基督徒!

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

Evgeniy。/p>

一周热门 更多>