Почему тело запроса пусто при попытке вызвать веб-сервис SOAP с помощью jQuery AJAX? - PullRequest
1 голос
/ 09 декабря 2011

Я создал полный мыльный конверт soapEnvelopeXML, и я вижу, что вызов поступает через мой монитор TCP / IP, но проблема в том, что вместо вызова правильного метода URI запроса входит в конкатенацию с soapEnvelopeXML как будто это опция в шапке. Так что я не получаю никакого результата. Я не хочу передавать параметры как объекты JSON. Любые идеи о том, где я могу пойти не так?

$.ajax({
    type: "GET",
    url: "http://localhost:8080/webservice/serviceName/",
    data: soapEnvelopeXML,
    contentType: "text/xml",
    dataType: "xml",       
    error: function(xhr, status, error) { 
        alert("Error processing your request: \n" + status + " : " + error);
    },
    success: function(response){
        var xml = $(response);
        alert(xml);
    }
});

Я протестировал код сверху, чтобы использовать POST вместо GET, но я получил пустой ответ и вижу, что был сделан пустой вызов веб-службы. Я не знал, что GET был незаконным для запросов SOAP. Кто-нибудь знает, почему отправленный контент - пустой звонок?

Ответы [ 3 ]

1 голос
/ 09 декабря 2011

Может быть проблема в том, что SOAP должен быть POST?

http://www.coderanch.com/t/463869/Web-Services/java/SOAP-request-as-HTTP

В: Как отправить запрос SOAP в виде HTTP GET?

A: Вы не можете. SOAP всегда использует POST. Только REST использует GET (а также различные другие методы HTTP, включая POST).

Обновление:

Спасибо за это, я использовал GET, потому что при использовании POST был сделан пустой вызов веб-службы. Так есть какие-нибудь идеи относительно того, почему я делаю пустые вызовы веб-службы, когда я использую POST?

Я получаю такое же поведение на своем локальном ящике , если я перехожу на localhost , но я заставил его работать следующим образом:

  1. Составьте доменное имя
  2. Вставьте его в файл hosts, указывая на 127.0.0.1
  3. Доступ к локальному веб-серверу с этим поддельным доменом

Попробуйте этот код, он у меня работает:

var soapEnvelopeXML= "<soap:Envelope xmlns:soap=\"http://www.w3.org/2003/05/soap-envelope\"> <soap:Header>CUSTOM HEADER</soap:Header> <soap:Body>PARAMS</soap:Body> </soap:Envelope>";
$.ajax({
    type: "post",
    url: "http://superblah.com/webservice/serviceName/",
    contentType: "text/xml; charset=\"utf-8\"",
    dataType: "xml",       
    data: soapEnvelopeXML,
    processData: false,
    beforeSend: function(xhr){
      xhr.setRequestHeader(
        "SOAPTarget",
        "http://superblah.com/webservice/serviceName/"
      );
      xhr.setRequestHeader(
        "SOAPAction",
        "http://superblah.com/webservice/serviceName/Something"
      );
    },
    error: function(xhr, status, error) { 
        alert("Error processing your request: \n" + status + " : " + error);
    },
    success: function(response){
        var xml = $(response);
        alert(xml);
    }
});

Я получил этот код отсюда:

0 голосов
/ 09 декабря 2011
$.ajax({
    type: "POST",
    url: "http://localhost:8080/webservice/serviceName/",
    data: soapEnvelopeXML,
    contentType: "text/xml",
    dataType: ($.browser.msie) ? "text" : "xml",       
    error: function(xhr, status, error) { 
        alert("Error processing your request: \n" + status + " : " + error);
    },
    success: function(response){
        var xml = $(response);
        alert(xml);
    }
});

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

Причина, по которой он объединяется с URL, заключается в том, что означает метод GET. Измените это на POST, и я подозреваю, что это сработает для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...