StreamSource parsen !

Status
Nicht offen für weitere Antworten.

Robson

Aktives Mitglied
Hallo,
Folgendes Szenario:

Ich sauge mir wie folgt einen StreamSource:

Code:
StreamSource xmlSource = new StreamSource(in);

über das XML was ich dort einlese lasse ich nen Mapping drüber laufen.
um aber herauszufinden welches Mapping er ausführen soll muss ich auf ein Attribut der XML Datei zugreifen.

Jetzt will ich aus dem Stream Source "xmlSource" mit dem DocumentBuilder ein XML Document erzeugen.
So das ich wie folgt auf das Element zugreifen kann:

CodeTeil A:
Code:
Element mess = (Element) XMLdoc.getElementsByTagName("REQUEST");
		String aname = mess.getAttribute("NAME");
		String adtd = mess.getAttribute("DTD");
		InputStream xslmapping = null;
		String service_methode = adtd+aname;

Das funktioniert aber nicht.
Ich versucht den StreamSourcewie folgt zu Parsen:
Code:
XMLdoc = builder.parse(xmlSource);
und
Code:
XMLdoc = (Document) new StreamSource(xmlSource);

Das Resultat ist immer das ich eine NullPointerException in der 1. Zeil von CodeTeil A bekomme.
Was halt daran liegt das er das ELEMENT "REQUEST" nicht findet, weil er den StreamSource nicht richtig ins DOCUMENT parst.

Um Hilfe wäre ich sehr Dankbar ,
Gruss
Robson
 

Bleiglanz

Gesperrter Benutzer
über das XML was ich dort einlese lasse ich nen Mapping drüber laufen.
sprichst du auch Deutsch?
was ist ein "Mapping"?

vermutlich brauchst du sowas wie einen XMLFilter?

Wahrscheinlich ist dein Problem, dass du nicht "zweimal" die gleiche Streamsource parsen kannst? oder was?
 

Robson

Aktives Mitglied
mit Mapping meine ich ein XSLT-Mapping.

Das Programm soll folgendes tun ...
es bekommt ein XML File -> da liest es aus dem REQUEST ELEMENT ein Attribute.
für ein Bestimmtes Attribute soll er ein Bestimmtes XSLT-Mapping laden.

Hier nochmal der Komplette Code um das etwas zu veranschaulichen.

Code:
public class StyleSheetLoader2 implements StreamTransformation{
	
	public void setParameter (Map param) {}

	public void execute (InputStream in, OutputStream out)
		throws com.sap.aii.mapping.api.StreamTransformationException {

		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		Document XMLdoc = null;
		StreamSource xmlSource = new StreamSource(in);
		
		//InputStream xslMap = this.getClass().getClassLoader().getResourceAsStream("PRECHECK2.xsl");
		try {
			DocumentBuilder builder = factory.newDocumentBuilder();
//Hier der Fehler ==> XMLdoc = (Document) new StreamSource(xmlSource);
					//XMLdoc= builder.parse(xmlSource);
		} catch (Throwable t) {
			t.printStackTrace();
		}

		Element mess = (Element) XMLdoc.getElementsByTagName("REQUEST");
		String aname = mess.getAttribute("NAME");
		String adtd = mess.getAttribute("DTD");
		InputStream xslmapping = null;
		String service_methode = adtd+aname;
		
			if (service_methode.equals("ShopDataGetStockInformation")) {			
				xslmapping = this.getClass().getClassLoader().getResourceAsStream("Check_SD_GS.xsl");
			}

		/*		else if (service_methode.equals("<ServiceMethode>")) {						
				xslSource = nthis.getClass().getClassLoader().getResourceAsStream("<xsl Mapping>");
				}
		*/
				else{	
				xslmapping = this.getClass().getClassLoader().getResourceAsStream("ServNotFound.xsl");
				}
		
		try {
			//StreamSource xmlSource = new StreamSource(in);
			StreamSource xslSource = new StreamSource(xslmapping);
			ByteArrayOutputStream pos = new ByteArrayOutputStream();
			StreamResult result = new StreamResult(out);
						
			TransformerFactory tfactory = TransformerFactory.newInstance();
			Templates template = tfactory.newTemplates(xslSource);
			Transformer transformer = template.newTransformer();
			transformer.transform(xmlSource, result);
								
			} catch (TransformerConfigurationException e) {
				e.printStackTrace();
			} catch (TransformerFactoryConfigurationError e) {
				e.printStackTrace();
			} catch (TransformerException e) {
				e.printStackTrace();
		}		
	}
}
 

Bleiglanz

Gesperrter Benutzer
OK, der Ansatz schaut vernünftig aus, aber die Zeile
Code:
XMLdoc = (Document) new StreamSource(xmlSource);
ist ja wohl Schrott (eine StreamSource kannst du nicht zu Document casten)
Code:
 XMLdoc = builder.parse(xmlSource);
schaut schon besser aus :)
Code:
catch (Throwable t) {
         t.printStackTrace();
wer hat dir denn das gelernt? Mach mal lieber eine vernüftige Fehlerbehandlung, fange die richtigen Exceptions (IO? Parse???) und schau z.B. nach, ob xmlSource != null usw.

der Fehler dürfte sein, dass
Code:
        DocumentBuilder builder = factory.newDocumentBuilder();
//Hier der Fehler ==> XMLdoc = (Document) new StreamSource(xmlSource);
               //XMLdoc= builder.parse(xmlSource);
in der erste Zeile eine ClassCastException oder sowas fliegt

dein Catch-Block alles verschluckt (und du nicht schaust, wohin der Stacktrace geschrieben wird)

dann wird die Zeile mit dem builder.parse nicht erreicht und XMLDoc ist ==null und es geht nach dem catch einfach weiter

und beim getElementByName fliegt dann die NPE
 

Robson

Aktives Mitglied
er schmeisst eine ClassCastException in folgender Zeile

Code:
Element reqtag = (Element)XMLdoc.getElementsByTagName("REQUEST");

ist da den was faul ?

wen ich das XMLdoc jetzt so einlese

Code:
XMLdoc= builder.parse(in);

müsste er den Schritt doch machen ???:L
 

Robson

Aktives Mitglied
is mir schon klar.

Aber wenn ich ne NodeLost erzeuge, kann ich nicht mit getAttributes den Wert der Attribute in einen String Schreiben.

dan gäbes es noch getDocumentElement(), aber da kann ich ihm keinen String mitgeben und er nimmt glaub ich nur das root Element.
Dort sind aber nicht die Attribute die ich brauche, die sind im Element "REQUEST".

wieso gibt es nicht einfach getElementsByTagName(String) welches das Ergebnis in ein ELEMENT schreibt.
das ergibt doch keinen Sinn :autsch:

Es muss doch möglich sein Ein Attribut eines Bestimmtes Elements in einen String zu schreiben... sowas wird doch ständig gebraucht .. ich kan doch net der einzigste sein der Sowas brauch.
 

Bleiglanz

Gesperrter Benutzer
weil es möglicherweise mehr als ein element mit einem Tagnamen gibt;

wenn du schon vorher weisst, dass es genau eines gibt, dann nimm halt das erste Element der NodeList

Element brauchich = (Element) XMLdoc.getElementsByTagName("REQUEST").item(0);
 

Robson

Aktives Mitglied
ahhh ich voll Depp :autsch:

Vielen Vielen Dank für deine Mühe :toll:

da ist man 2 Tage beschäftigt weil einem ein kleines ".item(0)" fehlt

Gruss
Rob
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
MiMa Buch Metadaten aus XML Datei parsen XML & JSON 48
S XML Document Parsen und Ausgeben mit Suchfunktion XML & JSON 21
M parsen von realen HTML-WEB-Seiten XML & JSON 1
MiMa parsen mit regex -> ein schnelles Ende XML & JSON 10
K Beim Parsen einer XML-Datei Connection timed out XML & JSON 4
F Parsen von Daten aus einer Homepage XML & JSON 6
G Langsam beim SAX-Parsen - woran liegts? XML & JSON 2
C Parsen des XML-Streams mit SAX XML & JSON 3
M XML Datei Parsen XML & JSON 4
D SAX parsen - Wie? XML & JSON 11
S XML Parsen und Werte zwischenspeichern XML & JSON 2
K Kurze XML Datei Parsen XML & JSON 5
whitenexx Problem beim parsen von Facebook XML XML & JSON 3
J Comments in XML parsen XML & JSON 3
H Nicht wohlgeformtes XML mit SAX parsen XML & JSON 2
M XML Parsen JDOM NullPointerEcxeption XML & JSON 7
Z XML parsen - Element mit Werten XML & JSON 2
ruutaiokwu xml nur bis auf eine bestimmte ebene parsen mit javax.xml... XML & JSON 5
L [SAX] Geschachtelte XML Datei parsen XML & JSON 3
R XML in UTF-8 mit SAX parsen XML & JSON 9
O Parsen einer XML mit JDOM ohne Doctype Declaration XML & JSON 2
F Probleme beim html parsen mit tagsoup XML & JSON 4
M Probleme beim Parsen eines gefilterten XML-Dokuments XML & JSON 6
Semox Kann JUnit XML Parsen? XML & JSON 2
L Reihenfolge beim xml Datei parsen einhalten? XML & JSON 8
L xml Datei parsen ohne End-Tag XML & JSON 6
T RSS-Feed parsen und in Datenbank speichern XML & JSON 6
B XML parsen XML & JSON 3
H XML parsen und unbekannten Namespace zurückgeben XML & JSON 5
L invalide xml document parsen?! XML & JSON 2
S DOM Parsen Problem mit HTML Sonderzeichen XML & JSON 4
ABstraCT XML properties am einfachsten parsen. XML & JSON 2
U xmi parsen über emf XML & JSON 10
S XML-Schema einlesen um parsen zu erleichtern? XML & JSON 2
T Problem beim Parsen von Attribut xmlns="urn:com:test&qu XML & JSON 6
P XMLGregorianCalender parsen XML & JSON 4
M Datei parsen XML & JSON 5
S HTML mit dom4j parsen? XML & JSON 2
X XML File auslesen/parsen u. in ne Hashmap speichern XML & JSON 2
Saxony unbekannte XML Datei parsen und ausgeben XML & JSON 10
P "Formatierungs-Tags" parsen XML & JSON 3
M Attribute parsen XML & JSON 6
R Parsen einer XML ohne Validierung XML & JSON 2
D XML Datei innerhalb einer JAR Datei parsen XML & JSON 2
M Xerces -Parsen mit einer externen Schemadatei geht nicht XML & JSON 2
L bz2-Datei parsen XML & JSON 9
K XML parsen Whitespaces XML & JSON 2
I XML-String mit SAX parsen ? XML & JSON 2
M Object in XML parsen XML & JSON 2
byte Probleme beim Parsen von XHTML-Datei XML & JSON 4
P HTML Seite Parsen, und bestimmten Text extrahieren XML & JSON 3
X xml und xsl parsen mit xerces XML & JSON 8
W Xml-String parsen XML & JSON 2
W root element parsen,Hilfe! XML & JSON 5
F Gibt es Möglichkeiten Deutsche Sätze zu parsen ? XML & JSON 2
A Auf der Suche nach Bibliotheken oder wie parsen? XML & JSON 15
S XML Datei mit Schemafehler parsen XML & JSON 14
R RSS parsen XML & JSON 2
K XML Datei parsen XML & JSON 4

Ähnliche Java Themen

Neue Themen


Oben