У меня есть WSDL, расположенный примерно так:
https://provider.web-service.domain/path/ServiceName?wsdl
Там есть такая строка:
<wsdl:import namespace="http://name/space/service/" location="ServiceName.wsdl"></wsdl:import>
т.е. Он пытается импортировать другой wsdl по адресу:
https://provider.web-service.domain/path/ServiceName.wsdl
Итак, при инициализации SoapClient я получаю следующую ошибку:
PHP Fatal error: SOAP-ERROR: Parsing WSDL:
Couldn't load from 'https://provider.web-service.domain/path/ServiceName.wsdl' :
failed to load external entity "https://provider.web-service.domain/path/ServiceName.wsdl"
В данный момент я пытаюсь решить эту проблему с помощью своего поставщика WSDL, но есть ли обходной путь для этой проблемы?
Я предполагаю, что единственное решение для них - предоставить путь, который фактически указывает на доступный ресурс. И что на самом деле я мало что могу с этим поделать.
Твои мысли.
Связанный:
- php SoapClient завершается ошибкой при передаче wsdl с относительным путем схемы
- https://issues.apache.org/jira/browse/AXIS2-484
ОБНОВЛЕНИЕ
Поставщик говорит, что PHP SOAP Client SUX (по существу).
Название изменено с:
- php SoapClient: не удалось загрузить из внешнего объекта; к
- php SoapClient: не удалось загрузить из внешнего объекта (где конечная точка разрешается в другое место)
Таким образом, PHP SoapClient не знает, что URL-адрес wsdl разрешается в другое место, поэтому он пытается импортировать файл из исходного местоположения.
Поскольку ресурс не существует в исходном местоположении, выдается ошибка.
В качестве обходного пути они предоставили WSDL, чтобы мы могли установить его на наш сервер.
Но эта проблема требует лучшего решения.
ОБНОВЛЕНИЕ 2
Я хотел бы переформулировать вопрос для ясности:
Меня попросили использовать следующий URL-адрес WSDL:
[1] https://provider.web-service.domain/path/ServiceName?wsdl
В следующем месте есть два WSDL.
[2] https://provider.web-service.domain/path/ServiceName/another/diff/path/prefix_ServiceName.wsdl
[3] https://provider.web-service.domain/path/ServiceName/another/diff/path/ServiceName.wsdl
- [1] превращается в [2]; потом
- [2] импорт [3]
При передаче [1] в SoapClient() это FATAL (как описано ранее)
При передаче [2] в SoapClient() это работает.