PHP SoapClient

Ярослав

Новичок
PHP SoapClient

Здравствуйте.
Работаю с сервером через Soap.
Сервер возвращает аттачмент и я получаю следующий эрор
Fatal error: Uncaught SoapFault exception: [Sender] looks like we got no XML document in C:\wamp\www\test\test.php:60 Stack trace: #0 [internal function]: SoapClient->__call('runReport', Array) #1 C:\wamp\www\test\test.php(60): SoapClient->runReport(Object(SoapParam)) #2 {main} thrown in C:\wamp\www\test\test.php on line 60
Работаю с библиотекой PHP SoapClient
Постал вопрос реализации аттачментов. Посмотрел документацию - ничего толком не нашел.
Смотрел в зенде также но там просто враппер над этой библиотекой :(
В PEAR все работает но в данном случае он не подходит.
Собственно вопрос к работать с аттачментами используя библиотеку SoapClient?
 

whirlwind

TDD infected, paranoid
нужна реакция "правильного" soapui, который корректно отреагирует на ошибки, например на лишние пробелы в начале документа
 

MiRacLe

просто Чудо
Установи себе локальный proxy для отладки (ex. fiddler ), в конструктор SoapClient-a передай proxy_host и proxy_port и посмотри почему же "looks like we got no XML document".
 

Ярослав

Новичок
Автор оригинала: Ярослав
вот дамп запроса:
дамп то выложил некоректный:(
вот правильный дамп:
Запрос:
Код:
<SOAP-ENV:Envelope  xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
 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/"
 xmlns:ns4="http://www.jaspersoft.com/client"
 SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>

<ns4:runReport>
<request xsi:type="xsd:string">&lt;request operationName=&quot;runReport&quot;&gt;&lt;argument name=&quot;RUN_OUTPUT_FORMAT&quot;&gt;PDF&lt;/argument&gt;
&lt;argument name=&quot;USE_DIME_ATTACHMENTS&quot;&gt;&lt;![CDATA[1]]&gt;&lt;/argument&gt;&lt;resourceDescriptor name=&quot;&quot; wsType=&quot;reportUnit&quot; uriString=&quot;/reports/samples/studentcourse&quot; isNew=&quot;false&quot;&gt;&lt;label&gt;&lt;/label&gt;&lt;parameter name=&quot;module&quot;&gt;&lt;![CDATA[report]]&gt;&lt;/parameter&gt;&lt;parameter name=&quot;controller&quot;&gt;&lt;![CDATA[index]]&gt;&lt;/parameter&gt;&lt;parameter name=&quot;action&quot;&gt;&lt;![CDATA[get-rep]]&gt;&lt;/parameter&gt;&lt;parameter name=&quot;rep&quot;&gt;&lt;![CDATA[studentcourse]]&gt;&lt;/parameter&gt;&lt;/resourceDescriptor&gt;&lt;/request&gt;</request></ns4:runReport>

</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
ответ 1: (USE_DIME_ATTACHMENTS отключен)
Код:
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: multipart/related; type="text/xml"; start="<4B4EDF24923CF74098D6DE4550EDBDEB>"; 	boundary="----=_Part_23_3418658.1223966898302"
Transfer-Encoding: chunked
Date: Tue, 14 Oct 2008 06:48:17 GMT


------=_Part_23_3418658.1223966898302
Content-Type: text/xml; charset=UTF-8
Content-Transfer-Encoding: binary
Content-Id: <4B4EDF24923CF74098D6DE4550EDBDEB>

<?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:runReportResponse soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns1="http://www.jaspersoft.com/client"><runReportReturn xsi:type="xsd:string">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;operationResult version=&quot;2.0.1&quot;&gt;
	&lt;returnCode&gt;&lt;![CDATA[0]]&gt;&lt;/returnCode&gt;
&lt;/operationResult&gt;
</runReportReturn></ns1:runReportResponse></soapenv:Body></soapenv:Envelope>
------=_Part_23_3418658.1223966898302
Content-Type: application/pdf
Content-Transfer-Encoding: binary
Content-Id: <report>

%PDF-1.4
%вгПУ
... pdf content...
Когда смотрю в soapUI 2.5 то есть атачмент и я его могу скачать
Но это при условии что USE_DIME_ATTACHMENTS отключен
А когда с флагом USE_DIME_ATTACHMENTS то вот ответ
ответ 2: (USE_DIME_ATTACHMENTS включен)
Код:
" &#65533;&#65533;&#65533;)&#65533;)&#65533;&#65533;&#65533;uuid:714C6C40-4531-442E-A498-3AC614200295&#65533;&#65533;&#65533;[url]http://schemas.xmlsoap.org/soap/envelope/&#65533;&#65533;&#65533;[/url]<?xml version="1.0" encoding="utf-8"?><soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soapenv:Body><ns1:runReportResponse soapenv:encodingStyle="http://www.w3.org/2003/05/soap-encoding" xmlns:ns1="http://axis2.ws.jasperserver.jaspersoft.com"><ns2:result xmlns:ns2="http://www.w3.org/2003/05/soap-rpc">runReportReturn</ns2:result><runReportReturn xsi:type="xsd:string">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;operationResult version=&quot;2.0.1&quot;&gt;
	&lt;returnCode&gt;&lt;![CDATA[0]]&gt;&lt;/returnCode&gt;

&lt;/operationResult&gt;
</runReportReturn></ns1:runReportResponse></soapenv:Body></soapenv:Envelope>
&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;аreport&#65533;&#65533;application/pdf&#65533;%PDF-1.4
%туЯг
3 0 obj <</Filter/FlateDecode/Length 395>>stream
x&#65533;е&#65533;OO&#65533;0Ця§яqdmщ?МЙejLL]<h<рЦ&fРТ&#65533;Цoo[dnШЊ\&#65533;&#65533;M&#65533;їэѓыл&#65533;RИF&#65533;	"&#65533;ѕmо&#65533;Q&#65533;$Ј&#65533;A&#65533;шжѕN&ЏhdBожби&#65533;о^ЂЧ'§&#65533;!Њs&#65533;яqH&#65533;ќЋНDw[]ч8rЅФлмВ§#ЗBУ0Mva)&#65533;P ѓЈ_ASa KЃ|&#65533;zwХfЅГMО&#65533;ЬX0,Ъёьѕ{и{ЊGїHЈЖ&#65533;SЂ &#65533;а|ЪЪ&#65533;ъиН*#Y в0щ&#65533;&#65533;CАlЄ1ВІЊNg4ит|&#65533;Лqте4&#65533;uB"K~&#65533;DўB2&#65533;&#65533;&#65533;0|ZbЈцщБВc&#65533;&#65533;ёВІз&#65533;хP&#65533;Vvq&#65533;ѓј-,"XНdiгУnyds]ЌьтYgг8\І&#65533;фљ(&#65533;њ~ѕYнъћ2ИПjia6ЁЫ&#65533;иы&#65533;џX&#65533;XW-%ДeЙЙ/Р7Ie&#65533;k-ћg*№HрД&#65533;&#65533;HGfѓі+Ч9м'Ќ&#65533;g<&#65533;ѓ&#65533;?Й}ц}&#65533;Ц
endstream
endobj
1 0 obj<</Type/Page/Contents 3 0 R/Parent 4 0 R/Resources<</ProcSet [/PDF /Text /ImageB /ImageC /ImageI]/Font<</F1 2 0 R>>>>/MediaBox[0 0 595 842]>>
endobj
5 0 obj[1 0 R/XYZ 0 854 0]
endobj
2 0 obj<</Type/Font/BaseFont/Helvetica/Subtype/Type1/Encoding/WinAnsiEncoding>>
endobj
4 0 obj<</Count 1/Type/Pages/Kids[1 0 R]>>
endobj
6 0 obj<</Names[(JR_PAGE_ANCHOR_0_1) 5 0 R]>>
endobj
7 0 obj<</Dests 6 0 R>>
endobj
8 0 obj<</Type/Catalog/Pages 4 0 R/Names 7 0 R>>
endobj
9 0 obj<</CreationDate(D:20081014095944+02'00')/Producer(iText1.3.1 by lowagie.com \(based on itext-paulo-154\))/Creator(JasperReports \(studentcourse\))/ModDate(D:20081014095944+02'00')>>
endobj
xref
0 10
0000000000 65535 f 
0000000477 00000 n 
0000000667 00000 n 
0000000015 00000 n 
0000000754 00000 n 
0000000633 00000 n 
0000000804 00000 n 
0000000857 00000 n 
0000000888 00000 n 
0000000944 00000 n 
trailer

<</ID [<057f5ea9975837aac39ef8028d1f385e><057f5ea9975837aac39ef8028d1f385e>]/Root 8 0 R/Size 10/Info 9 0 R>>

startxref
1140
%%EOF
"
Причем я исполовал именно полследний вариант с флагом USE_DIME_ATTACHMENTS в pear и все работает
а soapui показывает ошибку именно в этом случае оО
line 1: Illegal XML character: 0xc
org.apache.xmlbeans.impl.piccolo.io.IllegalCharException: Illegal XML character: 0xc
at org.apache.xmlbeans.impl.piccolo.xml.XMLReaderReader.read(XMLReaderReader.java:169)
at org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.yy_refill(PiccoloLexer.java:3474)
...

Возможно ли достать аттачменты из какого либо ответа?
P.S. Извините что розтянул форум :(
 

whirlwind

TDD infected, paranoid
Что такое вот это последняя каша, я вообще не понял.

Судя по http://www.w3.org/TR/SOAP-attachments#SOAPReferenceToAttachements то первый ответ вполне корректный. Можно попробовать http://ru.php.net/manual/en/function.soap-soapclient-getlastresponse.php и разобрать ответ как обычное multipart message.

PS. Вот, кстате, как это делается по нормальному http://ru.php.net/manual/ru/function.soap-soapclient-dorequest.php
 

Ярослав

Новичок
whirlwind
Спасибо за помощь.
Очень жаль что нативно не поддерживает аттачменты SoapClient :(
Блин даже в зенде враппер сделали а аттачи не реализовали, хз почему.
 
Сверху