Skip to content

Commit 7d89609

Browse files
Merge MAGETWO-99061 into 2.1.18-bugfixes-230419
2 parents 3684da4 + b78faa1 commit 7d89609

File tree

7 files changed

+195
-69
lines changed

7 files changed

+195
-69
lines changed

app/code/Magento/Webapi/Model/Config/SchemaLocator.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ class SchemaLocator implements \Magento\Framework\Config\SchemaLocatorInterface
3131
*/
3232
public function __construct(\Magento\Framework\Module\Dir\Reader $moduleReader)
3333
{
34-
$this->_schema = $moduleReader->getModuleDir(Dir::MODULE_ETC_DIR, 'Magento_Webapi') . '/webapi.xsd';
34+
$this->_schema = $moduleReader->getModuleDir(Dir::MODULE_ETC_DIR, 'Magento_Webapi') . '/webapi_merged.xsd';
35+
$this->_perFileSchema = $moduleReader->getModuleDir(Dir::MODULE_ETC_DIR, 'Magento_Webapi') . '/webapi.xsd';
3536
}
3637

3738
/**

app/code/Magento/Webapi/etc/webapi.xsd

Lines changed: 13 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -8,68 +8,17 @@
88
*/
99
-->
1010
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
11-
<xs:element name="routes" type="routesType"/>
12-
13-
<xs:complexType name="routesType">
14-
<xs:sequence>
15-
<xs:element name="route" type="routeType" minOccurs="0" maxOccurs="unbounded"/>
16-
</xs:sequence>
17-
</xs:complexType>
18-
19-
<xs:complexType name="routeType">
20-
<xs:sequence>
21-
<xs:element name="service" type="serviceType"/>
22-
<xs:element name="resources" type="resourcesType"/>
23-
<xs:element name="data" type="dataType" minOccurs="0"/>
24-
</xs:sequence>
25-
<xs:attribute name="method" use="required">
26-
<xs:simpleType>
27-
<xs:restriction base="xs:string">
28-
<xs:enumeration value="GET"/>
29-
<xs:enumeration value="PUT"/>
30-
<xs:enumeration value="POST"/>
31-
<xs:enumeration value="DELETE"/>
32-
</xs:restriction>
33-
</xs:simpleType>
34-
</xs:attribute>
35-
<xs:attribute name="url" type="xs:string" use="required"/>
36-
<xs:attribute name="secure" type="xs:boolean"/>
37-
</xs:complexType>
38-
39-
<xs:complexType name="serviceType">
40-
<xs:attribute name="class" type="xs:string" use="required"/>
41-
<xs:attribute name="method" type="xs:string" use="required"/>
42-
</xs:complexType>
43-
44-
<xs:complexType name="resourcesType" >
45-
<xs:sequence>
46-
<xs:element name="resource" type="resourceType" maxOccurs="unbounded"/>
47-
</xs:sequence>
48-
</xs:complexType>
49-
50-
<xs:complexType name="resourceType">
51-
<xs:attribute name="ref" use="required">
52-
<xs:simpleType>
53-
<xs:restriction base="xs:string">
54-
<xs:pattern value=".+(, ?.+)*"/>
55-
</xs:restriction>
56-
</xs:simpleType>
57-
</xs:attribute>
58-
</xs:complexType>
59-
60-
<xs:complexType name="dataType" >
61-
<xs:sequence>
62-
<xs:element name="parameter" type="parameterType" maxOccurs="unbounded"/>
63-
</xs:sequence>
64-
</xs:complexType>
65-
66-
<xs:complexType name="parameterType">
67-
<xs:simpleContent>
68-
<xs:extension base="xs:string">
69-
<xs:attribute name="name" type="xs:string" use="required"/>
70-
<xs:attribute name="force" type="xs:boolean"/>
71-
</xs:extension>
72-
</xs:simpleContent>
73-
</xs:complexType>
74-
11+
<xs:redefine schemaLocation="urn:magento:module:Magento_Webapi:etc/webapi_base.xsd">
12+
<xs:complexType name="routeType">
13+
<xs:complexContent>
14+
<xs:extension base="routeType">
15+
<xs:sequence>
16+
<xs:element name="service" type="serviceType" minOccurs="0"/>
17+
<xs:element name="resources" type="resourcesType" minOccurs="0"/>
18+
<xs:element name="data" type="dataType" minOccurs="0"/>
19+
</xs:sequence>
20+
</xs:extension>
21+
</xs:complexContent>
22+
</xs:complexType>
23+
</xs:redefine>
7524
</xs:schema>
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
/**
4+
* Structure description for webapi.xml configuration files.
5+
*
6+
* Copyright © Magento, Inc. All rights reserved.
7+
* See COPYING.txt for license details.
8+
*/
9+
-->
10+
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
11+
<xs:element name="routes" type="routesType"/>
12+
13+
<xs:complexType name="routesType">
14+
<xs:sequence>
15+
<xs:element name="route" type="routeType" minOccurs="0" maxOccurs="unbounded"/>
16+
</xs:sequence>
17+
</xs:complexType>
18+
19+
<xs:complexType name="routeType">
20+
<xs:attribute name="method" use="required">
21+
<xs:simpleType>
22+
<xs:restriction base="xs:string">
23+
<xs:enumeration value="GET"/>
24+
<xs:enumeration value="PUT"/>
25+
<xs:enumeration value="POST"/>
26+
<xs:enumeration value="DELETE"/>
27+
</xs:restriction>
28+
</xs:simpleType>
29+
</xs:attribute>
30+
<xs:attribute name="url" type="xs:string" use="required"/>
31+
<xs:attribute name="secure" type="xs:boolean"/>
32+
<xs:attribute name="soapOperation" type="xs:string"/>
33+
</xs:complexType>
34+
35+
<xs:complexType name="serviceType">
36+
<xs:attribute name="class" type="xs:string" use="required"/>
37+
<xs:attribute name="method" type="xs:string" use="required"/>
38+
</xs:complexType>
39+
40+
<xs:complexType name="resourcesType" >
41+
<xs:sequence>
42+
<xs:element name="resource" type="resourceType" maxOccurs="unbounded"/>
43+
</xs:sequence>
44+
</xs:complexType>
45+
46+
<xs:complexType name="resourceType">
47+
<xs:attribute name="ref" use="required">
48+
<xs:simpleType>
49+
<xs:restriction base="xs:string">
50+
<xs:pattern value=".+(, ?.+)*"/>
51+
</xs:restriction>
52+
</xs:simpleType>
53+
</xs:attribute>
54+
</xs:complexType>
55+
56+
<xs:complexType name="dataType" >
57+
<xs:sequence>
58+
<xs:element name="parameter" type="parameterType" maxOccurs="unbounded"/>
59+
</xs:sequence>
60+
</xs:complexType>
61+
62+
<xs:complexType name="parameterType">
63+
<xs:simpleContent>
64+
<xs:extension base="xs:string">
65+
<xs:attribute name="name" type="xs:string" use="required"/>
66+
<xs:attribute name="force" type="xs:boolean"/>
67+
</xs:extension>
68+
</xs:simpleContent>
69+
</xs:complexType>
70+
71+
</xs:schema>
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
/**
4+
* Structure description for webapi.xml configuration files.
5+
*
6+
* Copyright © Magento, Inc. All rights reserved.
7+
* See COPYING.txt for license details.
8+
*/
9+
-->
10+
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
11+
<xs:redefine schemaLocation="urn:magento:module:Magento_Webapi:etc/webapi_base.xsd">
12+
<xs:complexType name="routeType">
13+
<xs:complexContent>
14+
<xs:extension base="routeType">
15+
<xs:sequence>
16+
<xs:element name="service" type="serviceType"/>
17+
<xs:element name="resources" type="resourcesType"/>
18+
<xs:element name="data" type="dataType" minOccurs="0"/>
19+
</xs:sequence>
20+
</xs:extension>
21+
</xs:complexContent>
22+
</xs:complexType>
23+
</xs:redefine>
24+
</xs:schema>

dev/tests/static/testsuite/Magento/Test/Integrity/Magento/Webapi/Model/ConfigTest.php

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@
1212
*/
1313
class ConfigTest extends AbstractConfig
1414
{
15+
/**
16+
* @inheritdoc
17+
*/
1518
public function testSchemaUsingInvalidXml($expectedErrors = null)
1619
{
1720
// @codingStandardsIgnoreStart
@@ -27,6 +30,22 @@ public function testSchemaUsingInvalidXml($expectedErrors = null)
2730
parent::testSchemaUsingInvalidXml($expectedErrors);
2831
}
2932

33+
/**
34+
* @inheritdoc
35+
*/
36+
public function testFileSchemaUsingInvalidXml($expectedErrors = null)
37+
{
38+
// @codingStandardsIgnoreStart
39+
$expectedErrors = [
40+
"Element 'route', attribute 'method': [facet 'enumeration'] The value 'PATCH' is not an element of the set {'GET', 'PUT', 'POST', 'DELETE'}.",
41+
"Element 'route', attribute 'method': 'PATCH' is not a valid value of the local atomic type.",
42+
"Element 'service': The attribute 'method' is required but missing.",
43+
"Element 'data': Missing child element(s). Expected is ( parameter ).",
44+
];
45+
// @codingStandardsIgnoreEnd
46+
parent::testFileSchemaUsingInvalidXml($expectedErrors);
47+
}
48+
3049
/**
3150
* Returns the name of the xml files to validate
3251
*
@@ -64,7 +83,7 @@ protected function _getKnownInvalidXml()
6483
*/
6584
protected function _getKnownValidPartialXml()
6685
{
67-
return null;
86+
return __DIR__ . '/_files/partial_webapi.xml';
6887
}
6988

7089
/**
@@ -74,7 +93,7 @@ protected function _getKnownValidPartialXml()
7493
*/
7594
protected function _getKnownInvalidPartialXml()
7695
{
77-
return null;
96+
return __DIR__ . '/_files/partial_invalid_webapi.xml';
7897
}
7998

8099
/**
@@ -85,7 +104,7 @@ protected function _getKnownInvalidPartialXml()
85104
protected function _getXsd()
86105
{
87106
$urnResolver = new \Magento\Framework\Config\Dom\UrnResolver();
88-
return $urnResolver->getRealPath('urn:magento:module:Magento_Webapi:etc/webapi.xsd');
107+
return $urnResolver->getRealPath('urn:magento:module:Magento_Webapi:etc/webapi_merged.xsd');
89108
}
90109

91110
/**
@@ -95,6 +114,7 @@ protected function _getXsd()
95114
*/
96115
protected function _getFileXsd()
97116
{
98-
return null;
117+
$urnResolver = new \Magento\Framework\Config\Dom\UrnResolver();
118+
return $urnResolver->getRealPath('urn:magento:module:Magento_Webapi:etc/webapi.xsd');
99119
}
100120
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?xml version="1.0"?>
2+
<!--
3+
/**
4+
* Copyright © Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
-->
8+
<routes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
9+
xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Webapi:etc/webapi.xsd">
10+
<route url="/V1/customer/me" method="PATCH">
11+
<service class="Magento\Customer\Api\CustomerRepositoryInterface" />
12+
<resources>
13+
<resource ref="a resource" />
14+
</resources>
15+
<data>
16+
</data>
17+
</route>
18+
<route url="/V1/customers" method="POST"/>
19+
<route url="/V1/customers" method="PUT">
20+
<service class="Magento\Customer\Api\CustomerRepositoryInterface" method="foo" />
21+
</route>
22+
</routes>
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<?xml version="1.0"?>
2+
<!--
3+
/**
4+
* Copyright © Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
-->
8+
<routes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
9+
xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Webapi:etc/webapi.xsd">
10+
<route url="/V1/customers/me" method="GET">
11+
<service class="Magento\Customer\Api\CustomerRepositoryInterface" method="getById" />
12+
<resources>
13+
<resource ref="Magento_Customer::customer_self" />
14+
</resources>
15+
<data>
16+
<parameter name="id" force="true">null</parameter>
17+
</data>
18+
</route>
19+
<route url="/V1/customers/me" method="PUT" secure="true">
20+
<service class="Magento\Customer\Api\CustomerRepositoryInterface" method="save" />
21+
<resources>
22+
<resource ref="Magento_Customer::customer_self" />
23+
</resources>
24+
<data>
25+
<parameter name="id">null</parameter>
26+
</data>
27+
</route>
28+
<route url="/V1/customers" method="POST">
29+
<service class="Magento\Customer\Api\CustomerRepositoryInterface" method="save" />
30+
<resources>
31+
<resource ref="Magento_Customer::manage" />
32+
</resources>
33+
</route>
34+
<route url="/V1/customers/:id" method="GET">
35+
<resources>
36+
<resource ref="Magento_Customer::read" />
37+
</resources>
38+
</route>
39+
</routes>

0 commit comments

Comments
 (0)