Pergunta

Estou recebendo o seguinte erro quando eu chegar à linha que invoca um serviço web realmente básico Tenho executado em Tomcat / Axis.

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

eu tenho algo de errado com QName -? Eu não posso mesmo encontrar alguma informação útil sobre o assunto

.

O meu código de cliente está abaixo:

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());
        }
    }
}

Meu código serivce web é realmente básico - apenas uma classe simples que retorna a sua cadeia de entrada com um pouco de texto concat:

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

    }
Foi útil?

Solução

Como a exceção diz, você chamar o construtor QName incorretamente:

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

está incorreto. Eu acho que você tem que passar duas cordas, uma contendo o namespace, um a localname. A documentação será tipicamente conter uma descrição de como usar essa classe.

Outras dicas

Pode ser um erro de digitação na sua QName:?

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

em vez de:

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

Você deve usar um destes:

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

mas nova QName ( " http://testPackage.fc.com/ doBasicStuff") é errada, uma vez que ambos os valores estão na mesma cadeia ".., .."

Saudações

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

Apenas digite o nome do método que tem que no seu caso, seria call.setOperationName("doBasicStuff");

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top