XML Document to String

Portisch

Mitglied
Hallo!

Ich bin neu hier und auch gleichzeitig ein Anfänger in Java.

Per bastelarbeiten habe ich es schon geschafft mir ein XML Document zu erstellen (org.w3c.dom).

Nun möchte ich das Dokument gerne in einen String umwandlen:
Java:
  private static String XMLtoString(Document doc) {
    try {
      TransformerFactory tf = TransformerFactory.newInstance();
      Transformer transformer = tf.newTransformer();
      transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
      StringWriter writer = new StringWriter();
      transformer.transform(new DOMSource(doc), new StreamResult(writer));
      String output = writer.getBuffer().toString().replaceAll("\n|\r", "");
      
      return output;
    } catch(Exception e) {
      System.out.println("Error converting XMl to string");
    } // end of try
    
    return null;
  }

Wenn ich das ganze jetzt auf eine Dummyserver (WampServer) probiere funktioniert es:
Java Plug-in 10.3.0.5
Using JRE version 1.7.0_03-b05 Java HotSpot(TM) 64-Bit Server VM
User home directory = C:\Users\Private
----------------------------------------------------
c: clear console window
f: finalize objects on finalization queue
g: garbage collect
h: display this help message
l: dump classloader list
m: print memory usage
o: trigger logging
q: hide console
r: reload policy configuration
s: dump system and deployment properties
t: dump thread list
v: dump thread stack
x: clear classloader cache
0-5: set trace level to <n>
----------------------------------------------------
Next show doc
<body><version>1.0</version><client>IMaster</client><client_ver>2.1</client_ver><item_list_size>1</item_list_size><item_list><i><n>MyVar</n></i></item_list></body>

Wenn ich es jetzt aber auf den Webserver ausführe auf dem es schlussendlich laufen soll bekomme ich das:
Java Plug-in 10.3.0.5
Using JRE version 1.7.0_03-b05 Java HotSpot(TM) 64-Bit Server VM
User home directory = C:\Users\Private
----------------------------------------------------
c: clear console window
f: finalize objects on finalization queue
g: garbage collect
h: display this help message
l: dump classloader list
m: print memory usage
o: trigger logging
q: hide console
r: reload policy configuration
s: dump system and deployment properties
t: dump thread list
v: dump thread stack
x: clear classloader cache
0-5: set trace level to <n>
----------------------------------------------------
Next show doc
Exception in thread "AWT-EventQueue-2" com.sun.org.apache.xalan.internal.xsltc.dom.ObjectFactory$ConfigurationError: Provider <HTML> not found
at com.sun.org.apache.xalan.internal.xsltc.dom.ObjectFactory.lookUpFactoryClass(Unknown Source)
at com.sun.org.apache.xalan.internal.xsltc.dom.XSLTCDTMManager.getDTMManagerClass(Unknown Source)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl.<init>(Unknown Source)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at java.lang.Class.newInstance0(Unknown Source)
at java.lang.Class.newInstance(Unknown Source)
at javax.xml.transform.FactoryFinder.newInstance(Unknown Source)
at javax.xml.transform.FactoryFinder.find(Unknown Source)
at javax.xml.transform.TransformerFactory.newInstance(Unknown Source)
at DOMExample.XMLtoString(DOMExample.java:132)
at DOMExample.createGetHTTPlist(DOMExample.java:83)
at Value.MeinWert(Value.java:16)
at Ergebnis.paint(Ergebnis.java:17)
at sun.awt.RepaintArea.paintComponent(Unknown Source)
at sun.awt.RepaintArea.paint(Unknown Source)
at sun.awt.windows.WComponentPeer.handleEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

Da ich nun Anfänger bin stehe ich hier voll an.
Ich schätze, dass der Webserver das "Transform" nicht versteht, oder ist hier etwas anderes falsch?
 
Es ist ein integrierter Webserver auf einer Steuerung. Daher weis ich nicht wie ich an die Infos komme was genau darauf läuft.
Java:
      System.out.println("Getting system vars name and version:");
    
      System.out.println(System.getProperty("java.vm.name") + " (build " +
                     System.getProperty("java.vm.version"));
    
      System.out.println("End getting system vars");

spuckt mir das aus:
Getting system vars name and version:
Java HotSpot(TM) 64-Bit Server VM (build 22.1-b02
End getting system vars

Aber ich glaube das ist das System vom PC und nicht vom Server.
In der Beschreibung der Steuerung steht nur sowas:
Supported Platforms
- Java Applet
- MicroBrowser
- NanoBrowser

Ein JAR-File das auf dem Webserver läuft hat ein Manifest.mf drinnen.
Darin steht:
Manifest-Version: 1.0
Created-By: 1.3.0_01 (WebGain, Inc.)

Also muss ich vielleicht das hier zum Erstellen verwenden!?
Java Archive Downloads - Java SE 1.3
 
Zuletzt bearbeitet:
Also wenn ich mir die Docu zu
Java:
TransformerFactory
ansehe steht da "Since 1.5".
Es kann also leicht sein, dass mein Webserver dies noch nicht unterstützt wenn das mit 1.3 wirklich stimmt.

Kann ich den Transformer auch ohne TransformerFactory erzeugen?
Java:
Transformer transformer = new Transformer();

Edit:
Ist es ok, wenn ich mir das alte 1.3.0 SDK dazu installiere und von dort dann den Kompiler verwende?
Dann würde es vielleicht gleich beim kompelieren auffallen das da was nicht geht.
Ob das SDK unter WIN7 x64 läuft ist halt auch so ein Ding.
 
Zuletzt bearbeitet:
Also ich bekomme es nicht hin!

Ich wandle zuerst einen String in ein XML Document:
Java:
  private static Document loadXMLString(String txt) throws Exception{
    DocumentBuilder docBuilder;
    Document doc = null;
    DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
    docBuilderFactory.setIgnoringElementContentWhitespace(true);
    docBuilder = docBuilderFactory.newDocumentBuilder();
    byte [] xmlDATA =txt.getBytes();
    ByteArrayInputStream in = new ByteArrayInputStream(xmlDATA);
    doc = docBuilder.parse(in);
    doc.getDocumentElement().normalize();
    return doc;
  }

Danach bearbeite ich das XML und füge noch eine paar Nodes ein.
Bis daher gibt es keine Probleme.

Nun möchte ich das fertige XML per HTTPRequest, POST an einen Server schicken.
Wenn ich per wr.write direkt einen String übergebe geht alles.
Ich bekomme auch eine Antwort vom Server zurück die passt.

Nur schaffe ich es nicht das XML zu versenden.
Java:
    try {
        URL url = new URL("http://<myIP>/cgi/test.exe");
        URLConnection conn = url.openConnection();
        conn.setDoOutput(true);        
        OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
        wr.write(new String("<body>myXML</body>"));
        wr.flush();

        // Get the response
        BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        String line = rd.readLine();

        if (line != null) {
           xmlDoc = loadXMLString(line);
           NodeList x = xmlDoc.getElementsByTagName("v");
           int i = x.getLength();
           for ( i = 0 ; i < x.getLength() ; i++) {
               myResult[i] = xmlDoc.getElementsByTagName("v").item(i).getFirstChild().getNodeValue();
               System.out.println("Object " + i + "= " + myResult[i]);
           } // end of for
        
        } // end of if

        wr.close();
        rd.close();

    } catch(Exception e) {
      System.out.println("Exception URL");
      e.printStackTrace();
    } // end of try

Die TransformerFactory Class scheint auf dem Webserver nicht verfügbar zu sein und daher weis ich nicht wie ich das XML in einen String umwandeln kann!?

Kann mir da jemand helfen?
 

Neue Themen


Zurück
Oben