Problemas de WSO2 ESB XPATH
-
21-12-2019 - |
Pregunta
Quiero usar el siguiente XPATH
/ usuarios / usuario / userid
Esto no funciona porque el ESB agrega un sobre y un cuerpo de jabón alrededor de mi XML, ¿qué es el XPATH correcto para usar o cómo puedo eliminar el sobre y el cuerpo de SOAP?
El XML es:
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<Users xmlns="http://ws.wso2.org/dataservice">
<User>
<UserID>a</UserID>
<Username>a</Username>
<Email>a</Email>
<Password>a</Password>
</User>
<User>
<UserID>a</UserID>
<Username>a</Username>
<Email>a</Email>
<Password>a</Password>
</User>
<User>
<UserID>a</UserID>
<Username>a</Username>
<Email>a</Email>
<Password>a</Password>
</User>
</Users>
</soapenv:Body>
</soapenv:Envelope>
Editar:
Esto funciona cuando intento registrarlo fuera de mi mediador ITERATE
//*[local-name() = 'Users']/*[local-name() = 'User']/*[local-name() = 'UserID']
¿Pero cuando intento registrarlo dentro del mediador ITERATE que no devuelve nada?
Solución
tiene esto trabajando utilizando el siguiente
<property xmlns:int="http://ws.wso2.org/dataservice" name="uri.var.ID" expression="$body/int:User/int:UserID/text()" scope="default" type="STRING"/>
Otros consejos
Para acceder a sus elementos, debe pasar por el sobre y el cuerpo. Aquí hay un ejemplo con el Mediador del interruptor:
<switch xmlns:ns="http://org.apache.synapse/xsd"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:int="http://ws.wso2.org/dataservice"
source="boolean(/soap:Envelope/soap:Body/int:Users/int:User/int:UserID/text() = 'string_to_compare'">
<case regex="true">
....
</case>
<default/>
</switch>
upd Expresión XPATH corregida
Intenta esto:
<property name="yourParamName" expression="$body/Users/User/UserID" scope="default" type="STRING"/>
Puede leer más sobre las variables predefinidas de SINAPSE XPATH aquí .