2011-08-29 3 views
0

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] [객체가] 스레드 안전하지하지 재진입에 따르면

.

어떤 아이디어?

답변

0

잘 확인. 나는 ' 을 알아 냈어요 작동 이루어진 적이.

그것은. 그런데, 정확하게는이 라운드 초 시간의 XPath는 XPath이었다.

I 단축 번째 e xpath "//ns:Provider/ns:DeclarationDate" (여기서 ns:Provider은 루트)에서 "//ns:DeclarationDate"까지입니다.

WebSphere 7 구현 JAXP의 어딘가에 이러한 결함이 발생하지만 더 자세히 조사 할 수는 없습니다.

앞으로 도움이되기를 바랍니다.

관련 문제