Einfacher Java-Client-Code für Web-Service - etwas mit QName zu tun?
-
03-07-2019 - |
Frage
Ich erhalte die folgende Fehlermeldung, wenn ich auf die Linie erhalten, die einen wirklich grundlegenden Web-Service aufruft ich auf Tomcat / Achse ausgeführt habe.
Element or attribute do not match QName production: QName::=(NCName':')?NCName
Habe ich etwas falsch mit QName -. Ich nicht einmal alle nützlichen Informationen über sie finden
Ihr Client-Code ist unter:
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());
}
}
}
Mein Code Web-Serivce ist wirklich einfach - nur eine einfache Klasse, die mit einem wenig concat Text Ihres Eingabestring zurückzugibt:
public String doBasicStuff(String message)
{
return "This is your message: " + message;
}
Lösung
Wie die Ausnahme, sagt, Sie rufen Sie den QName-Konstruktor falsch:
new QName("http://testPackage.fc.com/, doBasicStuff")
ist falsch. Ich glaube, Sie zwei Strings übergeben haben, ein den Namespace enthalten, eine des lokalen Namen. Die Dokumentation wird in der Regel eine Beschreibung darüber enthalten, wie diese Klasse verwenden.
Andere Tipps
Könnte es ein Tippfehler in Ihrem QName sein:
new QName("http://testPackage.fc.com/", "doBasicStuff")
statt:
new QName("http://testPackage.fc.com/, doBasicStuff")
Sie sollten eine dieser verwenden:
public QName(String localPart) or
public QName(final String namespaceURI, final String localPart)
aber neue QName ( " http://testPackage.fc.com/ , doBasicStuff") da ist falsch, beiden Werte in der gleichen Zeichenfolge „.., ..“
sindViele Grüße
neue QName ( "soapenc: string", "doBasicStuff")
Geben Sie einfach den Namen der Methode, die auf Ihrem Fall muss es wäre
call.setOperationName("doBasicStuff");