На работе я в настоящее время программирую приложение, которое отправляет XML-файл в веб-сервис. То, что мой сервис делает с этим, не имеет значения, вот как он получает, это имеет значение.
Прежде чем приступить к этому проекту, я был действительно новичком в SOAP и SSL-шифровании.
Мне потребовалось чуть больше десятка часов, чтобы понять, что именно нужно делать, чтобы получить ответ от веб-службы с PHP и его SOAP API.
Я наконец-то связалась со службой, но есть неясная проблема безопасности, с которой я встречался и до сих пор встречаюсь.
Вот ошибка:
soapenv:Serversecurity.wssecurity.WSSContextImpl.s02: com.ibm.websphere.security.WSSecurityException: Exception org.apache.axis2.AxisFault: CWWSS7200E: Unable to create AxisService from ServiceEndpointAddress : http://example.com/webservice/ ocurred while running action: com.ibm.ws.wssecurity.handler.WSSecurityConsumerHandler$1@6bd36bd3
Редактировать :
И некоторые дополнительные сведения о сделке.
Заголовок запроса:
POST /example.com/webservice HTTP / 1.1 Хост: example.com Соединение: пользовательский агент Keep-Alive: PHP-SOAP / 5.4.39-0 + deb7u1 Content-Type: text / xml; charset = utf-8 SOAPAction: «» Длина содержимого: 231Тело запроса:
Ответ заголовка:
HTTP / 1.1 500 Внутренняя ошибка сервера. Соединение: закрыть Дата: Пн, 29 Авг. 2016 14:19:02 GMT Сервер: Cookie-набор шлюзов: BIGipServer ~ extranet ~ P_P1_VSP1 = 763381288.37012.0000; Path = /; Через: Шлюз X-Content-Type-Options: nosniff X-Frame-Options: SAMEORIGIN X-XSS-Protection: 1; mode = block Content-Language: fr-FR Content-Type: text / xml; кодировка = UTF-8Тело отклика:
soapenv: Serversecurity.wssecurity.WSSContextImpl.s02: com.ibm.websphere.security.WSSecurityException: исключение org.apache.axis2.AxisFault: CWWSS7200E: Невозможно выполнить задачу AxisService в части ServiceEndpointAddress: http://example.com/web_service произошел во время выполнения действия: com.ibm.ws.wssecurity.handler.WSSecurityConsumerHandler$1@5d4a5d4a
Что странно, так это то, что отправляемый мной запрос пуст. Как это могло произойти ?
На Веб-сайт IBM написано что это происходит
когда есть не UTF-8 ServiceEndpointAddress
Я не совсем понимаю смысл этого, во-первых, потому что я французский, а во-вторых, потому что я действительно новичок в программировании веб-сервисов.
Как вы увидите в моем коде, символьное шифрование отправленного XML объявлено как utf-8. Я также пытался закодировать содержимое моего файла с utf8_encode () из PHP перед отправкой: ничего нового на экране.
Вот код PHP, который реализует соединение с веб-службой:
$filename = "test1.xml";
$XMLStr = file_get_contents("test1.xml");
$wsdl = $wsdl_url;
$options = Array();
$options[ 'local_cert' ] = $pem_file;
$options[ 'location' ] = $server_location;
$options[ 'uri' ] = $namespace_file;
$options[ 'soap_version' ] = SOAP_1_1;
$options[ 'trace' ] = true;
$options[ 'encoding' ] = 'utf-8';
try {
$soapCli = new SoapClient($wsdl, $options);
$soapCli->traitementFlux($XMLStr);
} catch(SoapFault $e)
{
echo 'Error['.$e->faultcode.'] : '.$e->faultstring.'<br/>';
echo '<br/><br/>'.$soapCli->__getLastResponse().'<br/>';
}
У меня нет никаких прав на сервере.
Есть ли ошибка или недоразумение функции?
Спасибо за будущие ответы.
Задача ещё не решена.
Других решений пока нет …