WSO2 ESB无法提取soap元素值

WSO2 ESB无法提取soap元素值,wso2,wso2esb,esb,Wso2,Wso2esb,Esb,我无法从以下soap信封中获取clinicID的值: <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tfom="https://bur.cdmarf.ru/dss/services/tfoms"> <soapenv:Header/> <soapenv:Body> <tfom:get_single_

我无法从以下soap信封中获取clinicID的值:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tfom="https://bur.cdmarf.ru/dss/services/tfoms">
      <soapenv:Header/>
      <soapenv:Body>
         <tfom:get_single_inserted_branch_by_id>
            <tfom:clinicID>6048820</tfom:clinicID>
         </tfom:get_single_inserted_branch_by_id>
      </soapenv:Body>
</soapenv:Envelope>

<property xmlns:tfom="https://bur.cdmarf.ru/dss/services/tfoms"
                   name="CLINIC_ID"
                   expression="//clinicID/text()"
                   scope="axis2"
                   type="STRING"/>

6048820
这是我记录临床ID值的方式:

<log level="custom">
    <property name="1" expression="get-property('CLINIC_ID')"/>
</log>

这是临床ID的值:

<log level="custom">
    <property name="1" expression="get-property('CLINIC_ID')"/>
</log>
1=零


您可以使用$body synapse xpath变量访问有效负载的主体。所以对于属性的表达式,mediator将是


$body/tfom:get_single_inserted_branch_by_id/tfom:clinicID/test()

您可以使用$body synapse xpath变量访问有效负载的主体。所以对于属性的表达式,mediator将是


$body/tfom:get_single_inserted_branch_by_id/tfom:clinicID/test()

如果发送请求的格式如下所示

   <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://services.samples" xmlns:xsd="http://services.samples/xsd">  
    <soapenv:Header/>  
     <soapenv:Body>  
       <ser:getQuote>  
     <!--Optional:-->  
       <ser:request>  
     <!--Optional:-->  
   <xsd:symbol>wso2</xsd:symbol>  
  </ser:request>  
</ser:getQuote>  

wso2

你需要写一个代理

         <property xmlns:m1="http://services.samples/xsd"
               xmlns:m0="http://services.samples"
               name="symbol"
               expression="//m0:getQuote/m0:request/m1:symbol"
               scope="default"
               type="STRING"/>
     <property xmlns:ns="http://org.apache.synapse/xsd"
               name="REST_URL_POSTFIX"
               expression="fn:concat('?symbol=',get-property('symbol1'))"
               scope="axis2"
               type="STRING"/>


有关更多详细信息,请参阅或

,如果您的发送请求符合以下格式

   <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://services.samples" xmlns:xsd="http://services.samples/xsd">  
    <soapenv:Header/>  
     <soapenv:Body>  
       <ser:getQuote>  
     <!--Optional:-->  
       <ser:request>  
     <!--Optional:-->  
   <xsd:symbol>wso2</xsd:symbol>  
  </ser:request>  
</ser:getQuote>  

wso2

你需要写一个代理

         <property xmlns:m1="http://services.samples/xsd"
               xmlns:m0="http://services.samples"
               name="symbol"
               expression="//m0:getQuote/m0:request/m1:symbol"
               scope="default"
               type="STRING"/>
     <property xmlns:ns="http://org.apache.synapse/xsd"
               name="REST_URL_POSTFIX"
               expression="fn:concat('?symbol=',get-property('symbol1'))"
               scope="axis2"
               type="STRING"/>


有关更多详细信息,请参阅或

问题在于xpath表达式。如果你使用

<property xmlns:tfom="https://bur.cdmarf.ru/dss/services/tfoms"
                   name="CLINIC_ID"
                   expression="//tfom:clinicID/text()"
                   scope="axis2"
                   type="STRING"/>

它应该会起作用。缺少的部分是表达式中的命名空间前缀

您可以使用一个在线工具,比如


我确实使用了它,并且能够获得clinicID值作为输出。

问题在于xpath表达式。如果你使用

<property xmlns:tfom="https://bur.cdmarf.ru/dss/services/tfoms"
                   name="CLINIC_ID"
                   expression="//tfom:clinicID/text()"
                   scope="axis2"
                   type="STRING"/>

它应该会起作用。缺少的部分是表达式中的命名空间前缀

您可以使用一个在线工具,比如

我确实使用了它,并且能够获得clinicID值作为输出。

试试这种方法

<property name="CLINIC_ID" expression="//*[local-name()='clinicID']/text()" type="STRING" scope="default"/>

试试这种方法

<property name="CLINIC_ID" expression="//*[local-name()='clinicID']/text()" type="STRING" scope="default"/>


我不能用它。因为在这个代理中,我有多个有效负载,其中在arg的有效负载中,我使用如下属性:get属性('CLINIC_ID')或$axis2:CLINIC_ID。例如:对于这个soap,我无法捕获clinicID$1 OK。我的意思是用这个表达式定义一个属性。例如:然后使用该PropertyId[-1234][ESB][2016-06-03 14:25:00134]错误{org.apache.synapse.config.xml.PropertyMediatorFactory}-属性的XPath表达式无效';表达式';:$body/tfom:get\u single\u inserted\u branch\u by\u id/tfom:clinicID/test()我可以这样做
,但它不能解决我的问题,我不能使用它。因为在这个代理中,我有多个有效负载,其中在arg的有效负载中,我使用如下属性:get属性('CLINIC_ID')或$axis2:CLINIC_ID。例如:对于这个soap,我无法捕获clinicID$1 OK。我的意思是用这个表达式定义一个属性。例如:然后使用该PropertyId[-1234][ESB][2016-06-03 14:25:00134]错误{org.apache.synapse.config.xml.PropertyMediatorFactory}-属性的XPath表达式无效';表达式';:$body/tfom:get\u single\u inserted\u branch\u by\u id/tfom:clinicID/test()我可以这样做
,但这并不能解决我的问题