1

こんにちは、この非常に古い PHP バグに似た奇妙なバグが発生しています。

https://bugs.php.net/bug.php?id=48966

唯一の違い: 私は、php の soap-client の classmap 関数を使用しています。

次のようになります。

class Client extends \SoapClient
{
//left something out here
const DOMAIN_MODEL_NAMESPACE = 'Domain\\Model\\';


/**
 * @return array
 */
private function getClassmap()
{
    return array(
        'AddressCheck' => self::DOMAIN_MODEL_NAMESPACE . 'AddressCheck\\AddressCheckRequest',
        'AddressCheckResponse' => self::DOMAIN_MODEL_NAMESPACE . 'AddressCheck\\AddressCheckResponse',
        'matchingAddresses' => self::DOMAIN_MODEL_NAMESPACE . 'AddressCheck\\MatchingAddresses',
        'address' => self::DOMAIN_MODEL_NAMESPACE . 'Common\\Address',
        'RequestHeader' => self::DOMAIN_MODEL_NAMESPACE . 'Common\\Header\\RequestHeader',
        'salesOrderEntry' => self::DOMAIN_MODEL_NAMESPACE . 'Common\\Header\\SalesOrderEntry'
    );
}

/**
 * @param Configuration\ConfigurationInterface $configuration
 * @param string $wsdl
 */
public function __construct($wsdl, Configuration\ConfigurationInterface $configuration)
{
    $options = array(
        'classmap' => $this->getClassmap(),
        'features' => SOAP_SINGLE_ELEMENT_ARRAYS,
        'location' => $configuration->getServiceLocation(),
        'trace' => 1,
        'soap_version' => SOAP_1_1,
        'exceptions' => 1,
        'cache_wsdl' => 0
    );
    parent::__construct($wsdl, $options);
}
}

他のクラス:

$address = new Common\Address($street, $houseNumber, $postalCode, $city);
$request = new AddressCheck\AddressCheckRequest($address);
$response = $this->soapClient->__soapCall($requestName, array($request));

これはwsdl2PHPによって生成されますが、PSR-4 Autoloading に適合するように少し変更されています。

私の問題は、生成された XML リクエストにあります。

はずです (SOAPUi によって生成されます!): -> 私には SOAP_1_1 のように見えます。(正しい?)

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://webservices.aax2.compax.at">
    <soapenv:Header/>
    <soapenv:Body>
        <web:AddressCheck>
            <web:header>
                <web:source>1</web:source>
                <web:version>1.11</web:version>
                <web:client>1</web:client>
                <web:testing>0</web:testing>

                <web:salesOrderEntry>
                    <web:partnerId>300011489</web:partnerId>
                    <web:distributionChannelId>300000011</web:distributionChannelId>
                </web:salesOrderEntry>
            </web:header>
            <web:address>
                <web:street>SomeStreet</web:street>
                <web:houseNumber>6</web:houseNumber>
                <web:zip>66666</web:zip>
                <web:city>SomeCity</web:city>
            </web:address>
        </web:AddressCheck>
    </soapenv:Body>
</soapenv:Envelope>

は (soap-client によって生成されます):

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xmlns:ns1="http://webservices.aax2.compax.at">
<SOAP-ENV:Body>
    <ns1:AddressCheck>
        <header>
            <source>1</source>
            <version>1.11</version>
            <client>1</client>
            <testing>0</testing>
            <salespartnerData xsi:nil="true"/>
            <salesOrderEntry>
                <partnerId>300011489</partnerId>
                <distributionChannelId>300000011</distributionChannelId>
            </salesOrderEntry>
            <last_user xsi:nil="true"/>
            <timeOfCall xsi:nil="true"/>
            <clientIP xsi:nil="true"/>
            <orderContext xsi:nil="true"/>
            <scanId xsi:nil="true"/>
        </header>
        <address>
            <street>SomeStreet</street>
            <houseNumber>6</houseNumber>
            <zip>66666</zip>
            <city>SomeCity</city>
            <buildingType xsi:nil="true"/>
            <buildingPart xsi:nil="true"/>
            <buildingPartNotes xsi:nil="true"/>
            <buildingPartDetail xsi:nil="true"/>
            <floor xsi:nil="true"/>
            <notes xsi:nil="true"/>
            <noOfCorrections xsi:nil="true"/>
        </address>
    </ns1:AddressCheck>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope> 

ご覧のとおり、ネストされたノードのプレフィックスがありません。 soap-client のドキュメントは非常に薄いですが、WSDL は巨大なので、手動で XML を生成したり操作したりしたくありません!

WSDL で正確に何が間違って構成されている可能性がありますか? 必要であれば、それらの情報も提供できます。しかし、WSDL 全体ではありません。

クラスマップはまったく使用されていないように思えます..(タイプミスかもしれませんか?)しかし、クラスマップをデバッグする方法がわかりません?!

4

0 に答える 0