mirror of
https://github.com/php/php-src.git
synced 2026-03-26 09:12:14 +01:00
Fixed bug #36908 (wsdl default value overrides value in soap request).
This commit is contained in:
@@ -1130,11 +1130,13 @@ static void model_to_zval_object(zval *ret, sdlContentModelPtr model, xmlNodePtr
|
||||
{
|
||||
switch (model->kind) {
|
||||
case XSD_CONTENT_ELEMENT:
|
||||
if (model->u.element->name) {
|
||||
xmlNodePtr node = get_node(data->children, model->u.element->name);
|
||||
if (node) {
|
||||
zval *val;
|
||||
if (model->u.element->name) {
|
||||
xmlNodePtr node = get_node(data->children, model->u.element->name);
|
||||
|
||||
if (node) {
|
||||
zval *val;
|
||||
|
||||
node = check_and_resolve_href(node);
|
||||
if (node && node->children && node->children->content) {
|
||||
if (model->u.element->fixed && strcmp(model->u.element->fixed,node->children->content) != 0) {
|
||||
soap_error3(E_ERROR, "Encoding: Element '%s' has fixed value '%s' (value '%s' is not allowed)", model->u.element->name, model->u.element->fixed, node->children->content);
|
||||
|
||||
46
ext/soap/tests/bugs/bug36908.phpt
Executable file
46
ext/soap/tests/bugs/bug36908.phpt
Executable file
@@ -0,0 +1,46 @@
|
||||
--TEST--
|
||||
Bug #36908 (wsdl default value overrides value in soap request)
|
||||
--SKIPIF--
|
||||
<?php
|
||||
if (!extension_loaded('soap')) die('skip soap extension not available');
|
||||
?>
|
||||
--INI--
|
||||
soap.wsdl_cache_enabled=0
|
||||
--FILE--
|
||||
<?php
|
||||
class PublisherService {
|
||||
function add($publisher) {
|
||||
return $publisher->region_id;
|
||||
}
|
||||
}
|
||||
$input =
|
||||
'<?xml version="1.0" encoding="UTF-8"?>
|
||||
<soapenv:Envelope
|
||||
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
|
||||
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<soapenv:Body>
|
||||
<ns1:add xmlns:ns1="urn:PublisherService" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
|
||||
<publisher href="#id0"/>
|
||||
</ns1:add>
|
||||
<multiRef xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
|
||||
xmlns:ns3="http://soap.dev/soap/types" id="id0" soapenc:root="0"
|
||||
soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
|
||||
xsi:type="ns3:publisher">
|
||||
<region_id href="#id5"/>
|
||||
</multiRef>
|
||||
<multiRef xmlns:ns5="http://soap.dev/soap/types"
|
||||
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" id="id5"
|
||||
soapenc:root="0"
|
||||
soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
|
||||
xsi:type="xsd:long">9</multiRef>
|
||||
</soapenv:Body>
|
||||
</soapenv:Envelope>';
|
||||
ini_set('soap.wsdl_cache_enabled', false);
|
||||
$server = new SoapServer(dirname(__FILE__)."/bug36908.wsdl");
|
||||
$server->setClass("PublisherService");
|
||||
$server->handle($input);
|
||||
?>
|
||||
--EXPECT--
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="urn:PublisherService" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><ns1:addResponse><out xsi:type="xsd:string">9</out></ns1:addResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>
|
||||
51
ext/soap/tests/bugs/bug36908.wsdl
Executable file
51
ext/soap/tests/bugs/bug36908.wsdl
Executable file
@@ -0,0 +1,51 @@
|
||||
<?xml version="1.0"?>
|
||||
<wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
|
||||
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
|
||||
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
|
||||
xmlns:api="http://soap.dev/soap/PublisherService"
|
||||
xmlns:types="http://soap.dev/soap/types"
|
||||
targetNamespace="http://soap.dev/soap/PublisherService">
|
||||
<wsdl:types>
|
||||
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
|
||||
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
|
||||
xmlns:types="http://soap.dev/soap/types"
|
||||
targetNamespace="http://soap.dev/soap/types">
|
||||
<xsd:complexType name="publisher">
|
||||
<xsd:all>
|
||||
<xsd:element name="region_id" type="xsd:long" default="52"/>
|
||||
</xsd:all>
|
||||
</xsd:complexType>
|
||||
</xsd:schema>
|
||||
</wsdl:types>
|
||||
<wsdl:message name="addInput">
|
||||
<wsdl:part name="publisher" type="types:publisher"/>
|
||||
</wsdl:message>
|
||||
<wsdl:message name="addOutput">
|
||||
<wsdl:part name="out" type="xsd:string"/>
|
||||
</wsdl:message>
|
||||
<wsdl:portType name="PublisherServicePortType">
|
||||
<wsdl:operation name="add">
|
||||
<wsdl:input message="api:addInput"/>
|
||||
<wsdl:output message="api:addOutput"/>
|
||||
</wsdl:operation>
|
||||
</wsdl:portType>
|
||||
<wsdl:binding name="PublisherServiceBinding" type="api:PublisherServicePortType">
|
||||
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
|
||||
<wsdl:operation name="add">
|
||||
<soap:operation soapAction="urn:PublisherService#add" style="rpc"/>
|
||||
<wsdl:input>
|
||||
<soap:body use="encoded" namespace="urn:PublisherService" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
|
||||
</wsdl:input>
|
||||
<wsdl:output>
|
||||
<soap:body use="encoded" namespace="urn:PublisherService" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
|
||||
</wsdl:output>
|
||||
</wsdl:operation>
|
||||
</wsdl:binding>
|
||||
<wsdl:service name="PublisherService">
|
||||
<wsdl:port name="PublisherServicePort" binding="api:PublisherServiceBinding">
|
||||
<soap:address location="http://soap.dev/soap//publisher_test.php"/>
|
||||
</wsdl:port>
|
||||
</wsdl:service>
|
||||
</wsdl:definitions>
|
||||
Reference in New Issue
Block a user