2017-02-24 74 views
1

我想用Synapse处理程序实现自定义记录程序,我可以区分API和服务,但是如何从突触处理程序代码获取API名称?所有API的服务名称为__SynapseService从Synapse处理程序获取API名称

public static boolean isProxyService(MessageContext messageContext, 
      AxisService axisService) { 

     if (axisService != null) { 
      Parameter val = axisService.getParameter("serviceType"); 
      if (val != null && val.getValue().toString().equalsIgnoreCase("Proxy")) { 
       if (logger.isDebugEnabled()) { 
        logger.debug("Parameter Value Service Type: " 
          + val.getValue().toString()); 
       } 
       return true; 
      } 
     } 
     return false; 
    } 
    public static boolean isAPI(MessageContext messageContext, 
      AxisService axisService) { 

     if(!isProxyService(messageContext, axisService) && axisService.getAxisServiceGroup().getServiceGroupName().equals(SynapseConstants.SYNAPSE_SERVICE_NAME)){ 
      return true; 
     } 
     return false; 
    } 
    public static String getServiceName(MessageContext messageContext, AxisService axisService) { 
     org.apache.axis2.context.MessageContext msgContext = ((Axis2MessageContext) messageContext).getAxis2MessageContext();  

     return msgContext.getServiceContext().getName(); 
    } 

回答

0

试试这个。

String apiName = (String) messageContext.getProperty("SYNAPSE_REST_API"); 
+0

这始终是零。 – iozeren

+0

这很奇怪。这就是WSO2产品读取API名称的方式。例如。 https://github.com/wso2/carbon-apimgt/blob/v6.0.4/components/apimgt/org.wso2.carbon.apimgt.gateway/src/main/java/org/wso2/carbon/apimgt/gateway/处理程序/安全/ APIAuthenticationHandler.java#L294 – Bee

+0

我不知道ESB 5.0是否具有相同的代码库。我认为这段代码与API管理器有关。 – iozeren