xml 요소가있는 요소를 확인 중이며없는 경우 기본값을 기본값으로 사용합니다.WebSphere에서 두 번째 호출시 노드를 찾지 못하는 JAXP XPath 쿼리 (JUnit은 정상적으로 작동 함)
이것은 웹 서비스 호출에서 Websphere 7의 JAXWS로 org.apache.xerces.dom.ElementNSImpl로 전달됩니다.
// instantiate xpath
XPathFactory xPathFactory = XPathFactory.newInstance();
XPath xPath = xPathFactory.newXPath();
xPath.setNamespaceContext(new NamespaceContext() {
public String getNamespaceURI(String prefix) {
if ("ns".equals(prefix))
return PROVIDER_NAMESPACE;
else
return XMLConstants.NULL_NS_URI;
}
public String getPrefix(String uri) {
return null; // n/a
}
public Iterator<?> getPrefixes(String uri) {
return null; // n/a
}
});
// Check if date is populated
XPathExpression declarationDateXpath = xPath.compile("//ns:Provider/ns:DeclarationDate");
Node dateNode = (Node) providerDateXpath.evaluate(node, XPathConstants.NODE);
if (dateNode == null) {
// if not there, add the node
Document doc = node.getOwnerDocument();
dateNode = doc.createElementNS(PROVIDER_NAMESPACE, "DeclarationDate");
XPathExpression providerXPath = xPath.compile("//ns:Provider");
Node providerNode = (Node) providerXPath.evaluate(node, XPathConstants.NODE);
providerNode.appendChild(dateNode);
}
// Check value & set default if necessary
if (dateNode.getTextContent() == null || "".equals(dateNode.getTextContent())) {
// date not set, defaulting to today
dateNode.setTextContent(today);
}
여러분도 알다시피 나는 각 호출마다 최대한 많은 것을 인스턴스화합니다.
첫 번째 웹 서비스 호출은 노드를 반환합니다. 두 번째 웹 서비스 호출에서는 두 xpath 모두에 대해 null을 반환합니다. javadoc "의 XPath [및하여 XPathExpression] [객체가] 스레드 안전하지하지 재진입에 따르면
.
어떤 아이디어?