SoapException: сервер не распознал значение HTTP-заголовка SOAPAction

1

Я пытаюсь отправить запрос на этот веб-сервис, чтобы получить ответ: Это мой код Java

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import javax.xml.namespace.QName;

public class TestClient {
    public static void main(String[] args) {
        try {

            String endpoint ="http://www.webservicex.net/geoipservice.asmx";
            Service service = new Service();
            Call call = (Call) service.createCall();

            call.setTargetEndpointAddress(new java.net.URL(endpoint));
            call.setOperationName(new QName("http://www.webservicex.net/","GetGeoIP"));

            String response = (String) call.invoke(new Object[] { "192.168.1.8" });

            System.out.println("The response is : " + response);
        } catch (Exception e) {
            System.err.println(e.toString());
        }
    }
}

Когда я запускаю этот код, я получаю это soapException:

Server did not recognize the value of HTTP Header SOAPAction:

Может ли кто-нибудь помочь, как я могу это решить?

Теги:
soap
web-services
axis2

2 ответа

0

Это может произойти, когда значение узла ws отличается от значения пространства имен, как показано ниже:

<wsdl:definitions xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://www.hostname.com/example" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://www.namespace.com/example" slick-uniqueid="3">

Поэтому, если веб-служба, которую вы пытаетесь отправить запросы, перемещается, иногда они изменяют только хост, а не пространство имен.

Чтобы использовать "пример" с Axis, вам необходимо обновить значение хоста, а не значение пространства имен. Это должно выглядеть так:

ExampleLocator.java

class (поскольку в классе Locator вы устанавливаете хост в оси):

ExampleSoap_address= " http://www.hostname.com/xxx/example.asmx "

И значения пространства имен должны оставаться такими же, как указано ниже:

= целевое пространство "http://www.namespace.com/example"

Но гарантированный способ сделать это - снова создавать заглушки, проверять использование новых значений имени хоста в коде и обновлять старый код для этих обычаев.

0

Если посмотреть на веб-службу wsdl, вам нужно изменить "GetGeoIP" на "http://www.webservicex.net/GetGeoIP".

Наконец, у вас есть

call.setOperationName(new QName("http://www.webservicex.net/","http://www.webservicex.net/GetGeoIP"));

Попробуй.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню