Bootstrap

PO系列 解决报错InterfaceDetermination

前言

最近帮用户解决了一个奇怪的PO问题

同一个接口,配置WEBSERVICE 发出能通过, 配置成 REST 发出系统报错

InterfaceDetermination did not yield any actual interface

本文主要介绍追踪这个报错并解决的过程

问题描述

同一个接口, 配置成WEBSERVICE 调用测试成功,配置成REST调用测试报错

8eb441888ac2406894df9280a1422658.png

开启详细日志之前. SOAPUI直接返回500错误及报错信息. 消息无法在消息监控其中查看, 但是可以在通道监控器中看到报错信息

Error while sending message to module processor: Sender Channel 'CCO_PMS_QMIS_P10061' (ID: c54145a5d6ab37c88091ad6f693b557c): Catching exception calling messaging system: InterfaceDetermination did not yield any actual interface

b40a3a1cdf255bc9dc61d5d5b3ea6ca4.png

开启详细日志后(图一), SOAPUI返回202成功信息(图二)

500ab902b98cfcd717093814daafff43.png

 图一

8c92fa15b0a0ae42cb2256d232c21d9b.png

图二

消息进入消息监控器,看到报错信息

e461d5de5808bd939d2b9e631cdbf833.png

图三

问题解决过程

解决PO问题的大致过程

  • 重新激活相关对象: Integrated Configuration / message mapping 等

  • 通过INSPECT跟踪报错,获取详细报错信息

  • google/bing报错信息

  • 根据报错信息查找NOTES

  • 检查接口的所有配置对象,看看是否存在因为粗心而导致命名不规范的对象.

上述过程排名不分先后

01

查找NOTES

2628224 - Throwing com.sap.aii.adapter.xi.routing.RoutingException: InterfaceDetermination did not yield any actual interface

来自 

https://launchpad.support.sap.com/#/notes/0002628224

notes的描述和报错信息很像,但并没有什么实际的用处.

1435d3661895c00217595480366efcf2.png

02

监控端口

使用INSPECTOR的方式

详见链接

无峰,公众号:ABAP 技巧与实战PO系列之 使用XPI_INSPECTOR跟踪PO报错

判断报错的信息是通道处理时报错,因此尝试通过INSPECTOR监控动态的处理

分析监视的报错信息, (无法获取接口对象),也看不出什么头绪.

8e416a7622af35373aba8b84916ecb83.png

f035f1ecb0fda7106cc32fa4b6e21626.png

03

重建对象

因为报错信息涉及到消息确认,所以初步怀疑是IC(Integrated Configuration)对象的问题.

删除IC,SOAP调用接口报错信息改变, 重新创建IC后, 恢复原来的报错信息. 

重建或重新激活对象的目的是更新缓存. 之前碰到过很多因为缓存更新不及时或缓存失效而导致的报错.因此需要尝试一下该方式

394b990bec8e1af9bb206c0edce6adc5.png

ebf9adb0477943df61f7bcfd3be4d0bd.png

04

问题解决

最后重新检查所有对象时发现:

发出的SERVICE INTERFACE 中的MESSAGE TYPE 用错了. 

导致REST中的 ELEMENT NAME 和 SI 中的消息MESSAGE TYEP 不一样.

REST通道通过地址

/RESTAdapter/MTO_PMS_QMIS_P10061

查找 ENDPOINT (图四)找到通道, 通过通道中的ELEMENT NAME(图五)找到消息, 通过消息找到SEND SERVICE INTERFACE(SI).

Element name 中定义的消息名没有被SERVICE INTERFACE 使用, 导致系统报错

InterfaceDetermination did not yield any actual interface .

而WEBSERVICE中没有报错的原因很简单: SOAP的调用地址中指定了 SEND SI(图六) ,无需查找. (通过参数interface )指定了SI 对象

6187b8fde7cc8e90906bef8e575b1a43.png

图四

4f1f197893d72f560879cf3e3c0df03f.png

图五

3d51e014167e7737590caf7deed646ed.png

图六

总结

PO配置时会涉及到很多对象, 因此对象命名必须规范(最好每种对象的名称字符长度都能固定),不符合规范的命名对象可以很方便的被发现.

推荐使用WEBSERVICE方式定义接口, 因为相比REST接口, WEBSERVICE 定义的内容更少,减少了出错的概率.并且生成WSDL定义文件, 便于其它系统引入使用.

THE

END

约定

如果你对这篇文章感兴趣,请帮忙点赞,在看,分享.       

    (如果你真的喜欢这篇文章,请记得回来打个赏,作为支持我继续下去的动力,这是一个正反馈过程. 越多的人打赏,作者越有动力分享,读者就能享受更多的福利.毕竟打赏的金额富不了我,穷不了你,却能支持这个公众号长久发文.)

05aff8e7bd7c0519fa54676f14c7a446.png

公众号 : syjf1976_abap

          ABAP开发技巧

微信号 : 392077

请微信联系管理员: 

syjf1976 

sharry_xlp  

Yannick_Duan 

申请进入公众号讨论群提问或者参与话题讨论

;