-
JDOM / XML Problem
Hallo zusammen,
ich habe ein Problem im Bereich XML Generierung. Kurzer Sachverhalt:
Eine Internetseite schickt eine Anfrage per XML an uns. Diese wird zunächst von einem JAVA Programm, welches sich auf einem Linuxserver (verwendet tomcat) in der DMZ befindet, bearbeitet und dann über eine .pcml an ein RPG Programm übergeben. Dieses Programm liefert dann wieder eine XML als Antwort welche dann an den Sender zurückgeschickt wird.
meine erste Vermutung:
irgendwas stimmt hier nicht ...
mein Problem:
Das Javaprogramm bringt seit ein paar Tagen nur noch einen Timeout zurück.
Am Programm selbst wurde aber anscheinend nichts geändert.
Da das Programm nicht von mir ist und ich hier kaum Java programmiere fällt es mir jetzt nicht ganz einfach den Fehler zu finden. Folgendes konnte ich schon testen:
Das Programm bekommt Daten zugeschickt,
(req.getContentLength() ist größer -1)
kann aber folgeden Zeile nicht ausführen:
InputStream iStream = req.getInputStream();
Code:
protected void getXMLRequest(HttpServletRequest req) throws IOException,
JDOMException {
if (req.getContentLength() == -1) {
log("contentlänge == -1");
return;
} else {
DOMBuilder builder = new DOMBuilder(true);
InputStream iStream = req.getInputStream();
XMLRequest = builder.build(iStream);
iStream.close();
return;
}
}
auf der Linuxconsole bekomme ich folgende Fehlermeldung:
Code:
org.jdom.JDOMException: Error on line 2: org.apache.crimson.parser/P-082 http://www.....de/shop/dtd/...dtd
at org.jdom.input.DOMBuilder.build(DOMBuilder.java:274)
at Lieferterminanfrage.getXMLRequest(Lieferterminanfrage.java:52)
at Lieferterminanfrage.service(Lieferterminanfrage.java:92)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.tomcat.core.ServletWrapper.handleRequest(ServletWrapper.java:503)
at org.apache.tomcat.core.ServletWrapper.handleRequest(ServletWrapper.java:597)
at org.apache.tomcat.servlets.InvokerServlet.service(InvokerServlet.java:257)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.tomcat.core.ServletWrapper.handleRequest(ServletWrapper.java:503)
at org.apache.tomcat.core.ContextManager.service(ContextManager.java:559)
at org.apache.tomcat.service.http.HttpConnectionHandler.processConnection(HttpConnectionHandler.java:160)
at org.apache.tomcat.service.TcpConnectionThread.run(SimpleTcpEndpoint.java:338)
at java.lang.Thread.run(Thread.java:484)
Root cause: java.net.NoRouteToHostException: Die Wartezeit für die Verbindung ist abgelaufen
at org.apache.crimson.parser.Parser2.fatal(Parser2.java:3035)
at org.apache.crimson.parser.Parser2.externalParameterEntity(Parser2.java:2723)
at org.apache.crimson.parser.Parser2.maybeDoctypeDecl(Parser2.java:1154)
at org.apache.crimson.parser.Parser2.parseInternal(Parser2.java:488)
at org.apache.crimson.parser.Parser2.parse(Parser2.java:304)
at org.apache.crimson.parser.XMLReaderImpl.parse(XMLReaderImpl.java:433)
at org.apache.crimson.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:179)
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:86)
at java.lang.reflect.Method.invoke(Native Method)
at org.jdom.adapters.JAXPDOMAdapter.getDocument(JAXPDOMAdapter.java:146)
at org.jdom.input.DOMBuilder.build(DOMBuilder.java:230)
at Lieferterminanfrage.getXMLRequest(Lieferterminanfrage.java:52)
at Lieferterminanfrage.service(Lieferterminanfrage.java:92)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.tomcat.core.ServletWrapper.handleRequest(ServletWrapper.java:503)
at org.apache.tomcat.core.ServletWrapper.handleRequest(ServletWrapper.java:597)
at org.apache.tomcat.servlets.InvokerServlet.service(InvokerServlet.java:257)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.tomcat.core.ServletWrapper.handleRequest(ServletWrapper.java:503)
at org.apache.tomcat.core.ContextManager.service(ContextManager.java:559)
at org.apache.tomcat.service.http.HttpConnectionHandler.processConnection(HttpConnectionHandler.java:160)
at org.apache.tomcat.service.TcpConnectionThread.run(SimpleTcpEndpoint.java:338)
at java.lang.Thread.run(Thread.java:484)
mit dieser Meldung kann ich halt leider nicht viel anfangen ... kann mir hier vielleicht jmd. helfen?
Wie kann es zu so einem Fehler kommen?
Wurde der tomcat vielleicht falsch gestartet?
Fehlen vielleicht die Zusatzklassen jdom.jar, servlet.jar ... ?
Muss man hier etwas beim Kompilieren beachten? -> Ort der Zusatzklassen lokal und auf dem Server?
Bin um jeden Tip dankbar ...
mfg - Drittaccount
-
So wie die Fehlermeldung aussieht (das ist die Erste), kann der Parser das XML-Dokument nicht verarbeiten, da es der zugeordneten DTD nicht entspricht.
Der Fehler scheint aber nicht abgefangen zu werden, so dass das Java-Programm eben stirbt.
-
Ich denke, dass die falsche XML-Validierung ein Folgefehler ist.
Der vorangegangene Fehler java.net.NoRouteToHostException:
mit Zeitüberlauf weißt auf ein Netzwerkproblem hin.
Normalerweise hat man dieses Problem bei Socketkommunikation, wenn das System keinen Rückkanal aufbauen kann.
Auf einem Webserver wundert mich das zwar, aber wer weiß.
1.) Kannst auch eine Anfrage auch innerhalb der DMZ stellen?
2.) Kannst du an den Javaprogrammen was ändern?
3.) Außerdem habe ich etwas Zweifel an der Fehlerzeile "InputStream iStream ...".
Der Stacktrace zeigt JDOM-Programme, in dieser Zeile sind nur Java.io.* und das Servlet - nocheinmal prüfen!
/Robert
-
@RobertPic:
zu Punk1:
Wäre denke ich möglich, aber mit viel Aufwand.
zu Punkt 2:
die Quellen liegen vor. Ich kann also den Code ändern.
zu Punkt 3:
ich habe folgendes getestet:
Code:
if (req.getContentLength() == -1) {
log("contentlänge == -1");
return;
} else {
DOMBuilder builder = new DOMBuilder(true);
log("DOMBuilder builder = new DOMBuilder(true);");
InputStream iStream = req.getInputStream();
log("InputStream iStream = req.getInputStream();");
XMLRequest = builder.build(iStream);
log("XMLRequest = builder.build(iStream);");
iStream.close();
log("iStream.close();");
return;
}
wenn er also eine Logzeile schreibt hat er auch den Befehl ausgeführt ...
XMLRequest = builder.build(iStream); wird leider nicht ausgeführt.
mfg - Drittaccount
-
Hallo
Baue Folgendes nach dem InputStream =... (bzw. log) ein:
PHP-Code:
StringBuffer xml = new StringBuffer(); byte[] b = new byte[4096]; for (int n; (n = iStream.read(b)) != -1;) { xml.append(new String(b, 0, n)); } ByteArrayInputStream xmlStream = new ByteArrayInputStream(xml.toString().getBytes());
danach noch ein
log("XML-Inhalt: " + xml);
und dahinter musst du den build(iStream) durch build(xmlStream) ersetzen.
Wenn es keine Netzwerkproblem ist, solltest du die Anfrage im Log haben und weiterforschen können. Wenn er jetzt in der Schleife verstirbt, ist es zu 99,9% kein XML-Problem.
Der Teil ist nicht besonders sauber geschrieben (beim Hin- und Herwandeln könnten Umlaute verloren gehen), also nach der Problembehebung besser wieder entfernen.
/Robert
-
@RobertPic:
Vielen Dank für deinen Tip. Im Log kommt jetzt die XML-Anfrage an.
Es scheint also kein Netzwerkproblem zu sein.
Leider funktioniert der XMLRequest = builder.build(xmlStream); aber auch nicht ...
Woran kann das liegen ?
mfg - Drittaccount
-
@Fuerchau:
So wie die Fehlermeldung aussieht (das ist die Erste), kann der Parser das XML-Dokument nicht verarbeiten, da es der zugeordneten DTD nicht entspricht.
Möglicherweise stimmt ja hier was nicht ... ich finde zwar keinen Fehler, aber vielleicht übersehe ich ja etwas.
Also im Log kommt folgendes an:
Code:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE LieferterminanfrageKopf SYSTEM "http://www.shk-branchenportal.de/shop/dtd/LieferterminanfrageKopf.dtd">
<LieferterminanfrageKopf>
<Message id="0000000112435" sender="1331" receiver="121" passwd="test"/>
<Auftragsdaten>
<kndnr>001100</kndnr>
<ordernr>A00XXXXXXX</ordernr>
<ghbnr></ghbnr>
<datumvon></datumvon>
<datumbis></datumbis>
</Auftragsdaten>
</LieferterminanfrageKopf>
Und die Layoutdatei:
http://www.shk-branchenportal.de/shop/dtd/LieferterminanfrageKopf.dtd
Code:
<!ELEMENT LieferterminanfrageKopf (Message, Auftragsdaten)>
<!ELEMENT Message EMPTY>
<!ATTLIST Message
id CDATA #REQUIRED
sender CDATA #REQUIRED
receiver CDATA #REQUIRED
passwd CDATA #IMPLIED>
<!ELEMENT Auftragsdaten (kndnr, ordernr?, ghbnr?, datumvon?, datumbis?)>
<!ELEMENT kndnr (#PCDATA)>
<!ELEMENT ordernr (#PCDATA)>
<!ELEMENT ghbnr (#PCDATA)>
<!ELEMENT datumvon (#PCDATA)>
<!ELEMENT datumbis (#PCDATA)>
mfg - Drittaccount
-
Kommt jetzt immer noch die Exception vom 1. Posting?
Wenn ja, tippe ich darauf, dass er beim Versuch das DTD-File zu lesen (über http) nicht ins Internet kommt.
/Robert
-
@RobertPic:
du meinst warscheinlich diese hier:
( -> also doch ein Netzwerkproblem ?!)
dann werd ich wohl einen unserer Netzwerkspezialisten aufsuchen müssen ...
Vielen Dank nochmals für die Unterstützung.
Code:
org.jdom.JDOMException: Error on line 2: org.apache.crimson.parser/P-082 http://www.shk-branchenportal.de/sho...nfrageKopf.dtd
at org.jdom.input.DOMBuilder.build(DOMBuilder.java:274)
at Lieferterminanfrage.getXMLRequest(Lieferterminanfrage.java:72)
at Lieferterminanfrage.service(Lieferterminanfrage.java:121)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.tomcat.core.ServletWrapper.handleRequest(ServletWrapper.java:503)
at org.apache.tomcat.core.ServletWrapper.handleRequest(ServletWrapper.java:597)
at org.apache.tomcat.servlets.InvokerServlet.service(InvokerServlet.java:257)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.tomcat.core.ServletWrapper.handleRequest(ServletWrapper.java:503)
at org.apache.tomcat.core.ContextManager.service(ContextManager.java:559)
at org.apache.tomcat.service.http.HttpConnectionHandler.processConnection(HttpConnectionHandler.java:160)
at org.apache.tomcat.service.TcpConnectionThread.run(SimpleTcpEndpoint.java:338)
at java.lang.Thread.run(Thread.java:484)
Root cause: java.net.NoRouteToHostException: Die Wartezeit für die Verbindung ist abgelaufen
at org.apache.crimson.parser.Parser2.fatal(Parser2.java:3035)
at org.apache.crimson.parser.Parser2.externalParameterEntity(Parser2.java:2723)
at org.apache.crimson.parser.Parser2.maybeDoctypeDecl(Parser2.java:1154)
at org.apache.crimson.parser.Parser2.parseInternal(Parser2.java:488)
at org.apache.crimson.parser.Parser2.parse(Parser2.java:304)
at org.apache.crimson.parser.XMLReaderImpl.parse(XMLReaderImpl.java:433)
at org.apache.crimson.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:179)
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:86)
at java.lang.reflect.Method.invoke(Native Method)
at org.jdom.adapters.JAXPDOMAdapter.getDocument(JAXPDOMAdapter.java:146)
at org.jdom.input.DOMBuilder.build(DOMBuilder.java:230)
at Lieferterminanfrage.getXMLRequest(Lieferterminanfrage.java:72)
at Lieferterminanfrage.service(Lieferterminanfrage.java:121)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.tomcat.core.ServletWrapper.handleRequest(ServletWrapper.java:503)
at org.apache.tomcat.core.ServletWrapper.handleRequest(ServletWrapper.java:597)
at org.apache.tomcat.servlets.InvokerServlet.service(InvokerServlet.java:257)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.tomcat.core.ServletWrapper.handleRequest(ServletWrapper.java:503)
at org.apache.tomcat.core.ContextManager.service(ContextManager.java:559)
at org.apache.tomcat.service.http.HttpConnectionHandler.processConnection(HttpConnectionHandler.java:160)
at org.apache.tomcat.service.TcpConnectionThread.run(SimpleTcpEndpoint.java:338)
at java.lang.Thread.run(Thread.java:484)
mfg - Drittaccount
-
Du kannst den Fehler noch weiter einschränken, führe auf dem Linuxserver folgendes Befehle aus:
1.) Kann die Adresse als IP umgesetzt werden? Anm. Das Webserver nicht auf Pings antworten, ist normal. Es geht darum, ob der Name aufgelöst werden kann.
Code:
ping www.shk-branchenportal.de
2.) Download der Datei
Code:
wget http://www.shk-branchenportal.de/shop/dtd/LieferterminanfrageKopf.dtd
Linuxbefehl zum Downloaden einer html-Seite. Liefert vielleicht noch genauere Fehler.
/Robert
-
» zu Punkt 1:
Code:
ping www.shk-branchenportal.de
PING www.shk-branchenportal.de (80.66.16.142): 56 data bytes
Die Adresse scheint er also richtig aufzulösen ...
» zu Punkt 2:
Code:
wget http://www.shk-branchenportal.de/shop/dtd/LieferterminanfrageKopf.dtd
--14:32:43-- http://www.shk-branchenportal.de:80/shop/dtd/LieferterminanfrageKopf.dtd
=> `LieferterminanfrageKopf.dtd'
Connecting to www.shk-branchenportal.de:80...
connect: Connection timed out
Retrying.
--14:35:52-- http://www.shk-branchenportal.de:80/shop/dtd/LieferterminanfrageKopf.dtd
(try: 2) => `LieferterminanfrageKopf.dtd'
Connecting to www.shk-branchenportal.de:80...
connect: Connection timed out
Retrying.
--14:39:01-- http://www.shk-branchenportal.de:80/shop/dtd/LieferterminanfrageKopf.dtd
(try: 3) => `LieferterminanfrageKopf.dtd'
Connecting to www.shk-branchenportal.de:80...
connect: Connection timed out
Retrying.
--14:42:10-- http://www.shk-branchenportal.de:80/shop/dtd/LieferterminanfrageKopf.dtd
(try: 4) => `LieferterminanfrageKopf.dtd'
Connecting to www.shk-branchenportal.de:80...
Wie du schon richtig getippt hast hat der Linuxserver wohl wirklich Probleme mit dem Herunterladen der .dtd Datei.
mfg - Drittaccount
-
Noch ein letzter Hinweis: Das Problem kann am Linuxserver oder an der Firewall liegen.
Wenn es vorher ging, müsst ihr irgendwas daran verstellt haben.
/Robert
Similar Threads
-
By Stoeberl in forum NEWSboard Programmierung
Antworten: 8
Letzter Beitrag: 10-01-07, 10:58
-
By vige1000 in forum NEWSboard Linux
Antworten: 4
Letzter Beitrag: 21-12-06, 11:56
-
By Stoeberl in forum NEWSboard Programmierung
Antworten: 11
Letzter Beitrag: 26-10-06, 10:07
-
By Flappes in forum IBM i Hauptforum
Antworten: 0
Letzter Beitrag: 06-10-06, 08:39
-
By MikRom in forum NEWSboard Programmierung
Antworten: 1
Letzter Beitrag: 15-08-05, 09:06
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks