#50064 [NEW]: SOAP response by is not encoded
From: ckl at ecw dot de
Operating system: Windows XP SP3
PHP version: 5.2.11
PHP Bug Type: SOAP related
Bug description: SOAP response by is not encoded
Description:
------------
I developed a Spring-WS webservice which I try to call by PHP.
WSDL file:
---
<?xml version="1.0" encoding="UTF-8"?><wsdl:definitions
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:sch="http://www.ecw.de/adg/person/schema/beans"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns="http://www.ecw.de/adg/person/schema/beans"
targetNamespace="http://www.ecw.de/adg/person/schema/beans">
<wsdl:types>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns="http://www.ecw.de/adg/person/schema/beans"
xmlns:pb="http://www.ecw.de/adg/person/schema/beans"
xmlns:schemas="http://www.ecw.de/adg/person/schema/beans"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
attributeFormDefault="unqualified" elementFormDefault="unqualified"
jaxb:extensionBindingPrefixes="xjc" jaxb:version="1.0"
targetNamespace="http://www.ecw.de/adg/person/schema/beans"
xmlns:tns="http://www.ecw.de/adg/person/schema/beans">
<xs:annotation>
<xs:appinfo>
<jaxb:globalBindings>
<xjc:simple/>
</jaxb:globalBindings>
</xs:appinfo>
</xs:annotation>
<xs:complexType name="person">
<xs:sequence>
<xs:element maxOccurs="1" minOccurs="1" name="canonicalName"
nillable="true" type="xs:string"/>
<xs:element maxOccurs="1" minOccurs="1" name="commonName"
nillable="true" type="xs:string"/>
<xs:element maxOccurs="1" minOccurs="1" name="createTimeStamp"
nillable="true" type="xs:string"/>
<xs:element maxOccurs="1" minOccurs="1" name="description"
nillable="true" type="xs:string"/>
<xs:element maxOccurs="1" minOccurs="1" name="name"
nillable="true"
type="xs:string"/>
<xs:element maxOccurs="1" minOccurs="1" name="objectCategory"
nillable="true" type="xs:string"/>
<xs:element maxOccurs="1" minOccurs="1" name="whenCreated"
nillable="true" type="xs:string"/>
<xs:element maxOccurs="1" minOccurs="1" name="distinguishedName"
nillable="true" type="xs:string"/>
<xs:element maxOccurs="1" minOccurs="1" name="mail"
nillable="true"
type="xs:string"/>
<xs:element maxOccurs="1" minOccurs="1" name="displayName"
nillable="true" type="xs:string"/>
<xs:element maxOccurs="1" minOccurs="1" name="objectClass"
nillable="true" type="xs:string"/>
<xs:element maxOccurs="1" minOccurs="1" name="sAMAccountName"
nillable="true" type="xs:string"/>
<xs:element maxOccurs="1" minOccurs="1" name="memberOf"
nillable="true"
type="pb:groupCollection"/>
<xs:element maxOccurs="1" minOccurs="1" name="employeeNumber"
nillable="true" type="xs:string"/>
<xs:element maxOccurs="1" minOccurs="1" name="givenName"
nillable="true" type="xs:string"/>
<xs:element maxOccurs="1" minOccurs="0" name="homeDirectory"
nillable="true" type="xs:string"/>
<xs:element maxOccurs="1" minOccurs="1" name="homePhone"
nillable="true" type="xs:string"/>
<xs:element maxOccurs="1" minOccurs="1" name="lastLogon"
nillable="true" type="xs:string"/>
<xs:element maxOccurs="1" minOccurs="1" name="logonCount"
nillable="true" type="xs:int"/>
<xs:element maxOccurs="1" minOccurs="1" name="mailNickname"
nillable="true" type="xs:string"/>
<xs:element maxOccurs="1" minOccurs="1" name="allowDialin"
nillable="true" type="xs:boolean"/>
<xs:element maxOccurs="1" minOccurs="1" name="profilePath"
nillable="true" type="xs:string"/>
<xs:element maxOccurs="1" minOccurs="1" name="userPrincipalName"
nillable="true" type="xs:string"/>
<xs:element maxOccurs="1" minOccurs="1"
name="additionalAttributes"
nillable="true" type="pb:additionalAttributesCollectionType"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="groupCollection">
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="groupName"
type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="additionalAttributesCollectionType">
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="attribute"
nillable="false" type="pb:additionalAttributeType">
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="additionalAttributeType">
<xs:sequence>
<xs:element maxOccurs="1" minOccurs="1" name="value"
type="xs:string"/>
</xs:sequence>
<xs:attribute name="name" type="xs:string" use="required"/>
</xs:complexType>
<xs:complexType name="defaultAuthenticationResponse">
<xs:sequence>
<xs:element default="false" maxOccurs="1" minOccurs="1"
name="valid"
nillable="false" type="xs:boolean"/>
<xs:element default="0" minOccurs="0" name="statusCode"
nillable="true"
type="xs:integer"/>
<xs:element maxOccurs="1" minOccurs="0" name="reason"
nillable="true"
type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:element name="findUserRequest">
<xs:complexType>
<xs:sequence>
<xs:element name="sAMAccountName" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="findUserResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="person" type="pb:person"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="isUserAAARequest">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="1" minOccurs="1" name="sAMAccountName"
nillable="false" type="xs:string"/>
<xs:element maxOccurs="1" minOccurs="1" name="credential"
nillable="false" type="xs:string"/>
<xs:element maxOccurs="1" minOccurs="1" name="neededGroups"
nillable="false" type="pb:groupCollection"/>
<xs:element maxOccurs="1" minOccurs="1"
name="memberShipIsNeededInAllGroups" nillable="false"
type="xs:boolean"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="isUserAAAResponse"
type="pb:defaultAuthenticationResponse"/>
<xs:element name="isUserAuthenticatedRequest">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="1" minOccurs="0" name="sAMAccountName"
nillable="false" type="xs:string"/>
<xs:element maxOccurs="1" minOccurs="1" name="credential"
nillable="false" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="isUserAuthenticatedResponse"
type="pb:defaultAuthenticationResponse"/>
<xs:element name="isUserAuthorizedRequest">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="1" minOccurs="0" name="sAMAccountName"
nillable="false" type="xs:string"/>
<xs:element maxOccurs="1" minOccurs="1" name="neededGroups"
nillable="false" type="pb:groupCollection"/>
<xs:element maxOccurs="1" minOccurs="1"
name="memberShipIsNeededInAllGroups" nillable="false"
type="xs:boolean"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="isUserAuthorizedResponse"
type="pb:defaultAuthenticationResponse"/>
</xs:schema>
</wsdl:types>
<wsdl:message name="isUserAuthenticatedRequest">
<wsdl:part element="tns:isUserAuthenticatedRequest"
name="isUserAuthenticatedRequest">
</wsdl:part>
</wsdl:message>
<wsdl:message name="findUserResponse">
<wsdl:part element="tns:findUserResponse" name="findUserResponse">
</wsdl:part>
</wsdl:message>
<wsdl:message name="findUserRequest">
<wsdl:part element="tns:findUserRequest" name="findUserRequest">
</wsdl:part>
</wsdl:message>
<wsdl:message name="isUserAuthorizedResponse">
<wsdl:part element="tns:isUserAuthorizedResponse"
name="isUserAuthorizedResponse">
</wsdl:part>
</wsdl:message>
<wsdl:message name="isUserAAAResponse">
<wsdl:part element="tns:isUserAAAResponse" name="isUserAAAResponse">
</wsdl:part>
</wsdl:message>
<wsdl:message name="isUserAuthenticatedResponse">
<wsdl:part element="tns:isUserAuthenticatedResponse"
name="isUserAuthenticatedResponse">
</wsdl:part>
</wsdl:message>
<wsdl:message name="isUserAAARequest">
<wsdl:part element="tns:isUserAAARequest" name="isUserAAARequest">
</wsdl:part>
</wsdl:message>
<wsdl:message name="isUserAuthorizedRequest">
<wsdl:part element="tns:isUserAuthorizedRequest"
name="isUserAuthorizedRequest">
</wsdl:part>
</wsdl:message>
<wsdl:portType name="Person">
<wsdl:operation name="isUserAAA">
<wsdl:input message="tns:isUserAAARequest" name="isUserAAARequest">
</wsdl:input>
<wsdl:output message="tns:isUserAAAResponse"
name="isUserAAAResponse">
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="isUserAuthorized">
<wsdl:input message="tns:isUserAuthorizedRequest"
name="isUserAuthorizedRequest">
</wsdl:input>
<wsdl:output message="tns:isUserAuthorizedResponse"
name="isUserAuthorizedResponse">
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="findUser">
<wsdl:input message="tns:findUserRequest" name="findUserRequest">
</wsdl:input>
<wsdl:output message="tns:findUserResponse"
name="findUserResponse">
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="isUserAuthenticated">
<wsdl:input message="tns:isUserAuthenticatedRequest"
name="isUserAuthenticatedRequest">
</wsdl:input>
<wsdl:output message="tns:isUserAuthenticatedResponse"
name="isUserAuthenticatedResponse">
</wsdl:output>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="PersonSoap11" type="tns:Person">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="isUserAAA">
<soap:operation soapAction=""/>
<wsdl:input name="isUserAAARequest">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="isUserAAAResponse">
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="isUserAuthorized">
<soap:operation soapAction=""/>
<wsdl:input name="isUserAuthorizedRequest">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="isUserAuthorizedResponse">
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="findUser">
<soap:operation soapAction=""/>
<wsdl:input name="findUserRequest">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="findUserResponse">
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="isUserAuthenticated">
<soap:operation soapAction=""/>
<wsdl:input name="isUserAuthenticatedRequest">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="isUserAuthenticatedResponse">
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="PersonService">
<wsdl:port binding="tns:PersonSoap11" name="PersonSoap11">
<soap:address location="http://localhost:8080/ADG/personService"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
---
Response from Spring-WS (fetched by proxying the request/response):
---
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<ns3:person xmlns:ns3="http://www.ecw.de/adg/person/schema/beans">
<canonicalName xsi:nil="true"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
<commonName xsi:nil="true"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
<createTimeStamp xsi:nil="true"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
<description>desc</description>
<name>name</name>
<objectCategory>CN=Person,CN=Schema,CN=Configuration,DC=dc,DC=com</objectCategory>
<whenCreated>200000000</whenCreated>
<distinguishedName>CN=...</distinguishedName>
<mail>mail@domain.com</mail>
<displayName>display-name</displayName>
<objectClass>top</objectClass>
<sAMAccountName>test</sAMAccountName>
<memberOf>
<groupName>Some groupname</groupName>
</memberOf>
<employeeNumber>123</employeeNumber>
<givenName>test</givenName>
<homePhone xsi:nil="true"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
<lastLogon>129017292450890526</lastLogon>
<logonCount>7021</logonCount>
<mailNickname>test</mailNickname>
<allowDialin>false</allowDialin>
<profilePath>\\srv\profiles</profilePath>
<userPrincipalName>test@domain.com</userPrincipalName>
<additionalAttributes xsi:nil="true"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
</ns3:person>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
---
It seems to be that SOAPClient or the underlying XML library (SimpleXML? -
not sure which XML-library is used by SOAPClient) is not able to handle the
namespaces in response.
Reproduce code:
---------------
<?php
define('WSDL', 'path_to_wsdl');
// tried already all possible combinations with and without uri
$client = new SoapClient(WSDL, array('trace' => true, 'version' =>
SOAP_1_1, 'exceptions' => true, 'uri' =>
'http://www.ecw.de/adg/person/schema/beans'));
$func = "findUser"
$req['findUserRequest']['sAMAccountName'] = 'test';
// tried already all possible combinations with and without uri
$result = $client->__soapCall($func, $req, array('uri' =>
"http://www.ecw.de/adg/person/schema/beans"));
print_r($result); // results in NULL and *not* object
?>
Expected result:
----------------
expected: object { name = 'test' , .... }
Actual result:
--------------
NULL
--
Edit bug report at http://bugs.php.net/?id=50064&edit=1
--
Try a snapshot (PHP 5.2): http://bugs.php.net/fix.php?id=50064&r=trysnapshot52
Try a snapshot (PHP 5.3): http://bugs.php.net/fix.php?id=50064&r=trysnapshot53
Try a snapshot (PHP 6.0): http://bugs.php.net/fix.php?id=50064&r=trysnapshot60
Fixed in SVN: http://bugs.php.net/fix.php?id=50064&r=fixed
Fixed in SVN and need be documented: http://bugs.php.net/fix.php?id=50064&r=needdocs
Fixed in release: http://bugs.php.net/fix.php?id=50064&r=alreadyfixed
Need backtrace: http://bugs.php.net/fix.php?id=50064&r=needtrace
Need Reproduce Script: http://bugs.php.net/fix.php?id=50064&r=needscript
Try newer version: http://bugs.php.net/fix.php?id=50064&r=oldversion
Not developer issue: http://bugs.php.net/fix.php?id=50064&r=support
Expected behavior: http://bugs.php.net/fix.php?id=50064&r=notwrong
Not enough info: http://bugs.php.net/fix.php?id=50064&r=notenoughinfo
Submitted twice: http://bugs.php.net/fix.php?id=50064&r=submittedtwice
register_globals: http://bugs.php.net/fix.php?id=50064&r=globals
PHP 4 support discontinued: http://bugs.php.net/fix.php?id=50064&r=php4
Daylight Savings: http://bugs.php.net/fix.php?id=50064&r=dst
IIS Stability: http://bugs.php.net/fix.php?id=50064&r=isapi
Install GNU Sed: http://bugs.php.net/fix.php?id=50064&r=gnused
Floating point limitations: http://bugs.php.net/fix.php?id=50064&r=float
No Zend Extensions: http://bugs.php.net/fix.php?id=50064&r=nozend
MySQL Configuration Error: http://bugs.php.net/fix.php?id=50064&r=mysqlcfg
Thread (4 messages)
- ckl at ecw dot de