php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #49577 Invalid returntype of anyType.
Submitted: 2009-09-17 10:08 UTC Modified: 2009-09-18 10:57 UTC
Votes:6
Avg. Score:4.3 ± 1.1
Reproduced:6 of 6 (100.0%)
Same Version:4 (66.7%)
Same OS:2 (33.3%)
From: kim at datatal dot se Assigned:
Status: Open Package: SOAP related
PHP Version: 5.2.10 OS: Windows
Private report: No CVE-ID: None
Have you experienced this issue?
Rate the importance of this bug to you:

 [2009-09-17 10:08 UTC] kim at datatal dot se
Description:
------------
Returning from a method invoked over SOAP RPC with a datatype of anyType 
to a .NET client application will generate an error when the datatype in 
PHP is an array with values of different types.

As specified in the XML Schema document there something known as anyType 
which is a close approximation to the urType/ur-type.
Validation fails in the .NET client due to SOAP returning a datatype of 
ur-type and not anyType.

It works when all the values in the array is of the same type, since the 
array will become of the type of the values instead of a 
generic/abstract type.

Reproduce code:
---------------
Create a web service with the following in the WSDL:
<message name="theMethodResponse">
 <part name="theMethodReturn" type="xsd:anyType"/>
</message>
<portType name="thePort">
 <operation name="theMethod">
  <output message="typens:theMethodResponse"/>
 </operation>
</portType>

In the SOAP service implementation:
public function theMethod()
{
 return array("value", 1234);
}

Expected result:
----------------
The expected result returned from the method in C# is a type of 
object[].

Actual result:
--------------
An exception specifying that 'ur-type' is not defined in the XML 
schema in the following response:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-
ENV="http://schemas.xmlsoap.org/soap/envelope/";
xmlns:ns1="urn:smsservice"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/";
xmlns:xsd="http://www.w3.org/2001/XMLSchema";
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">;
<SOAP-ENV:Body>
<ns1:theMethodResponse>
<theMethodReturn SOAP-ENC:arrayType="xsd:ur-type[2]" xsi:type="SOAP-
ENC:Array">
<item xsi:type="xsd:string">value</item>
<item xsi:type="xsd:int">1234</item>
</theMethodReturn>
</ns1: theMethodResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2009-09-18 10:57 UTC] kim at datatal dot se
Tried latest 5.2 snapshot, still the same result.

If you look in php_encoding.c:2392 you will see that "xsd:anyType" is 
written as "xsd:ur-type".

If you see the specification for SOAP 1.1 you will note that arrays 
have ur-type as the data-type for arrays:
http://www.w3.org/TR/2000/NOTE-SOAP-20000508/#_Toc478383522

So this seems like a no-bug, except that XML Schema specification 
dictates that ur-type is only an abstract type and not part 
of the public XML document specification. That leads to validation of 
SOAP responses with ur-type failing.

I'm not sure if this "bug" can be handled/fixed in PHP-SOAP or if its 
only a problem with the SOAP specification, or some 
other unknown reason for this being a problem.
 [2009-10-28 13:55 UTC] jsd dot bugs dot php dot net at bvac dot co dot za
http://www.w3.org/TR/2004/REC-xmlschema-1-20041028/structures.html#Type_Derivation says:
"...the ur-type definition, whose name is anyType in the XML Schema namespace..."

so I believe it is indeed a bug: ur-type is indeed the correct type here, but the _name_ of ur-type is "anyType", and it is the name of the type that belongs in the XML.
 
PHP Copyright © 2001-2020 The PHP Group
All rights reserved.
Last updated: Fri Jul 10 01:01:27 2020 UTC