Простой код Java-клиента для веб-службы - что делать с QName? - PullRequest
2 голосов
/ 14 октября 2008

Я получаю следующую ошибку, когда добираюсь до линии, которая вызывает ДЕЙСТВИТЕЛЬНО ОСНОВНОЙ веб-сервис, который я запускаю на 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());
        }
    }
}

Мой код веб-службы действительно прост - просто простой класс, который возвращает вашу входную строку с небольшим количеством конкат-текста:

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

    }

Ответы [ 5 ]

7 голосов
/ 14 октября 2008

Как говорит исключение, вы вызываете конструктор QName неправильно:

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

неверно. Я думаю, что вы должны передать две строки, одна из которых содержит пространство имен, другая локальное имя. Документация обычно содержит описание того, как использовать этот класс.

6 голосов
/ 14 октября 2008

Может ли это быть опечатка в вашем QName?:

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

вместо:

new QName("http://testPackage.fc.com/, doBasicStuff")
0 голосов
/ 15 декабря 2012

Просто введите название метода, который в вашем случае будет call.setOperationName("doBasicStuff");

0 голосов
/ 03 декабря 2011

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

0 голосов
/ 13 апреля 2010

Вы должны использовать один из них:

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

но новый QName ("http://testPackage.fc.com/, doBasicStuff") неверно, так как оба значения находятся в одной строке ".., .."

Привет

...