POST REQUEST: XmlDocument mit getInputStream einlesen!

Status
Nicht offen für weitere Antworten.

Robson

Aktives Mitglied
Hallo, 8)

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

so sieht das ganze aus.

Code:
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

Aktives Mitglied
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)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:284)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:204)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:257)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:567)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:245)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:199)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:567)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:184)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:164)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:149)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:567)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:156)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:567)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:972)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:206)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:833)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:732)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:619)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:688)
at java.lang.Thread.run(Unknown Source)
 

Bleiglanz

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

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

Robson

Aktives Mitglied
Code:
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

Gesperrter Benutzer
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

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

Code:
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);
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben