0

それに数時間費やした後、実際に SOAP サービスに WSO を使い始めるところまで近づいてきましたが、1 つの気がかりな側面に遭遇しました。

まずはサービスコード

class Order
{
    /** 
     * @var string
     */
    public $item_name;

    /** 
     * @var nonNegativeInteger
     */
    public $amount;

    public function calcPrice()
    {   
        return (float)($this->amount * 5); 
    }   
}

/**
 * Service function getPrice
 *
 * @param object Order $Order
 * @return double $price
 */
function getPrice(Order $Order)
{
    return $Order->calcPrice();
}

// create service in WSDL mode
$service = new WSService(
        array(
            'bindingStyle' => 'rpc',
            'opParams' => array('getPrice' => 'MIXED'),

            // define the actions => operations map
            "actions" => array(
                "http://wsf.local/wsdl_generation/hacked_service.php/getPrice"
                    => "getPrice"),

            // define the class map
            "classmap" => array("Order" => "Order"),

            // define the operations map
            "operations" => array("getPrice" => "getPrice")));

// process client requests and reply 
$service->reply();

Order クラスのヒントを入力する方法は素晴らしいです。WSDL のピークを見てみましょう。WSDL はこのservice_name.php?wsdlアプローチで生成されているため、WSO は上記のサービス コードから生成しています。

<xsd:complexType name="Order">
<xsd:sequence>
<xsd:element name="item_name" type="xsd:string"/>
<xsd:element name="amount" type="xsd:nonNegativeInteger"/>
</xsd:sequence>
</xsd:complexType>

さらに良いニュースがあります。サービスを介して Order オブジェクトに許可される値には、いくつかの厳しい要件があります。

最終的にこれを取得し、テストのために SoapUI に向かい、 に任意の何かを渡し、 にitem_name5 のような数値を渡すとamount、値 25 が得られます。amount EG NOT NegativeInteger に無効なものを渡そうとすると、WSO は整数にキャストし、getPrice の呼び出しは amount の値として 0 を受け取ります。

私が間違っている場合は訂正してください。ただし、無効な値がサービス コードに入らないようにすることが XSD のポイントではありませんか? 関数内の値をテストすることはできますが、ここで XSD を使用する意味は何ですか? SimpleTypes が検証されない場合に、要求に対してエラー応答を送信するように WSO を構成する方法はありますか?

4

0 に答える 0