2012-08-08 2 views
0

SOAP XML 파일을 로컬 시스템에 저장 했으므로 해당 파일을로드하고 SOAP 본문에서 XML의 유효성을 검사해야합니다.Apache Common FileUtils XML 파일을 문자열로 읽어들입니다.

SOAP의 XML은

<SOAP:Envelope> 
    <SOAP:Body> 
     <request> 
      <Login> 
       <Username>abc</Username> 
       <Password>abc</Password> 
      </Login> 
     </request> 
    </SOAP:Body> 
</SOAP:Envelope> 

나는 SOAP 요청 위에서 < 로그인 > XML을 추출해야합니다. FileUtils를 사용하여 파일을 문자열로 읽습니다. 그것을 사용하여 파일을 읽을 때 \ n \ t \ t 등의 문자도 읽습니다. XML 형식의 파일에있는 개행과 탭을 고려해야합니다.

i 아래 코드를 사용하여 XML에서 하위 노드를 문자열로 추출합니다.

InputStream requestXMLInputStream = new ByteArrayInputStream(soapRequestXML.getBytes()); 
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder dBuilder; 
String requestXMLBody = ""; 
Document doc = null; 
try { 
    dBuilder = dbFactory.newDocumentBuilder(); 
    doc = dBuilder.parse(requestXMLInputStream);   
    NodeList requestNodeList = doc.getElementsByTagName(parentTagName); 
    Node node = requestNodeList.item(0); 
    DOMImplementationLS domImplLS = (DOMImplementationLS) doc.getImplementation(); 
    LSSerializer serializer = domImplLS.createLSSerializer(); 
    if(node != null && node.getFirstChild() != null) 
      requestXMLBody = serializer.writeToString(node.getFirstChild()); 
} catch (SAXException e) { 
    logger.error(e.getMessage()); 
} catch (IOException e) { 
    logger.error(e.getMessage()); 
}catch (ParserConfigurationException e) { 
    logger.error(e.getMessage()); 
} 

return requestXMLBody; 

어떻게 이러한 문자가없는 XML 파일을 읽을 수 있습니까?

도와주세요.

답변

0

XML 문서를 읽기 위해 문자열 조작을 사용하는 것은 두통과 좌절에 대한 잘 테스트 된 방법입니다. 이를 위해 게시 된 XML API 만 사용하십시오.

일반적인 방법은 다음과 같습니다는 SOAP XML은 파일에 저장되어 있다고 가정

1)는 Document 객체로 XML을 구문 분석 JAXP API를 사용합니다.

2) XPath를 사용하여 Login 요소로 이동합니다 (JDK에 포함 된 표준 Java XPath API 사용).

3) 당신이 Login 요소에 대한 참조가 있으면, 문자열로 Login 요소를 직렬화하기 위해 JAXP Transformer를 사용합니다.

(표준 웹 서비스 API 중 하나의 사용을 통해 SOAP 패킷을 수신하면 단계 (1)이 변경됩니다. SOAP 패킷은 파일에 저장된대로 제공됨)

관련 문제