# XML-RPC Problem: invalid Character Entitiy



## xml-rpc (29. Sep 2005)

ich möchte auf dem Server folgende Methode aufrufen:


```
mail.search

Documentation
Returns an array of string ids of objects matching the given value.

Signature
array mail.search(string)
```

der Rückgabewert soll also ein Array sein. Darum will ich den Rückgabewert in einem Array speichern:

```
String[] result = (String[]) server.execute("mail.search", params);
```

Bei diesem Vorgang erhalte ich folgende Exception:

```
Fatal error parsing XML: org.xml.sax.SAXParseException: invalid Character Entitiy
JavaClient: XML-RPC Fault #0: org.apache.xmlrpc.XmlRpcClientException: Error decoding XML-RPC response
```

ich denke es liegt daran, dass ich der methode execute ein Parameter vom Typ Vector anstatt einen String mitgebe. Doch ich kann leider nicht einfach ein Cast String machen.

Netbeans sagt mir, dass die Rückgabe vom typ Object ist. :bahnhof: 

hier mein ganzer Source:

```
import java.util.Vector;
import java.util.Hashtable;
import org.apache.xmlrpc.*;

public class JavaClient {
    
    // The location of our server.
    static String server_url =
            "http://localhost:10080";
    
    public static void main(String [] args) {
        try {
            
            // Create an object to represent our server.
            XmlRpcClient server = new XmlRpcClient(server_url);
            
            // Build our parameter list.
            Vector params = new Vector();
            params.addElement("suchbegriff");
            System.out.println("ok1");
            
            // Call the server, and get our result.
            String[] result =
                    (String[]) server.execute("mail.search", params);
            
            System.out.println("ok2");
            
            if ( result != null ){
            System.out.println( "Successfully pinged method." );
            }
            
        } catch (XmlRpcException exception) {
            System.err.println("JavaClient: XML-RPC Fault #" +
                    Integer.toString(exception.code) + ": " +
                    exception.toString());
        } catch (Exception exception) {
            System.err.println("JavaClient: " + exception.toString());
        }
    }
}
```

kann ich den Rückgabewert nicht irgendwie Casten?
Oder nutze ich vlt. eine falsche Methode (execute) 

ich bin sehr froh um tipps.

thanks.
xml-rpc


----------



## AlArenal (29. Sep 2005)

Natürlich ist die Rückgabe ein Object und natürlich muss man das casten. Wenn du weißt, dass ein Array zurückkommt, macht die Lib da einen Vectorraus, also musst du nach Vector casten.

Siehe Doku: http://ws.apache.org/xmlrpc/types.html


----------



## Bleiglanz (29. Sep 2005)

invalid Character Entitiy 

klingt eher nach einen Fehler im XML, hast du einen TCP-Monitor damit du dir die Nachrichten mal im Klartext anschauen kannst?


----------



## AlArenal (29. Sep 2005)

Bleiglanz hat gesagt.:
			
		

> invalid Character Entitiy
> 
> klingt eher nach einen Fehler im XML, hast du einen TCP-Monitor damit du dir die Nachrichten mal im Klartext anschauen kannst?



Hast Recht.. 
Ich arbeite serverseitig mit PHP und muss zunächst alles, was ich in XML-RPC verpacke HTML-encoden, weil Sonderzeichen wie "<" und ">" natürlich das XML zerschießen...


----------



## xml-rpc (29. Sep 2005)

ok ich konnte das problem lösen. ich habe einen falschen port angegeben  :autsch: 

jetzt komm ich aber gleich nochmals nicht weiter:

```
Avoiding obscuring previous error by supressing error encountered while ending request: org.apache.xmlrpc.XmlRpcClientException: Exception closing URLConnection
JavaClient: java.net.SocketException: Unexpected end of file from server
```

mein code:

```
String[] result = (String[]) server.execute("mail.search", params);*/
```

oder nach AIArenal:

```
Vector results = new Vector();
results.addElement(server.execute("mail.search", params));
```


----------



## AlArenal (29. Sep 2005)

xml-rpc hat gesagt.:
			
		

> oder nach AIArenal:
> 
> ```
> Vector results = new Vector();
> ...



Eigentlich eher: 


```
Vector results = (Vector) server.execute("mail.search", params);
```


----------



## Guest (29. Sep 2005)

AlArenal hat gesagt.:
			
		

> xml-rpc hat gesagt.:
> 
> 
> 
> ...


----------



## AlArenal (29. Sep 2005)

Ohne nen TCP-Monitor ist das Debuggen ziemlich pisse, denn du weißt so auf Anhieb nie, welche Seite da gerade Bockmist baut....
Wenn du den JBuilder in ner etwas besseren Version benutzt, ist da ein Tool bei um Ports umzuleiten und den Traffic zu protokollieren. Du sagst dem Ding, dass es den lokalen Port 100 auf Port 80 von Server xyz umleiten soll und biegst deinen Client auf localhost:100 um, und schon bekommste mit, was Client und Server untereinander treiben. 

Sowas müsste es auch irgendwo als freies Tool geben, schätze ich.


----------



## Guest (29. Sep 2005)

vom server erhalte ich:

```
09/29 15:47:43 (Debug) MXParser.nextTag: org.xmlpull.v1.XmlPullParserException: expected START_TAG or END_TAG not TEXT (position: TEXT seen ...<param><value>21</... @1:95)
```

das scheint ein fehler in der xml datei zu sein die ich dem server schicke.


----------



## Guest (29. Sep 2005)

Anonymous hat gesagt.:
			
		

> vom server erhalte ich:
> 
> ```
> 09/29 15:47:43 (Debug) MXParser.nextTag: org.xmlpull.v1.XmlPullParserException: expected START_TAG or END_TAG not TEXT (position: TEXT seen ...<param><value>21</... @1:95)
> ...





edit: ich erhalte die meldung nicht vom server, sondern auf dem server.


----------



## AlArenal (29. Sep 2005)

http://sourceforge.net/projects/plugproxy


----------



## Guest (29. Sep 2005)

sourceforge ist leider im moment grad down


----------



## AlArenal (29. Sep 2005)

Anonymous hat gesagt.:
			
		

> sourceforge ist leider im moment grad down



Nö.


----------

