发现问题:部分响应(消息正文)包含"" 这是一个无效的XML字符。知道怎么删除吗?
我使用Exchange Web服务从收件箱中提取大量电子邮件。它适用于前1141封电子邮件,但它在1142失败(跳过1143工作正常)。我不知道为什么它没有检索到电子邮件,但我得到的错误是:
Uncaught SoapFault exception: [Client] looks like we got no XML document
我将响应XML输出到1142和1143的文件,唯一的区别是ItemId行(正如预期的那样)。
电子邮件确实存在于收件箱中,虽然它包含一些奇怪的字符(由那些奇怪的方形符号表示)。
我正在使用php-ews库的略微修改版本。这是我的代码的一部分:
<?php
$response = $ews->FindItem($Request);
$items = $response->ResponseMessages->FindItemResponseMessage->RootFolder->Items->Message;
foreach ( $items as $item ) {
$ItemRequest = new EWSType_FindItemType();
$ItemRequest->ItemShape = new EWSType_ItemResponseShapeType();
$ItemRequest->ItemShape->BaseShape = EWSType_DefaultShapeNamesType::ALL_PROPERTIES;
$ItemRequest->ItemShape->BodyType = EWSType_BodyTypeResponseType::TEXT;
$ItemRequest->ItemShape->BodyTypeSpecified = true;
$ItemRequest->ItemIds = new EWSType_NonEmptyArrayOfBaseItemIdsType();
$ItemRequest->ItemIds->ItemId = new EWSType_ItemIdType();
$ItemRequest->ItemIds->ItemId->Id = $item->ItemId->Id;
$response = $ews->GetItem( $ItemRequest ); // Code fails here
}
所以我不知道为什么请求会失败。我尝试添加选项&#34;例外&#34; =&GT; 0,&#34;追踪&#34; =&GT; 1,我可以看到__last_response包含我所期望的响应。为什么即使我得到了正确的答案,它也会神秘失败?
答案 0 :(得分:2)
我通过扩展我的SoapClient类并实现一个清除XML消息中无效字符的__doRequest方法来修复此问题。