Question

Je reçois le message d'erreur suivant lorsque je parviens à la ligne qui appelle un service Web REALY BASIC exécuté sur Tomcat / Axis.

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

Ai-je un 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 de service Web 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;

    }
Était-ce utile?

La solution

Comme le dit l'exception, vous appelez le constructeur QName de manière incorrecte:

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 de l’utilisation de cette classe.

Autres conseils

Pourrait-il s'agir d'une faute de frappe dans votre QName?:

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

au lieu de:

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

Vous devriez utiliser l'un de ces éléments:

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

mais     new QName (" http://testPackage.fc.com/ , doBasicStuff ") est erroné, car les deux valeurs sont dans la même chaîne "

Cordialement

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

Il suffit de taper le nom du metod qui doit figurer sur votre cas, il serait call.setOperationName ("doBasicStuff");

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top