2013-04-17 83 views
1

我正在開發一個使用SOAP Web服務的應用程序。SOAP響應不是XML格式

當我得到在文本視圖中或登錄貓它是下列格式的迴應:

anyType{Results=anyType{Row=anyType{NAME=Demo; [email protected]; PHONENO=98607xxxxx; }; }; } 

但在瀏覽器的響應是這樣的:

<env:Envelope 
    xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:ns0="http://testing.oi.com/"> 
    <env:Body> 
     <ns0:getDetailsResponse> 
      <ns0:return> 
       <Results> 
        <Row> 
         <NAME>Demo</NAME> 
         <EMAIL>[email protected]</EMAIL> 
         <PHONENO>98607xxxxx</PHONENO> 
        </Row> 
       </Results> 
      </ns0:return> 
     </ns0:getDetailsResponse> 
    </env:Body> 
</env:Envelope> 

我的代碼調用SOAP Web服務如下:

String NAMESPACE = "http://testing.oi.com/"; 
String URL = "http://192.168.1.xxx:8888/Testing-DemoTest-context-root/TestDemoSoapHttpPort"; 
String SOAP_ACTION = "http://testing.xx.com/getDetails"; 
String METHOD_NAME = "getDetails"; 

//Initialize soap request + add parameters 
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 

//Declare the version of the SOAP request 
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
envelope.dotNet = true; 
envelope.setOutputSoapObject(request); 
envelope.implicitTypes = false; 

HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); 

try {    
    androidHttpTransport.debug = true; 
//this is the actual part that will call the 
androidHttpTransport.call(SOAP_ACTION, envelope); 
// Get the SoapResult from the envelope body. 
SoapObject result = (SoapObject)envelope.bodyIn; 
//Xml.parse(result.toString(), dataHandler); 
hotelDetails = result.getProperty(0).toString(); 
Log.d("Rsp",Details); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

tv.setText(hotelDetails); 

我的Java web服務代碼如下:

public class Test { 
    public Test() { 
    } 
    // Global Variable 
    Connection con; 
    CallableStatement cst; 
    String response; 
    ResultSet rs; 
    Statement stmt; 

    //DataBase Connection 
    public static Connection getConnection(){ 
     Connection con; 
     con = null; 

     try { 
      Class.forName("oracle.jdbc.driver.OracleDriver"); 
     } catch (ClassNotFoundException e) { 
      System.out.println("Server Connection Failed"); 
     } 

     String url="jdbc:oracle:thin:@abc.def.com:PortNo:SID"; 
     try { 
      con=DriverManager.getConnection(url,"UserName","Password"); 
      if(con!=null){ 
       System.out.println("Connection Success"+"\n"); 
      } 
     } catch (SQLException e) { 

     System.out.println("Connection Failed"); 
    } 
    return(con); 
} 

//XML Document Creation. 
public static Document createXMLDocument(ResultSet resultset, Document doc){ 
    ResultSetMetaData rsmd;  
    DocumentBuilderFactory factory; 
    DocumentBuilder builder; 
    doc = null; 
    Element results; 
    int colCount; 
    Connection con = getConnection();   

    try{ 
     factory = DocumentBuilderFactory.newInstance(); 
     builder= factory.newDocumentBuilder(); 
     doc= builder.newDocument(); 
     results = doc.createElement("Results"); 
     doc.appendChild(results); 
     rsmd = resultset.getMetaData(); 
     colCount = rsmd.getColumnCount(); 

     while (resultset.next()){ 
      Element row = doc.createElement("Row"); 
      results.appendChild(row); 

      for (int i = 1; i <= colCount; i++){ 
       String columnName = rsmd.getColumnName(i); 
       Object value = resultset.getObject(i); 
       if(value==null){ 
        value=" "; 
       } 

       Element node = doc.createElement(columnName); 
       if(columnName.equalsIgnoreCase("BEGIN_DATE")){ 
        String date= resultset.getString(i); 
        node.appendChild(doc.createTextNode(date)); 
        row.appendChild(node); 
       }else{ 
        node.appendChild(doc.createTextNode(value.toString())); 
        row.appendChild(node); 
       } 
      } 
     } 
    }catch (Exception e) { 
     e.printStackTrace(); 
    } 
    try { 
     con.close(); 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 
    return(doc); 
} 

// Call Details 
@WebMethod 
public Document getDetails(){ 
    Document doc; 
    doc = null; 
    con=getConnection(); 
    try { 
     cst= con.prepareCall("{call callDetails (?)}"); 
     cst.registerOutParameter(1,OracleTypes.CURSOR); 
     cst.execute(); 
     rs = (ResultSet)cst.getObject(1); 
     doc = createXMLDocument(rs,doc); 
    }catch (SQLException e) { 
     System.out.println("No Such Record"); 
    } 

    try { 
     con.close(); 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 
    return(doc); 
} 

我想回應像它在字符串瀏覽器,以便我可以使用SAX解析和分析數據。我不明白爲什麼我會得到這樣的迴應。

請在這個問題上指導我或者建議我現在應該做什麼。我處於應用程序中間,無法移動得更遠。

回答

2

我解決了獲取響應的問題。 什麼,我做的是:

我只需要添加:

androidHttpTransport.debug = true; 

前:

androidHttpTransport.call(SOAP_ACTION, envelope); 

和呼叫我加入後:

String xml = androidHttpTransport.responseDump; 

而且通過這個我得到瀏覽器響應中的一個字符串。