Я создал клиент веб-службы Axis2. Отклик возвращается в:axiom xpath addnamespace не работает
<GetOpenPOsResponse xmlns="https://www.mycompany.net/">
<GetOpenPOsResult>
<acXML xmlns="https://www.mycompany.net/acXMLSchema.xsd" lang="en-us">
<Header>
<From>
<Company>Company Name</Company>
<Identity>Id</Identity>
<DatabaseName>Database</DatabaseName>
</From>
</Header>
<Request/>
</acXML>
</GetOpenPOsResult>
Я могу выбрать узлы с помощью XPath, если я использую следующее:
OMElement result = sender.sendReceive();
StAXOMBuilder builder = new StAXOMBuilder(result.getXMLStreamReader());
OMElement root = builder.getDocumentElement();
AXIOMXPath xpath = new AXIOMXPath("/*[name()='GetOpenPOsResponse']/*[name()='GetOpenPOsResult']/*[name()='acXML']/*[name()='Header']/*[name()='From']/*[name()='Company']");
OMElement selectedNode = (OMElement) xpath.selectSingleNode(root);
System.out.println(selectedNode.getText());
Это возвращает: Название компании
Но я необходимо упростить выражение xpath с использованием пространств имен следующим образом:
xpath.addNamespace("y", "https://www.mycompany.net");
xpath.addNamespace("x", "https://www.mycompany.net/acXMLSchema.xsd");
и изменить выражение XPath для:
AXIOMXPath xpath = new AXIOMXPath("/y:GetOpenPOsResponse/y:GetOpenPOsResult/x:acXML/x:Header/x:From/x:Company");
Но выбирая узел таким образом возвращает нуль. Я видел другие решения, в которых этот подход должен работать, но я не могу заставить его работать для меня.
Что я делаю неправильно?
Thank you.