php SoapClient завершается ошибкой при передаче wsdl со схемами относительного пути - PullRequest
1 голос
/ 26 мая 2011

У меня есть следующая проблема:

Не удается создать экземпляр моего объекта SoapClient, когда я передаю ему wsdl, который импортирует схему с использованием относительных путей.(Я полагаю, что это так или иначе, основываясь на моих исследованиях)

Мой код выглядит следующим образом:

$wsdl = 'http://myproxy/webservice?wsdl';
$options = array( /* options */ );
$client = new SoapClient($wsdl, $options);

Часть импорта схемы из wsdl:

<schema xmlns="http://www.w3.org/2001/XMLSchema">
  <import namespace="http://myprovider/namespace1/namespace1" schemaLocation="schema1.xsd"/>
  <import namespace="http://myprovider/namespace1/namespace2" schemaLocation="schema2.xsd"/>
  <import namespace="http://myprovider/namespace1/namespace3" schemaLocation="schema3.xsd"/>
</schema>

Ошибка, которую я получаю:

SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://myproxy/webservice?wsdl' : Extra content at the end of the document

Исследования привели меня к таким статьям:

https://issues.apache.org/jira/browse/AXIS2-484

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

  • Попросите моего провайдера изменить пути к схеме на абсолютные
  • Попросите моего провайдера предоставить мне копию схемы, чтобы я мог разместить ее на своем сервере, где SoapClient вызывается с

1 Ответ

1 голос
/ 21 июня 2011

Как я и подозревал.

Относительный путь к схеме означает, что SoapClient при синтаксическом анализе wsdl будет пытаться получить доступ к файлам схемы, используя в качестве ссылки прокси, например:

http://myproxy/schema1.xsd

Поскольку у меня нет файлов xsd, это приведет к тому, что SoapClient выдаст ошибку.

Решение этой проблемы заключается в устранении прокси-сервера, так что относительные пути к внешним ресурсамне затронут.Решение можно найти здесь:

Расширение php SoapClient для аутентификации на уровне сайта

...