SAP CPI异常:getStatusCode()适用于参数类型:()值:[]

2020-08-21 03:22发布

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

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


亲爱的

我正在尝试在调用异常时获取http状态代码。 我认为我的位置正确,但是出现以下错误:

java.lang.NoSuchMethodException:无方法签名:com.sap.it.rt.adapter.openconnectors.exceptions.OpenConnectorsException.getStatusCode()适用于参数类型:()值:[ ]

消息属性:


CamelExceptionCaughtcom.sap.it.rt.adapter.openconnectors.exceptions.OpenConnectorsException:HTTP操作失败:{" requestId":" 5e8c93f9e4b02c84ec1e41f4","消息":"服务不可用"," providerMessage":"错误-{代码 = 503,消息=该服务当前不可用。,status =不可用}"}状态码:503

我的代码:

 def map = message.getProperties();
     def ex = map.get(" CamelExceptionCaught");
    
     如果(ex!= null){
      message.setHeader(" HTTP_CODE",ex.getStatusCode());
     }
 

对此有任何帮助吗?

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

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


亲爱的

我正在尝试在调用异常时获取http状态代码。 我认为我的位置正确,但是出现以下错误:

java.lang.NoSuchMethodException:无方法签名:com.sap.it.rt.adapter.openconnectors.exceptions.OpenConnectorsException.getStatusCode()适用于参数类型:()值:[ ]

消息属性:


CamelExceptionCaughtcom.sap.it.rt.adapter.openconnectors.exceptions.OpenConnectorsException:HTTP操作失败:{" requestId":" 5e8c93f9e4b02c84ec1e41f4","消息":"服务不可用"," providerMessage":"错误-{代码 = 503,消息=该服务当前不可用。,status =不可用}"}状态码:503

我的代码:

 def map = message.getProperties();
     def ex = map.get(" CamelExceptionCaught");
    
     如果(ex!= null){
      message.setHeader(" HTTP_CODE",ex.getStatusCode());
     }
 

对此有任何帮助吗?

付费偷看设置
发送
2条回答
悠然的二货
1楼-- · 2020-08-21 03:58

嗨,

" CamelExceptionCaught"属性仅包含IFlow捕获的任何异常。 这些异常不必特别是" AhcOperationFailedException"类型。 (它们只应继承Throwable类。)但是 getStatusCode()方法是Exception类" AhcOperationFailedException"的方法。 查看您的帖子时,我们可以看到您捕获的异常是另一种类型。 特别是它的类型为" OpenConnectorsException"。

此异常类没有" getStatusCode"方法。 但是它提供什么方法​​? 通过使用反射(如本文在本文中所示) 我们可以看到=" https://people.sap.com/mortenw"> Morten Wittrock ),OpenConnectorsException类仅带来了一个自己的(未继承)方法,称为" getMessage"。 因此,您唯一可以调用的函数是getMethod(),它返回一个String。

尽管如此,您仍可以在上面的输入中看到错误消息文本确实包含状态代码。 因此解决方案可能是调用getMessage以获取错误文本,然后解析该错误文本以获取状态代码。

下面的代码是"虚拟"代码,写在我头上。 因此,也许您必须纠正一两件事,但通常它应该像这样工作:

 def map = message.getProperties()
 def ex = map.get(" CamelExceptionCaught")
    
 如果(ex!= null){
  //检测异常类型
def exType = ex.getClass()。getCanonicalName() 如果(exType ==" org.apache.camel.component.ahc.AhcOperationFailedException"){ message.setHeader(" HTTP_CODE",例如:getStatusCode()) }否则,如果(exType ==" com.sap.it.rt.adapter.openconnectors.exceptions.OpenConnectorsException"){ def statusCode =(ex.getMessage()=〜/状态码?:?(\ d {3})/)[0] [1] message.setHeader(" HTTP_CODE",statusCode) } }