2013-04-07 2 views
0

잡히는 JDOMException의 원인을 파악할 수 없습니다. 문서를 가져 오기위한 SAXBulider의 빌드 함수에 XML 형식 문자열을 전달할 때 예외가 발생합니다.JDOMException에 대한 이유를 알아낼 수 없습니다. SAXBuilder

XML 스트링 결과에 저장된 문자열 :

<?xml version='1.0' encoding='ISO-8859-1'?><results><result cover="http://cps-static.rovicorp.com/3/JPG_170/MI0002/213/MI0002213251.jpg?partner=allrovi.com" title="Hey-Ya" artist="A.D.D." year="N/A" genre="Pop/Rock" details="http://www.allmusic.com/album/hey-ya-mw0001029555"/><result cover="http://cps-static.rovicorp.com/3/JPG_170/MI0003/152/MI0003152820.jpg?partner=allrovi.com" title="Heyma" artist="Abir Nasraoui" year="N/A" genre="Latin, Pop/Rock" details="http://www.allmusic.com/album/heyma-mw0002115440"/><result cover="http://cs-server.usc.edu:14186/album.jpg" title="Heyla" artist="Candy" year="2003" genre="R&B" details="http://www.allmusic.com/album/heyla-mw0000698853"/><result cover="http://cps-static.rovicorp.com/3/JPG_170/MI0002/172/MI0002172691.jpg?partner=allrovi.com" title="Heya" artist="Jimmy Stallings" year="2003" genre="International" details="http://www.allmusic.com/album/heya-mw0000336392"/><result cover="http://cps-static.rovicorp.com/3/JPG_170/MI0003/361/MI0003361503.jpg?partner=allrovi.com" title="Heya" artist="David Jones" year="N/A" genre="Electronic" details="http://www.allmusic.com/album/heya-mw0002388044"/></results> 

코드 일으키는 예외의 부분이다 :

SAXBuilder builder = new SAXBuilder(); 

    String temp=""; 

    out.println("Inside Servlet :::: "); 

    try 
    { 
     out.println("1. HERE"); 
     Document doc = builder.build(new StringReader(results)); 
     out.println("2. HERE"); 
     Element root=doc.getRootElement(); 
     out.println(root); 
     List resultChildren=root.getChildren(); 
     out.println("3. HERE"); 
     if(resultChildren.size()==0) 
     { 
      out.println("{\"results\":[]}"); 
      return; 
     }   
     temp="{\"results\":{\"result\":["; 
     for(int i=0;i<resultChildren.size();i++) 
     { 
      Element tempElem = (Element)(resultChildren.get(i)); 

      if(i>0) 
      temp+=","; 

      if((request.getParameter("type")).equals("Artists"))      
       temp+=parseArtists(tempElem);     
      else if((request.getParameter("type")).equals("Albums")) 
       temp+=parseAlbums(tempElem); 
      else      
       temp+=parseSongs(tempElem);               
     } 
     temp+="]}}"; 
    } 
    catch(JDOMException ex) 
    { 
     errors+="1.Could not parse xml file";   
    } 
    catch(IOException ex) 
    { 
     errors+="2.Could not parse xml file";   
    } 

출력은 다음의 PrintWriter이다하여 생성 :

Inside Servlet :::: 
1. HERE 
{"errors": {"1.Could not parse xml file"}} 

따라서 doc = builder.build (new StringReader (results))에서 예외가 발생합니다.

친절하게이 문제를 안내합니다.

+0

예외 스택 추적을 인쇄하십시오. 예외의 이유는 예외 메시지에 설명되어 있습니다. 예외가 던져지는 곳은 예외 스택 추적에 있습니다. 이 정보를 무시하면 왜 얻는 지 이해할 수 없게됩니다. –

답변

2

그리고 스택 추적 (또는 적어도 예외 메시지)을 인쇄 한 후에는 입력 XML이 제대로 형성되지 않았 음을 알 수 있습니다. 문자열에 "R&B"이 포함되어 있습니다. 앰퍼샌드는 이스케이프해야하는 몇 가지 문자 중 하나입니다.이 경우 읽어야합니다 : "R&amp;B".

관련 문제