Autor Thema: xml Framework als einfache String (Buffer) Konkenatierung (spell.?)  (Gelesen 1953 mal)

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Natürlich gibt es eine Menge xml-frameworks. Aber ist es nicht ziemlicher overkill, mit diesen doch recht mächtigen apis rumzufuhrwerken, nur weil man eine einfache SOAP-Nachricht erstellen will, die über HTTPClient an SAP geschickt wird und dessen Rückgabe dann mit SAX geparsed werden soll.
Das bläht den code unnötig auf und verwirrt die Kunden-Organisation.
Deshalb hab ich ein einfaches xml Framework geschrieben, das xml als eine Baumstruktur ansieht, die erst aufgebaut und dann als String herausgeschrieben wird. Indentierung ist optional. Attribute werden nicht unterstützt, da ich es noch nicht brauche. Wäre aber einfach eine weitere Klasse.

Dieses xml Dokument
Code
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:q0="urn:sap-com:document:sap:rfc:functions" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
	<soapenv:Body>
		<q0:ZZZWF_SEND_DATA_TO_LOTUS_NOTES>
			<WEB_HEADER_DATA>
				<ARCHIVE_DOC_URL>
					dsvsdv
				</ARCHIVE_DOC_URL>
				<DOC_NUMBER>
					12121
				</DOC_NUMBER>
				<COMPANY_CODE>
				</COMPANY_CODE>
			</WEB_HEADER_DATA>
			<WEB_ITEM_DATA>
				<item>
					<DOC_NUMBER>
						213
					</DOC_NUMBER>
					<WF_STATUS_ITEM>
						da
					</WF_STATUS_ITEM>
				</item>
			</WEB_ITEM_DATA>
		</q0:ZZZWF_SEND_DATA_TO_LOTUS_NOTES>
	</soapenv:Body>
</soapenv:Envelope>
wird mit diesem code erzeugt:
Code
XmlRootElement xmlRootElement = new XmlRootElement("<?xml version=\"1.0\" encoding=\"UTF-8\"?>", "soapenv:Envelope", "xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" 
xmlns:q0=\"urn:sap-com:document:sap:rfc:functions\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"", 0);
AXmlElement body = xmlRootElement.addXmlElement(xmlRootElement, "soapenv:Body");
AXmlElement zzwf = xmlRootElement.addXmlElement(body, "q0:ZZZWF_SEND_DATA_TO_LOTUS_NOTES");
AXmlElement webHeaderData = xmlRootElement.addXmlElement(zzwf, "WEB_HEADER_DATA");
xmlRootElement.addXmlElementWithTextContent(webHeaderData, "ARCHIVE_DOC_URL", "dsvsdv");
xmlRootElement.addXmlElementWithTextContent(webHeaderData, "DOC_NUMBER", "12121");
xmlRootElement.addXmlElement(webHeaderData, "COMPANY_CODE");
AXmlElement webItemData = xmlRootElement.addXmlElement(zzwf, "WEB_ITEM_DATA");
AXmlElement item = xmlRootElement.addXmlElement(webItemData, "item");
xmlRootElement.addXmlElementWithTextContent(item, "DOC_NUMBER", "213");
xmlRootElement.addXmlElementWithTextContent(item, "WF_STATUS_ITEM", "da");

System.out.println(xmlRootElement.toXml());
Man kann das noch weiter verkürzen. Ich halte das für eine Menge Aufgaben für effizienter als Dom, JDom und wie sie alle heissen.

Falls jemand Interesse hat, kann ich das verschicken. Nach meinen Problemen mit stubby, denke ich darüber nach meine low level Art der Webservice Programmierung, die für SOAP und REST in Domino funktioniert, zu openSourcen. Keine Probleme mit reverse proxys (offenbar im Gegenteil zu stubby), wirklich transparent und erzeugt nicht Unmengen von Klassen wie Axis und alles, das darauf beruht (stubby z.B.)

In den Methoden gibt man einfach als ersten Parameter den Parent der Node an. Es gibt spezielle Factory-Methoden für einfache Elemente, Elemente mit Namespace-Deklarationen, Elemente mit Text-Inhalt sowie Elemente mit Namespace-Deklarationen und Text-Inhalt.
Den so aufgestellten Baum kann man dann mit einer einfachen toXml() Methode als xml ausgeben.
Man könnte das auch für Json erweitern.

Gruß Axel 
« Letzte Änderung: 04.04.09 - 02:19:24 von Pitiyankee »
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz