Ошибка XML в ответе SOAP API Mantis Bug Tracker

Я использую SOAP API Mantis Bug Tracker, но, к сожалению, каждый раз, когда он возвращает мне сообщение вроде

"looks like we got no XML document",

после отслеживания последнего ответа я получил следующее сообщение

"<?xml version="1.0" encoding="ISO-8859-1"?><SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
  xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body><SOAP-ENV:Fault><faultcode xsi:type="xsd:string">Client</faultcode><faultactor xsi:type="xsd:string"></faultactor><faultstring xsi:type="xsd:string">Issue does not exist.</faultstring><detail xsi:type="xsd:string"></detail></SOAP-ENV:Fault></SOAP-ENV:Body></SOAP-ENV:Envelope>"

Я надеюсь, что я получаю ответ xml, кажется, что в начале есть добавление символов "".

Любая подсказка или помощь были бы замечательными в удалении этих символов.

Код для подключения к MANTIS SOAP API SERVER

<?php
    $c = new \SoapClient("http://dev06/api/soap/mantisconnect.php?wsdl", array('trace'=> true, 'encoding'=>' UTF-8', 'soap_version'=>1.2));
    $username = "xxxxx";
    $password = "xxxxx";
    try {
        $c->mc_issue_get(trim($username), trim($password), 2331);
    } catch (SoapFault $exception) {
        var_dump($c->__getLastResponse());
    }
    ?>

person bharatesh    schedule 06.02.2014    source источник
comment
Пожалуйста, предоставьте дополнительную информацию, такую ​​как версия Mantis и исходный код, который подключается к mantis.   -  person libregeek    schedule 07.02.2014
comment
Привет Спасибо за ваш ответ. Я использую последнюю версию Mantis 1.2.15. Выше приведен код, который подключается к API-серверу mantis SOAP.   -  person bharatesh    schedule 07.02.2014


Ответы (2)


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

$c = new \SoapClient("http://localhost/demo/mantisbt-1.2.15/api/soap/mantisconnect.php?wsdl", array('trace'=> true, 'encoding'=>' UTF-8', 'soap_version'=>SOAP_1_2));
    $username = "XXXXXXXX";
    $password = "XXXX";
    try {
        $issue = $c->mc_issue_get(trim($username), trim($password), 31);
        var_dump($issue);
    } catch (SoapFault $exception) {
        var_dump($c->__getLastResponse());
    }

Это может быть soap_version, поэтому, возможно, вы могли бы попробовать с soap_version=SOAP

$c = new \SoapClient("http://localhost/demo/mantisbt-1.2.15/api/soap/mantisconnect.php?wsdl", array('trace'=> true, 'encoding'=>' UTF-8', 'soap_version'=>SOAP_1_2));
    $username = "XXXXXXXX";
    $password = "XXXX";
    try {
        $issue = $c->mc_issue_get(trim($username), trim($password), 31);
        var_dump($issue);
    } catch (SoapFault $exception) {
        var_dump($c->__getLastResponse());
    }
1.

person libregeek    schedule 07.02.2014
comment
Спасибо за ответ. В любом случае, у меня такая же проблема. Это связано с настройками клиента. - person bharatesh; 07.02.2014
comment
Что вы имеете в виду под настройками клиента? - person libregeek; 07.02.2014
comment
Может настройки браузера? - person bharatesh; 07.02.2014

Oh...!

Наконец-то получил решение для него. Это очень просто.

Во-первых, кодовая база mantis SOAP API может содержать более 20 000 строк кода. Я думаю, что есть некоторые, где кто-то печатает некоторые символы спецификации.

Таким образом, лучшим решением было бы просто использовать следующую функцию:

ob_clean();

Эта функция должна использоваться в

/library/nusoap/nusoap.php

Поскольку этот файл имеет

send_response()

Это распечатывает полезную нагрузку, поэтому просто используйте ob_clean() в начале функции send_response().

Спасибо и надеюсь, что это поможет другим.

person bharatesh    schedule 07.02.2014