今天一个人在网上瞎逛,QQ消息到来的声音响了,我一看,同学发的求助信息,他遇到WebServices的难题了,都弄了两个通宵了,问题还没有得到解决(还撑得住,强~~),如果周一问题还得不到解决的话,他和他的部门领导就要下课了,听得我...............这个忙无论如何都要帮了,不可能眼看着同学挨骂,丢工作吧?
问题描述:
最近在做电信的商务领航应用,在于商务领航对接时,我的WEBSERVICES生成的请求为格式为:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SOAP-ENV:Body>
<m:m0 xmlns:m="http://www.openuri.org/">
<m:request>
<m:bnetID>String</m:bnetID>
<m:productSpecID>String</m:productSpecID>
<m:hashCode>String</m:hashCode>
<m:timestamp>String</m:timestamp>
</m:request>
</m:m0>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

而电信的请求格式为:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:m0="http://bnet.gsta.com/v1.18">
<SOAP-ENV:Body>
<m:cancel xmlns:m="http://www.openuri.org/">
<m:request>
<m0:bnetID>Stringaaaaa</m0:bnetID>
<m0:productSpecID>String</m0:productSpecID>
<m0:hashCode>Stringaaaaaaaaaaaaaaaaaaaaaaaaaa</m0:hashCode>
<m0:timestamp>Stringaaaaaaaaaaaa</m0:timestamp>
</m:request>
</m:cancel>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
这样的就导致商务领航在向WEBSERVICES发送请求时,WEBSERVICES所获得的值为空值。问题:我要怎样定义这个WEBSERVICES才能接收到商务领航请求的数据呢?

问题:
仔细看了他的代码,发现他对WebService的理解有一定的误差,大致如下:
1.将类象转换为SOAP时,转换的内容只包括公司属性和变量
2.在WebServices的WEBMETHOD内部不需要对传来的对象进行序列化和反序列化,因为这些工作都由SOAP处理了
3.在传来的对象类部包括有对象数据,但是在请求的SOAP头中没有对象数组信息,在处理时没有判断,而引发异常

解决方法很简单,在处理时判断对象数组是否为空,取掉代码中的序列化与反序列化处理

呵呵,总算帮他解决了问题,这一天也算没有白过.
posted @ 2007-04-08 17:02 三毛 阅读(112) 评论(0) 编辑