Как решить проблему преобразования XML?

Привет всем, я использую Ajax в своем проекте для загрузки названия продукта в одно поле выбора с событием onselect имени магазина в событии onchange окна выбора. Здесь я использовал Ajax для получения списка из класса действий java в jsp. мой код в классе Jsp и Action выглядит следующим образом.

 <s:label value="Store Name : *" />                                                                        
 <s:select name="storeName" list="storeList" onchange="loadProduct(this.value)"  listKey="storeId" listValue="storeName" headerKey="-1" headerValue="Select the Store"  /> 

 <s:label value="Product Name : *" /> 
 <s:select name="productName" list="productList" listKey="productId" listValue="productName"  />  


 function loadProduct(id){
var URL = "AjaxPopMyCycle.action?storeName="+id;
ajaxEditFunctionCall(URL); 

                                }

        function ajaxEditFunctionCall(URL){   
                 try{
                    xmlHttp=new XMLHttpRequest();
                }catch (e){
                try{
                    xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
                }catch (e){
                    try{
                        xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
                    }catch (e){
                        alert("Your browser does not support AJAX!");
                        return false;
                    }
                } 
            } 
            xmlHttp.onreadystatechange=function(){ 
              if(xmlHttp.readyState==4){ 
                    if (xmlHttp.status == 200) { 
                        if(xmlHttp.responseXML != null ){                      
                                showMessage(xmlHttp.responseXML); 
                        }
                    }
                }
            }
            xmlHttp.open("GET", URL, true); 
            xmlHttp.send(URL);
        }
        function showMessage(errorDisplayXML){   
        var checklist=document.Add.productName;
            checklist.options.length=0;  
            if(xmlHttp.readyState==4){

            if(errorDisplayXML.getElementsByTagName("rootElement")[0]!=null){  
                var rootElement  = errorDisplayXML.getElementsByTagName("rootElement")[0];
                var location = rootElement.getElementsByTagName("Message"); 
                var locArr = location[0]; 
                    var locArr = " ";
                    var tempArr;
                    var tempArr1; 
                    for(var i=0; i<location.length; i++){ 
                        tempArr = "";
                        tempArr1 = "";
                        locArr = location[i];   
                        tempArr = locArr.getElementsByTagName("productId")[0].firstChild.nodeValue;   
                        tempArr1 = locArr.getElementsByTagName("productnName")[0].firstChild.nodeValue;  
                        checklist.options[i]= new Option(tempArr1,tempArr);                         
                    }       
                }else{
                    alert("errorDisplayXML Contains NULL");
                }
            }
            } 

Следующий код в классе действий для получения результата и загрузки в XML следующим образом.

detailsList содержит список товаров, связанных с магазином, из базы данных.

public String getDetails(List detailedList)throws Exception{

    Element tempElem = null,
    rootElem = null;
    Text textElem = null;
    document=new org.dom4j.dom.DOMDocument();
    rootElem = document.createElement("rootElement");
    Element errorElement = null;
    List saveList = new ArrayList();
    saveList = detailedList;
    System.out.println("DetailedList:"+saveList.size());
    if(saveList.size()>0){
        try {               
            for(int i=0;i<saveList.size();i++){

                Product aproduct = (Product )saveList.get(i);  
                errorElement = document.createElement("Message");

                tempElem = document.createElement("productId");
                textElem = document.createTextNode(aproduct .getProductId());                   
                tempElem.appendChild(textElem);
                errorElement.appendChild(tempElem);

                tempElem = document.createElement("productName");
                textElem = document.createTextNode(aproduct.getProductName());
                tempElem.appendChild(textElem);
                errorElement.appendChild(tempElem); 

                rootElem.appendChild(errorElement);                 
            }              
        }catch (Exception e) {
            tempElem = document.createElement("Message");
            return parseToString(tempElem);
        }


    return parseToString(rootElem);
}

public String parseToString(Element node) throws Exception {

    OutputFormat format  = new OutputFormat();  
    StringWriter  stringOut = new StringWriter();       
    XMLSerializer serial = new XMLSerializer(stringOut,format);

    serial.asDOMSerializer();                           
    serial.serialize(node);
    return stringOut.toString();

}

Я импортировал следующие пакеты в свой класс действий.

импортировать org.w3c.dom.Document;

импортировать org.w3c.dom.Element;

импортировать org.w3c.dom.Text;

импортировать com.sun.org.apache.xml.internal.serialize.OutputFormat;

импортировать com.sun.org.apache.xml.internal.serialize.XMLSerializer;

Он отлично работает с правильной функциональностью в течение последних 3 недель.

Но он не компилируется и не показывает следующее сообщение об ошибке на моем сервере.

C:\Users\Desktop\Updated\Project\src\main\java\com\action \AjaxAction.java:[199,5] com.sun.org.apache.xml.internal.serialize.XMLSerializer — это проприетарный API Sun и может быть удалено в будущем выпуске

C:\Users\Desktop\Updated\Project\src\main\java\com\action \AjaxAction.java:[199,32] com.sun.org.apache.xml.internal.serialize.XMLSerialize r — собственный API Sun и может быть удален в будущем выпуске

В моем проекте используются Struts2, Jsp, Hibernate3 в качестве внешнего интерфейса и сервер Mysql в качестве внутреннего интерфейса. Я понятия не имею, как решить эту проблему.

Кто-нибудь, пожалуйста, помогите мне решить эту проблему. Заранее спасибо!!!.


person shiva    schedule 14.03.2012    source источник
comment
просто сторона, а не то, почему вы не судитесь с форматом JSON, который является более легким и гибким. S2 имеет встроенную поддержку din для JSON и прост в использовании. Альтернативно используйте гибкий и простой в использовании XStream.   -  person Umesh Awasthi    schedule 14.03.2012
comment
спасибо УмешАвасти. Можете ли вы отправить любой URL-адрес для использования формата JSON. Я понятия не имею об этой технологии.   -  person shiva    schedule 14.03.2012
comment
вот ссылка для вас, все, что вам нужно, чтобы плагин был в вашем пути к классам, и вы готовы к работе. cwiki.apache.org/confluence/display/WW/JSON%20Plugin   -  person Umesh Awasthi    schedule 14.03.2012


Ответы (1)


Используя org.apache.xml.serialize.XMLSerializer, вы также можете избежать ошибки. импортируйте этот класс из xercesImpl-2.7. 1.jar и используйте в parseToString() вот так:

import org.apache.xml.serialize.OutputFormat;
import org.apache.xml.serialize.XMLSerializer;

public String parseToString(Element node) throws Exception {
    OutputFormat format  = new OutputFormat();  
    java.io.Writer  stringOut = new StringWriter();       
    XMLSerializer serial = new XMLSerializer(stringOut,format);                      
    serial.serialize(node);
    return stringOut.toString();
}
person tusar    schedule 14.03.2012