2008-10-14 3 views
2

Je reçois l'erreur suivante lorsque j'arrive à la ligne qui appelle un service web vraiment BASIC que j'ai lancé sur Tomcat/Axis.Code client Java simple pour le service Web - quelque chose à voir avec QName?

Element or attribute do not match QName production: QName::=(NCName':')?NCName 

Quel est le problème avec QName? - Je ne trouve même pas d'informations utiles à ce sujet.

Mon code client est ci-dessous:

import javax.xml.namespace.QName; 
import org.apache.axis.client.Call; 
import org.apache.axis.client.Service; 

    public class TestClient { 

    public static void main(String [] args) 
    { 
     try{ 
      String endpoint = "http://localhost:8080/TestWebService/services/DoesMagic"; 

      Service service = new Service(); 
      Call call = (Call) service.createCall(); 

      call.setTargetEndpointAddress(new java.net.URL(endpoint)); 
      call.setOperationName(new QName("http://testPackage.fc.com/, doBasicStuff")); 

      String ret = (String) call.invoke(new Object[] {"some kind of message"}); 

      System.out.println(ret); 

     }catch(Exception e){ 
      System.err.println(e.toString()); 
     } 
    } 
} 

Mon code web serivce est vraiment basique - juste une classe simple qui retourne votre chaîne d'entrée avec un peu de texte concat:

public String doBasicStuff(String message) 
    { 
     return "This is your message: " + message; 

    } 
+0

Y at-il une raison pour laquelle vous n'utilisez pas wsdl2java avec Axis pour générer des classes de proxy pour le service Web et ses méthodes? Je ne peux pas dire si vous écrivez juste un échantillon/code de test, mais généralement vous n'avez pas besoin d'utiliser les méthodes Call ou invoke() par vous-même. wsd2ljava pourrait vous faire gagner beaucoup de temps. –

Répondre

7

Comme l'exception dit, vous appelez le constructeur QName mal:

new QName("http://testPackage.fc.com/, doBasicStuff") 

est incorrect. Je pense que vous devez passer deux chaînes, l'une contenant l'espace de noms, l'autre le nom local. La documentation contiendra généralement une description sur la façon d'utiliser cette classe.

+3

S'il y avait un badge idiot je pense que je devrais l'obtenir! – Vidar

6

pourrait-il être une faute de frappe dans votre QName ?:

new QName("http://testPackage.fc.com/", "doBasicStuff") 

au lieu de:

new QName("http://testPackage.fc.com/, doBasicStuff") 
0

Vous devez utiliser l'un de ces:

public QName(String localPart)  or 
public QName(final String namespaceURI, final String localPart) 

mais nouvelle QName ("http://testPackage.fc.com/, doBasicStuff ") est faux, puisque les deux valeurs sont dans la même chaîne" .., .."

Cordialement

0

nouvelle QName ("soapenc: string", "doBasicStuff")

0

Il suffit de taper le nom de metod qui ont Dans votre cas, ce serait call.setOperationName("doBasicStuff");

Questions connexes