花了几个小时之后,我已经接近了我可能真正开始使用WSO进行SOAP服务的那一点,但我遇到了一个令人不安的方面。
首先关闭服务代码
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上达到顶峰;使用service_name.php?wsdl
方法生成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_name
&amp;的任意内容。 amount
的数字为5,输出值为25,非常棒。当我尝试传递一些无效的数量EG而不是nonNegativeInteger时,WSO转换为一个整数,并且对getPrice的调用接收0作为amount的值!
如果我错了,请纠正我,但这不是XSD的重点,以防止无效值进入服务代码?我可以测试函数内部的值,但那么在这里使用XSD有什么意义呢?有没有办法配置WSO在SimpleTypes不验证时发送请求的错误响应?