Учитывая, что вы используете библиотеку Axiom XPath, которая, в свою очередь, использует Jaxen, вам нужно будет выполнить следующие три шага, чтобы сделать это в полной мере:
context.setVariableValue("val", "value1")
, чтобы присвоить значение этой переменной. .setVariableContext()
, чтобы передать в контекст, который вы назначили. /a/b/c[x=$val]/y
для ссылки на это значение. Рассмотрим следующее:
package com.example;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.impl.common.AxiomText;
import org.apache.axiom.om.util.AXIOMUtil;
import org.apache.axiom.om.xpath.DocumentNavigator;
import org.jaxen.*;
import javax.xml.stream.XMLStreamException;
public class Main {
public static void main(String[] args) throws XMLStreamException, JaxenException {
String xmlPayload="val1 abc " +
"val2 abcd " +
" ";
OMElement xmlOMOBject = AXIOMUtil.stringToOM(xmlPayload);
SimpleVariableContext svc = new SimpleVariableContext();
svc.setVariableValue("val", "val2");
String xpartString = "//c[x=$val]/y/text()";
BaseXPath contextpath = new BaseXPath(xpartString, new DocumentNavigator());
contextpath.setVariableContext(svc);
AxiomText selectedNode = (AxiomText) contextpath.selectSingleNode(xmlOMOBject);
System.out.println(selectedNode.getText());
}
}
... который испускает выход:
abcd
Измените сообщение: просто обеспечьте первичный ключ и текущую дату, не пары ключ/значение. Ваш mdb выбирает объект первичным ключом и называет индекс (). После индексации Вас устанавливает значение, "обновленное" в Вашем индексе на дату сообщения. Вы обновляете свой индекс, только если дата сообщения после "обновленного" поля индекса. Таким образом, Вы не можете отстать, потому что Вы всегда выбираете текущие пары ключ/значение сначала.
Как альтернатива: взгляните на http://www.compass-project.org.