PHP5 在调用 JAVA WebService 时遇到的各种问题解决方法_PHP教程

php中文网
发布: 2016-07-22 09:02:47
原创
1133人浏览过

 开始gank。

服务端:

Spring3.0.5+CXF2.4,JDK1.6

“应该是”自动生成的wsdl文件

客户端:

立即学习PHP免费学习笔记(深入)”;

PHP5.1.3

碰见的第一个问题:

SOAP-ERROR: Encoding: object has no 'id' property

但是API文档上说不需要id,查看wsdl文件内容

查阅schema文档,有如下内容:

通过 schema,我们可使用 maxOccurs 和 minOccurs 属性来定义某个元素可能出现的次数。maxOccurs 定义某元素出现次数的最大值,而 minOccurs 则定义某元素出现次数的最小值。maxOccurs 和 minOccurs 的默认值都是 1!(好吧,这个是服务端的问题?然后自己随便写了个值,通过了。。。)


PS:中间有个小环节,我尽然去看了PHP的源代码。。。

SOAP中的php_encoding.c里面的函数 model_to_xml_object

static int model_to_xml_object(xmlNodePtr node, sdlContentModelPtr model, zval *object, int style, int strict TSRMLS_DC)

AI建筑知识问答
AI建筑知识问答

用人工智能ChatGPT帮你解答所有建筑问题

AI建筑知识问答 22
查看详情 AI建筑知识问答

//一小段代码


} else if (model->min_occurs == 0) {
return 2;
} else {
if (strict) {
soap_error1(E_ERROR, "Encoding: object has no '%s' property", model->u.element->name);//明显就是它!
}
return 0;
}

我是从这里发现问题出现在min_occurs上,所以才解决了上面问题(是不是对方不太规范?)


第二个问题:

looks like we got no XML document

这个可是郁闷了,解决了好久

已经返回来数据了,然后我抓包(貌似有方法可以直接显示数据),发现返回的数据类似如下格式:


HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: multipart/related; type="application/xop+xml"; boundary="uuid:0c37c356-41de-4361-9835-ab8dc023dcac"; start=""; start-info="text/xml"
Content-Length: 790
Date: Tue, 04 Dec 2012 07:57:45 GMT


--uuid:0c37c356-41de-4361-9835-ab8dc023dcac
Content-Type: application/xop+xml; charset=UTF-8; type="text/xml";
Content-Transfer-Encoding: binary
Content-ID:
20032012-12-04 15:57:46.124Logic errorsfn004.cn:瀵逛笉璧凤紝姝ゅ煙鍚嶁€滃彲淇$綉绔欌€濋獙璇佹湇鍔$敵璇锋鍦ㄥ鏍镐腑锛屼笉鑳藉啀娆℃敞鍐岋紒zhjx922.com:瀵逛笉璧凤紝姝ゅ煙鍚嶁€滃彲淇$綉绔欌€濋獙璇佹湇鍔$敵璇锋鍦ㄥ鏍镐腑锛屼笉鑳藉啀娆℃敞鍐岋紒
--uuid:0c37c356-41de-4361-9835-ab8dc023dcac--
明显不是XML。。所以PHP老大就报错了

 

询问对方,答复是:

CXF设置了如下上传属性,关键点就是MTOM,PHP SOAP扩展默认是乎不支持这个玩意



baidu,google 可以通过WSO2 WSF FOR PHP 扩展实现,嫌弃麻烦继续找。。。

看了一下官方文档介绍

http://cn2.php.net/soap

有条回复帮我解决了,最终解决方法如下:

/**
* 继承SoapClient类,重写__doRequest方法
* @author zhjx922
*/
class ZSoapClient extends SoapClient
{
public function __doRequest($request, $location, $action, $version, $one_way = 0)
{
$response = parent::__doRequest($request, $location, $action, $version, $one_way);

//根据实际情况做处理。。。,如果是 $start=strpos($response,' $end=strrpos($response,'>');
$response_string=substr($response,$start,$end-$start+1);
return($response_string);
}
}

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/371863.htmlTechArticle开始gank。 服务端: Spring3.0.5+CXF2.4,JDK1.6 应该是自动生成的wsdl文件服务端不是我们的 客户端: PHP5.1.3 碰见的第一个问题: SOAP-ERROR: Enco...
相关标签:
PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号