PHP5 在调用 JAVA WebService 时遇到的各种问题及解决方法(一)
来源:互联网 发布:私人淘宝3c认证怎么弄 编辑:程序博客网 时间:2024/05/20 03:46
因为之前没有搞过PHP的SOAP,先学习了一下。
开始gank。
服务端:
Spring3.0.5+CXF2.4,JDK1.6
“应该是”自动生成的wsdl文件<服务端不是我们的>
客户端:
PHP5.1.3
碰见的第一个问题:
SOAP-ERROR: Encoding: object has no 'id' property
但是API文档上说不需要id,查看wsdl文件内容
<xs:complexType name="seal"><xs:sequence><xs:element name="id" type="xs:long"/><xs:element minOccurs="0" name="name" type="xs:long"/>
查阅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)
//一小段代码
} 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 OKServer: Apache-Coyote/1.1Content-Type: multipart/related; type="application/xop+xml"; boundary="uuid:0c37c356-41de-4361-9835-ab8dc023dcac"; start="<root.message@cxf.apache.org>"; start-info="text/xml"Content-Length: 790Date: Tue, 04 Dec 2012 07:57:45 GMT--uuid:0c37c356-41de-4361-9835-ab8dc023dcacContent-Type: application/xop+xml; charset=UTF-8; type="text/xml";Content-Transfer-Encoding: binaryContent-ID: <root.message@cxf.apache.org><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns2:createSealResponse xmlns:ns2="http://service.api.seal.kx.knet.cn/"><return><code>2003</code><date>2012-12-04 15:57:46.124</date><msg>Logic error</msg><result>sfn004.cn:瀵逛笉璧凤紝姝ゅ煙鍚嶁€滃彲淇$綉绔欌€濋獙璇佹湇鍔$敵璇锋鍦ㄥ鏍镐腑锛屼笉鑳藉啀娆℃敞鍐岋紒</result><result>zhjx922.com:瀵逛笉璧凤紝姝ゅ煙鍚嶁€滃彲淇$綉绔欌€濋獙璇佹湇鍔$敵璇锋鍦ㄥ鏍镐腑锛屼笉鑳藉啀娆℃敞鍐岋紒</result></return></ns2:createSealResponse></soap:Body></soap:Envelope>--uuid:0c37c356-41de-4361-9835-ab8dc023dcac--
明显不是XML。。所以PHP老大就报错了
询问对方,答复是:
CXF设置了如下上传属性,关键点就是MTOM,PHP SOAP扩展默认是乎不支持这个玩意
<jaxws:properties>
<entry key="mtom-enabled" value="true" />
</jaxws:properties>
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); //根据实际情况做处理。。。,如果是<?xml开头,改成<?xml $start=strpos($response,'<soap'); $end=strrpos($response,'>'); $response_string=substr($response,$start,$end-$start+1); return($response_string); }}
到此结束。。。
- PHP5 在调用 JAVA WebService 时遇到的各种问题及解决方法(一)
- PHP5 在调用 JAVA WebService 时遇到的各种问题及解决方法(二)
- TensorFlow遇到的各种问题及解决方法
- java 线程遇到的问题及解决方法 JNI调用
- 在.NET 4中调用GDAL库时遇到的问题及解决方法
- 『飞秋』在.NET 4中调用GDAL库时遇到的问题及解决方法
- asp.net 发布WebService出现的各种问题及解决方法
- 在练习ssh项目时遇到的问题及解决方法
- 在使用KSoap2调用webservice遇到的问题
- 在与sap系统集成时遇到的问题.sap系统发布一webservice,java(xfire)作为客户端调用,调用时抛出如下异常: Wrong Content-Type and empty HTTP-Body received: ("HTTP Code 20
- WebService在Jboss中遇到的问题(一)
- WP8调用WebService或WCF时遇到的问题及解决方案
- JAVA+AXIS客户端调用Asp.net Web Service过程中遇到的问题及解决方法
- java调用CICS服务遇到的错误及解决方法
- 自学java一年半来遇到的乱码问题及解决方法(一)
- 解决java用axis调用.NET写的webService中遇到的各种Exception
- SSH开发入门时遇到的各种Bug及解决方法
- 最近学习J2EE遇到的问题及解决方法(一)
- 面向对象软件设计原则(四) —— 包的设计原则
- 今天收到csdn的短信说我是年度之星候选人,告诉我可以拉票,票也可以拉啊?
- Android启动参数
- 索引色的值分解R,G,B的值
- Unity3D性能优化
- PHP5 在调用 JAVA WebService 时遇到的各种问题及解决方法(一)
- HBase入门篇2-Java操作HBase例子
- quest3d q.LoadChannelGroupDQ的详解
- SpringMVC数据绑定使用指南
- 根据先序及中序遍历结果创建树,java实现
- 使用ubuntu PC开发ARM单板常用技巧总结
- MapXtreme多边形有关的方法
- map
- git下push失败解决方法