# POST REQUEST: XmlDocument mit getInputStream einlesen!



## Robson (8. Sep 2004)

Hallo,  8) 

ich weiss ich bin kurz vor dem durchbruch  :wink: 
brauch nur noch eine kleine Hilfe.

so sieht das ganze aus.


```
ServletInputStream inputstream = request.getInputStream();

			XmlDocument XMLdoc = null;
			DocumentBuilderFactory factory =
			DocumentBuilderFactory.newInstance();
			DocumentBuilder builder = null;
		
                                                try {
				builder = factory.newDocumentBuilder();
			} catch (ParserConfigurationException e) {
				e.printStackTrace();
			}
			
			try {
				XMLdoc = (XmlDocument)builder.parse(inputstream);
			} catch (SAXException e1) {
				e1.printStackTrace();
			} catch (IOException e1) {
				e1.printStackTrace();
			}
```

Wenn ich ihm jetzt nen POST  Request mit ner XML nachricht im Body schicke reagiert er gar nicht.
Wenn ich aber ne ungültige XML Schicke. z.b lass ich nen Attribute weg oder so meldet er den Richtigen fehler.
Also gehe ich davon aus das er eine XML nachricht erwarte. Und auch erkennt wenn an ihr was falsch ist.
Aber wieso tut er bei einer Richtigen gar nichts?


----------



## Robson (8. Sep 2004)

also laut der Antwort des Server fällt er in folgender Zeile auf die Nase



> XMLdoc = (XmlDocument)builder.parse(inputstream);



hab auch noch die Fehlermeldung gefunden 



> 2004-09-08 15:44:44 StandardWrapperValve[Doorlock]: Servlet.service() for servlet Doorlock threw exception
> java.lang.ClassCastException
> at doorlock.Doorlock.doPost(Doorlock.java:158)
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
> ...


----------



## Bleiglanz (8. Sep 2004)

lies erstmal den InputStream in einen String ein und lass dir das Ergebnis anzeigen!

what is at doorlock.Doorlock.doPost(Doorlock.java:158)


----------



## Robson (8. Sep 2004)

Bleiglanz hat gesagt.:
			
		

> what is at doorlock.Doorlock.doPost(Doorlock.java:158)




```
XMLdoc = (XmlDocument)builder.parse(inputstream);
```


----------



## Robson (8. Sep 2004)

```
XMLdoc = builder.parse(inputstream);
```

juhuu ! so gehts  :lol: allerdings setzt er noch nen _[#document: null]_ vor die XML Message .. weiss jemand zufällig wo das wegkommt?


----------



## Bleiglanz (8. Sep 2004)

lies erstmal den InputStream in einen String ein und lass dir das Ergebnis anzeigen! 

Und was soll XmlDocument sein - nimmst du jetzt wieder JDOM!?!

Document doc = usw....


----------



## Robson (8. Sep 2004)

so hab ich es jetzt und es funktioniert Bombig  :lol: 


```
tring remoteIP = request.getRemoteAddr();
			System.out.println("Message from: "+remoteIP);
		
			ServletInputStream inputstream = request.getInputStream();

			Document XMLdoc = null;
			DocumentBuilderFactory factory =
			DocumentBuilderFactory.newInstance();
			DocumentBuilder builder = null;
			
			try {
				builder = factory.newDocumentBuilder();
			} catch (ParserConfigurationException e) {
				e.printStackTrace();
			}
			
			try {
				XMLdoc = builder.parse(inputstream);
			} catch (SAXException e1) {
				e1.printStackTrace();
			} catch (IOException e1) {
				e1.printStackTrace();
			}
	
	Element mess = (Element) XMLdoc.getElementsByTagName("MESSAGE").item(0); 
    mess.setAttribute("IP",remoteIP); 
    TransformerFactory tFactory = TransformerFactory.newInstance(); 
    Transformer transformer = null;
		
    try {
			transformer = tFactory.newTransformer();
			} catch (TransformerConfigurationException e2) {
			e2.printStackTrace();
			}
			
	DOMSource source = new DOMSource(XMLdoc); 
    StringWriter resultStringBuffer = new StringWriter(); 
    	
    try {
    		transformer.transform(source, new StreamResult(resultStringBuffer));
			} catch (TransformerException e3) {
			e3.printStackTrace();
			} 
    
	String result = resultStringBuffer.toString(); 
	System.out.println(result);
```


----------

