Когда я дохожу до строки, вызывающей ДЕЙСТВИТЕЛЬНО БАЗОВЫЙ веб-сервис, запущенный на Tomcat / Axis, я получаю следующую ошибку.
Element or attribute do not match QName production: QName::=(NCName':')?NCName
У меня что-то не так с QName? - Я даже не могу найти никакой полезной информации о нем.
Мой клиентский код ниже:
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());
}
}
}
Мой код веб-службы действительно базовый - просто простой класс, который возвращает вашу строку ввода с небольшим количеством текста concat:
public String doBasicStuff(String message)
{
return "This is your message: " + message;
}




Может быть, это опечатка в вашем QName ?:
new QName("http://testPackage.fc.com/", "doBasicStuff")
вместо:
new QName("http://testPackage.fc.com/, doBasicStuff")
Как говорится в исключении, вы неправильно вызываете конструктор QName:
new QName("http://testPackage.fc.com/, doBasicStuff")
это неверно. Я думаю, вам нужно передать две строки, одна из которых содержит пространство имен, а другая - локальное имя. Документация обычно содержит описание того, как использовать этот класс.
Вам следует использовать один из них:
public QName(String localPart) or
public QName(final String namespaceURI, final String localPart)
но новый QName ("http://testPackage.fc.com/, doBasicStuff") неверно, поскольку оба значения находятся в одной строке ".., .."
С уважением
новый QName ("soapenc: string", "doBasicStuff")
Просто введите имя метода, который должен быть в вашем случае
call.setOperationName("doBasicStuff");
Есть ли причина, по которой вы не используете wsdl2java с Axis для создания прокси-классов для веб-службы и ее методов? Я не могу сказать, пишете ли вы просто образец / тестовый код, но обычно вам не нужно использовать объект Call или методы invoke () самостоятельно. wsd2ljava может сэкономить вам много времени.