Я использую PHP SoapClient для вызова веб-службы SOAP. Ниже описано, как я создаю экземпляр экземпляра SoapClient.
$client = new SoapClient('customer.wsdl',array("soap_version" => SOAP_1_1,"trace" => 1));
Проблема, с которой я сталкиваюсь, заключается в том, что всякий раз, когда вышеуказанная строка выполняется, она выдает исключение «SOAP-ERROR: Схема синтаксического анализа: элемент имеет атрибут type и подтипMsgstr «» «. В результате переменная $ client всегда содержит значение NULL, т.е. не получает экземпляр.
Ниже приведена схема XSD, которая, как мне кажется, вызывает проблему.
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:db="http://xmlns.oracle.com/apps/custom/soaprovider/plsql/xx_get_cust_pkg/get_customer/" targetNamespace="http://xmlns.oracle.com/apps/custom/soaprovider/plsql/xx_get_cust_pkg/get_customer/" elementFormDefault="qualified">
<element name="InputParameters">
<complexType>
<sequence>
<element name="P_CUSTOMER_NAME" type="string" db:index="1" db:type="VARCHAR2" minOccurs="0" nillable="true" />
</sequence>
</complexType>
</element>
<element name="OutputParameters">
<complexType>
<sequence>
<element name="X_MSG_STATUS" type="string" db:index="2" db:type="VARCHAR2" minOccurs="0" nillable="true" />
<element name="X_MSG_DATA" type="string" db:index="3" db:type="VARCHAR2" minOccurs="0" nillable="true" />
<element name="X_CUST" type="db:APPS.XX_GET_CUST_PKG_X3326749X1X4" db:index="4" db:type="Array" minOccurs="0" nillable="true" />
</sequence>
</complexType>
</element>
<complexType name="APPS.XX_GET_CUST_PKG_X3326749X1X5">
<sequence>
<element name="CUSTOMER_NAME" db:type="VARCHAR2" minOccurs="0" nillable="true">
<simpleType>
<restriction base="string">
<maxLength value="240" />
</restriction>
</simpleType>
</element>
<element name="PARTY_NUMBER" db:type="VARCHAR2" minOccurs="0" nillable="true">
<simpleType>
<restriction base="string">
<maxLength value="240" />
</restriction>
</simpleType>
</element>
<element name="ACCOUNT_NUMBER" db:type="VARCHAR2" minOccurs="0" nillable="true">
<simpleType>
<restriction base="string">
<maxLength value="240" />
</restriction>
</simpleType>
</element>
<element name="ACCOUNT_DESC" db:type="VARCHAR2" minOccurs="0" nillable="true">
<simpleType>
<restriction base="string">
<maxLength value="240" />
</restriction>
</simpleType>
</element>
<element name="BILL_TO_ADDRESS" db:type="VARCHAR2" minOccurs="0" nillable="true">
<simpleType>
<restriction base="string">
<maxLength value="240" />
</restriction>
</simpleType>
</element>
<element name="SHIP_TO_ADDRESS" db:type="VARCHAR2" minOccurs="0" nillable="true">
<simpleType>
<restriction base="string">
<maxLength value="240" />
</restriction>
</simpleType>
</element>
<element name="PRICE_LIST" db:type="VARCHAR2" minOccurs="0" nillable="true">
<simpleType>
<restriction base="string">
<maxLength value="240" />
</restriction>
</simpleType>
</element>
</sequence>
</complexType>
<complexType name="APPS.XX_GET_CUST_PKG_X3326749X1X4">
<sequence>
<element name="X_CUST_ITEM" type="db:APPS.XX_GET_CUST_PKG_X3326749X1X5" db:type="Struct" minOccurs="0" maxOccurs="unbounded" nillable="true" />
</sequence>
</complexType>
</schema>
Версия PHP, на которой я сейчас работаю 5.4.30
Есть ошибка https://bugs.php.net/bug.php?id=68576 вошел в систему отслеживания ошибок PHP по той же проблеме, статус которой все еще открыт. Пожалуйста, дайте знать, если есть какие-либо другие обходные пути для решения этой проблемы, кроме изменения исходного кода PHP.
Задача ещё не решена.
Других решений пока нет …