Code client Java simple pour le service Web - quelque chose à voir avec QName?
-
03-07-2019 - |
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;
}
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");