Pregunta

Recibo el siguiente error cuando llego a la línea que invoca un servicio web REALMENTE BÁSICO que tengo en Tomcat / Axis.

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

¿Tengo algún error con QName? No puedo encontrar información útil al respecto.

El código de mi cliente está debajo:

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

Mi código de servicio web es realmente básico, solo una clase simple que devuelve su cadena de entrada con un poco de texto concat:

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

    }
¿Fue útil?

Solución

Como dice la excepción, llamas incorrectamente al constructor QName:

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

es incorrecto. Creo que tienes que pasar dos cadenas, una que contiene el espacio de nombres, una el nombre local. La documentación normalmente contendrá una descripción sobre cómo usar esa clase.

Otros consejos

¿Podría ser un error tipográfico en su QName ?:

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

en lugar de:

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

Deberías usar uno de estos:

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

pero     nuevo QName (" http://testPackage.fc.com/ , doBasicStuff ") es incorrecto, ya que ambos valores están en la misma cadena " .., .. "

Saludos

nuevo QName (" soapenc: string " ;, " doBasicStuff ")

Simplemente escriba el nombre del método que debe en su caso sería call.setOperationName("doBasicStuff");

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top