2012-08-24 46 views
1

我需要從我的應用程序發送3件東西到Web服務:用戶名+密碼和包含更多XML的消息。在xml中發送xml作爲消息

request.addProperty("username", username); 
request.addProperty("password", password); 
request.addProperty("message", UitVoer); // uitvoer is a String that contains XML 

我使用kso​​ap2 librabry總是爲Android <偉大的工作 - > Web服務,但ATM我不知道,如果它仍然可以工作,我需要什麼。

當我檢查我的envelope.bodyOut時,所有標籤和<>標誌看起來應該是這樣。 但是,然後我收到來自Web服務的錯誤消息,併發送了我發送的XML,並顯示了這些標誌的HTML代碼。

ksoap2是否會替換標誌,並且應該使用其他方式將我的東西發送到Web服務,還是Web服務端有問題? (我無法控制Web服務,所以我不知道它在那邊做了什麼。)

回答

2

這就是你如何構建一個XML請求;希望這可以幫助:)

DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); 
Document document = documentBuilder.newDocument(); 
Element rootElement = document.createElement("map"); 
document.appendChild(rootElement); 

Element em = document.createElement("string"); 
em.setAttribute("name", "FirstName"); 
em.appendChild(document.createTextNode("Rita")); 
rootElement.appendChild(em); 

em = document.createElement("string"); 
em.setAttribute("name", "LastName"); 
em.appendChild(document.createTextNode("Roy")); 
rootElement.appendChild(em); 


TransformerFactory factory = TransformerFactory.newInstance(); 
      Transformer transformer = factory.newTransformer(); 
      Properties outFormat = new Properties(); 
      outFormat.setProperty(OutputKeys.INDENT, "yes"); 
      outFormat.setProperty(OutputKeys.METHOD, "xml"); 
      outFormat.setProperty(OutputKeys.OMIT_XML_DECLARATION, "no"); 
      outFormat.setProperty(OutputKeys.VERSION, "1.0"); 
      outFormat.setProperty(OutputKeys.ENCODING, "UTF-8"); 
      transformer.setOutputProperties(outFormat); 
      DOMSource domSource = new DOMSource(document.getDocumentElement()); 
      OutputStream output = new ByteArrayOutputStream(); 
      StreamResult result = new StreamResult(output); 
      transformer.transform(domSource, result); 
      strXMLInput = output.toString(); 
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); 
Document document = documentBuilder.newDocument(); 
Element rootElement = document.createElement("map"); 
document.appendChild(rootElement); 

Element em = document.createElement("string"); 
em.setAttribute("name", "FirstName"); 
em.appendChild(document.createTextNode("Rita")); 
rootElement.appendChild(em); 

em = document.createElement("string"); 
em.setAttribute("name", "LastName"); 
em.appendChild(document.createTextNode("Roy")); 
rootElement.appendChild(em); 


TransformerFactory factory = TransformerFactory.newInstance(); 
      Transformer transformer = factory.newTransformer(); 
      Properties outFormat = new Properties(); 
      outFormat.setProperty(OutputKeys.INDENT, "yes"); 
      outFormat.setProperty(OutputKeys.METHOD, "xml"); 
      outFormat.setProperty(OutputKeys.OMIT_XML_DECLARATION, "no"); 
      outFormat.setProperty(OutputKeys.VERSION, "1.0"); 
      outFormat.setProperty(OutputKeys.ENCODING, "UTF-8"); 
      transformer.setOutputProperties(outFormat); 
      DOMSource domSource = new DOMSource(document.getDocumentElement()); 
      OutputStream output = new ByteArrayOutputStream(); 
      StreamResult result = new StreamResult(output); 
      transformer.transform(domSource, result); 
      strXMLInput = output.toString(); 
+0

原來,這使得xml已經錯過了放置web服務不接受(duh)的endtag。 刪除它的工作標籤後,所以不會使用這個答案,但它可能有助於防止錯誤放置endtag我會使這是正確的答案。 (對於< >標籤中的html代碼,web服務在發送錯誤時做到了這一點) – Youri

+0

聽起來不錯:)它有多種方式做它;)只需要適合我們:) –