# XML aus WebService rausquetschen



## robelr (24. Mai 2007)

Hallo,

ich hab ein Problem. Ich moechte ueber einen WebService XML zurueckgeben. 
Ich komm eigentlich aus der .NET / C# Ecke. Dort ist das kein Problem,
es wird einfach ein XMLDocument zurueckgegeben.

In Java scheint das aber nicht so einfach zu gehen. 
Ich hab jdom.jar importiert und wollte ein Document zurueckgeben.
Nun bekomm ich immer diese Fehler


```
error: The type of the getter is java.util.List but that of the setter is java.util.Collection. They have to be the same.
        this problem is related to the following location:
                at org.jdom.Document.getContent (Unknown Source)
                at org.jdom.Document (Unknown Source)
                at universal.music.jarticleservice.core.jaxws.GetXmlArticleResponse._return(GetXmlArticleResponse.java:17)
                at universal.music.jarticleservice.core.jaxws.GetXmlArticleResponse(GetXmlArticleResponse.java:14)
        this problem is related to the following location:
                at org.jdom.Document.setContent (Unknown Source)
                at org.jdom.Document (Unknown Source)
                at universal.music.jarticleservice.core.jaxws.GetXmlArticleResponse._return(GetXmlArticleResponse.java:17)
                at universal.music.jarticleservice.core.jaxws.GetXmlArticleResponse(GetXmlArticleResponse.java:14)
error: The type of the getter is java.util.List but that of the setter is java.util.Collection. They have to be the same.
        this problem is related to the following location:
                at org.jdom.Element.getContent (Unknown Source)
                at org.jdom.Element (Unknown Source)
                at org.jdom.Document.getRootElement (Unknown Source)
                at org.jdom.Document (Unknown Source)
                at universal.music.jarticleservice.core.jaxws.GetXmlArticleResponse._return(GetXmlArticleResponse.java:17)
                at universal.music.jarticleservice.core.jaxws.GetXmlArticleResponse(GetXmlArticleResponse.java:14)
        this problem is related to the following location:
                at org.jdom.Element.setContent (Unknown Source)
                at org.jdom.Element (Unknown Source)
                at org.jdom.Document.getRootElement (Unknown Source)
                at org.jdom.Document (Unknown Source)
                at universal.music.jarticleservice.core.jaxws.GetXmlArticleResponse._return(GetXmlArticleResponse.java:17)
                at universal.music.jarticleservice.core.jaxws.GetXmlArticleResponse(GetXmlArticleResponse.java:14)
error: org.jdom.Namespace does not have a no-arg default constructor.
        this problem is related to the following location:
                at org.jdom.Namespace (Unknown Source)
                at org.jdom.Element.getNamespace (Unknown Source)
                at org.jdom.Element (Unknown Source)
                at org.jdom.Document.getRootElement (Unknown Source)
                at org.jdom.Document (Unknown Source)
                at universal.music.jarticleservice.core.jaxws.GetXmlArticleResponse._return(GetXmlArticleResponse.java:17)
                at universal.music.jarticleservice.core.jaxws.GetXmlArticleResponse(GetXmlArticleResponse.java:14)
3 errors
error: compilation failed, errors should have been reported
```

das ist die Methode die eigentlich nur ein XML Dokument zurueckgeben soll


```
public org.jdom.Document getXmlArticle(@WebParam(name = "barcode") String barcode) {
        try {
            
        SAXBuilder builder = new SAXBuilder(false);
        String XML = "<lebewesen><hund><name>test</test><alter>12</alter></hund></lebewesen>";
        
        InputSource in = new InputSource(XML);
        Document doc = builder.build(in);
        
        return doc;
        
        } catch (Exception ex) 
        {
            return null;
        }
    }
```

So, was kann ich jetzt tun??


----------



## EOB (24. Mai 2007)

damit kenn ich micht sooo gut aus, aber mir scheint, als stünde es ja eigentlich da....irgendwelche setter und getter passen nicht. was hast du noch so selber geschrieben?

grüße


----------



## robelr (24. Mai 2007)

also witzigerweise kommt der Fehler immer dann, wenn ich als Rueckgabewert entweder Object oder Document waehle... ich koennte mir vorstellen das diese nicht serialisierbar sind, und somit nicht als rueckgabewerte in frage kommen?!

Was meinst du mit was ich noch so geschrieben habe??


----------



## Murray (24. Mai 2007)

Willst du denn wirklich das Dokument als Java-Objekt serialisiert übertragen, damit es auf der anderen Seite wieder als deserialisiertes Java-Objekt (hier also org.jdom.Document) verwendet wird? Das klappt bei dir nicht, weil das verwendete Framework die Objekt-Serialisierung offenbar aus dem Vorhandensein von get- und set-Methoden ableitet, die bei org.jdom.Document nicht so implementiert sind, wie das Framework das erwartet.

Wenn du nur das XML-Dokument liefert willst, dann lass das Document-Objekt doch auf der Serverseite mit JDOM-Mitteln serialisieren und gib einfach den String mit der XML-Repräsentation zurück.


----------



## robelr (24. Mai 2007)

hey, also ich hab nochmal ne frage an dich Murray.
Also wie gesagt ich kann halt c# und asp.net. wenn ich da xml zurueckgeben will, kann ich das einfach machen.

Wie mach ich das denn in Java am besten? Weil nen einfachen XMLDocument gibts ja nich, und nen Document kann ich ja anscheinend nich so einfach zurueckgeben.

reicht da ein einfacher string in der form von XML?


----------



## Murray (24. Mai 2007)

Das hängt sicher davon ab, wie das auf der Client-Seite ausgewertet wird; wenn dort lediglich ein XML-Strom erwartet wird (und eben kein bestimmtes serialisiertes Java-Objekt), dann sollte es reichen, die XML-Daten als String zu liefern.


----------



## robelr (25. Mai 2007)

ok  aber eine frage haette ich dann doch noch. also ich hab jetzt mein xmlstring, der wird auch ausgegeben und alles is super,
allerdings moechte ich den gern in dem typischen xml style sehen koennen. also mit nem xml parser wie normale .xml daten. die kann ich das bewerkstelligen?

hab ne jsp seite auf der ne nummer eingegeben wird. mit der wiederrum wird das xml in form eines strings aus dem webservice rausgeholt.

kann ich irgendwie jsp seiten auf den xml parser mappen??
danke


----------



## Murray (25. Mai 2007)

Die Frage verstehe ich nicht.

Du gehst von der JSP-Seite aus den Web-Service an und hast dann in der JSP-Seite den XML-String am Wickel. Was willst du dann damit machen?


----------



## robelr (25. Mai 2007)

geht schon...


```
<%@page contentType="[u]text/xml[/u]"%>
<%@page import="universal.webclient.core.*" %>
<%
    WebClientCore core = new WebClientCore();
    Enumeration params = request.getParameterNames();
    Boolean status = params.hasMoreElements();
    String keyword = request.getParameter("searchText");
    String result = "Keine Ergebnisse gefunden!";
    String result2 = "";
    if (status) {
        result  = core.getArticleAsXML(keyword);
    }
  out.println(result);
%>
```

so funzt das... es ging mir nur darum den xml baum so dargestellt zu bekommen, als wenn du eine *.xml datei im browser aufrufst...


----------



## robelr (25. Mai 2007)

trotzdem herzlichen dank


----------

