论坛首页 Java版 企业应用

关于java和.net进行webservice通信的问题

浏览 890 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
时间:2008-01-16
      如题,这几天一直被这个问题困扰,对方的webservice是通过.net发布的,我这边用的是apache的axis,版本1.3,通过观察,soap消息能够正确返回,没问题,但是axis在解析消息还原对象的时候老是报错,我查了很多资料,不过似乎大家都没有碰到这个问题。
对方外网地址:http://124.193.89.94/AccountService.asmx,我通过http://124.193.89.94/AccountService.asmx?wsdl得到wsdl文件,在本地用axis生成客户端,手工编写也是如此,进行调用后报如下错误:
引用
2008-1-16 9:58:58 org.apache.axis.client.Call invoke
严重: Exception:
org.xml.sax.SAXException: Invalid element in com.ccur.DBWS.AccountService.ResultType - AdultEntitlement
at org.apache.axis.encoding.ser.BeanDeserializer.onStartChild(BeanDeserializer.java:258)
at org.apache.axis.encoding.DeserializationContext.startElement(DeserializationContext.java:1035)
at org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:165)
at org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:1141)
at org.apache.axis.message.RPCElement.deserialize(RPCElement.java:236)
at org.apache.axis.message.RPCElement.getParams(RPCElement.java:384)
at org.apache.axis.client.Call.invoke(Call.java:2467)
at org.apache.axis.client.Call.invoke(Call.java:2366)
at org.apache.axis.client.Call.invoke(Call.java:1812)
at com.ccur.DBWS.AccountService.AccountServiceSoapStub.getAdultEntitlementData(AccountServiceSoapStub.java:289)
at com.ccur.DBWS.AccountService.AccountServiceSoapProxy.getAdultEntitlementData(AccountServiceSoapProxy.java:45)
at com.ccur.DBWS.AccountService.Test.main(Test.java:13)
AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
faultSubcode:
faultString: org.xml.sax.SAXException: Invalid element in com.ccur.DBWS.AccountService.ResultType - AdultEntitlement
faultActor:
faultNode:
faultDetail:
{http://xml.apache.org/axis/}stackTrace:org.xml.sax.SAXException: Invalid element in com.ccur.DBWS.AccountService.ResultType - AdultEntitlement
at org.apache.axis.encoding.ser.BeanDeserializer.onStartChild(BeanDeserializer.java:258)
at org.apache.axis.encoding.DeserializationContext.startElement(DeserializationContext.java:1035)
at org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:165)
at org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:1141)
at org.apache.axis.message.RPCElement.deserialize(RPCElement.java:236)
at org.apache.axis.message.RPCElement.getParams(RPCElement.java:384)
at org.apache.axis.client.Call.invoke(Call.java:2467)
at org.apache.axis.client.Call.invoke(Call.java:2366)
at org.apache.axis.client.Call.invoke(Call.java:1812)
at com.ccur.DBWS.AccountService.AccountServiceSoapStub.getAdultEntitlementData(AccountServiceSoapStub.java:289)
at com.ccur.DBWS.AccountService.AccountServiceSoapProxy.getAdultEntitlementData(AccountServiceSoapProxy.java:45)
at com.ccur.DBWS.AccountService.Test.main(Test.java:13)

{http://xml.apache.org/axis/}hostname:wangxx-pc

org.xml.sax.SAXException: Invalid element in com.ccur.DBWS.AccountService.ResultType - AdultEntitlement
at org.apache.axis.AxisFault.makeFault(AxisFault.java:101)
at org.apache.axis.client.Call.invoke(Call.java:2470)
at org.apache.axis.client.Call.invoke(Call.java:2366)
at org.apache.axis.client.Call.invoke(Call.java:1812)
at com.ccur.DBWS.AccountService.AccountServiceSoapStub.getAdultEntitlementData(AccountServiceSoapStub.java:289)
at com.ccur.DBWS.AccountService.AccountServiceSoapProxy.getAdultEntitlementData(AccountServiceSoapProxy.java:45)
at com.ccur.DBWS.AccountService.Test.main(Test.java:13)
Caused by: org.xml.sax.SAXException: Invalid element in com.ccur.DBWS.AccountService.ResultType - AdultEntitlement
at org.apache.axis.encoding.ser.BeanDeserializer.onStartChild(BeanDeserializer.java:258)
at org.apache.axis.encoding.DeserializationContext.startElement(DeserializationContext.java:1035)
at org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:165)
at org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:1141)
at org.apache.axis.message.RPCElement.deserialize(RPCElement.java:236)
at org.apache.axis.message.RPCElement.getParams(RPCElement.java:384)
at org.apache.axis.client.Call.invoke(Call.java:2467)
... 5 more


看样子,不是axis本身报错,而是其在用xml解析工具解析的时候出错,但是返回的soap消息是很规范的,怎么会出错呢,下面是调用AccountService的GetAdultEntitlementData方法,SettopBoxID为1的时候,对方返回的soap消息:

 


+ <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <soap:Body>
- <GetAdultEntitlementDataResponse xmlns="http://ccur.com/DBWS/AccountService">
- <GetAdultEntitlementData>
<AdultEntitlement>3</AdultEntitlement>
<SettopBoxID>
</GetAdultEntitlementData>
</GetAdultEntitlementDataResponse>
</soap:Body>
</soap:Envelope>


如果大家曾经碰到过类似问题,望一起交流,有解决经验的,望不吝赐教,拍砖者,我也欢迎,或许是我愚钝,某个地方没有想清楚,因为该wsdl涉及到的java对象比较多,我不能一一贴上代码,如果大家有兴趣,可以从该wsdl文件生成客户端,先谢过了。

 

   
时间:2008-07-09
返回的是什么数据类型?

从wsdl中看不出来啊.

我觉得可能是对方的wsdl有问题,你贴出.net端发布的wsdl出来看看
   
0 请登录后投票
时间:2008-07-09
<?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>
		<sendTone xmlns="http://service.webservice.xring.gzjp.cn">
			<sendToneEvt>
				<ns1:callNumber
					xmlns:ns1="http://parameter.webservice.xring.gzjp.cn">
					13055555555
				</ns1:callNumber>
				<ns2:inaccessInfo
					xmlns:ns2="http://parameter.webservice.xring.gzjp.cn">
					<ns2:DID>110</ns2:DID>
					<ns2:DIDPWD>0001</ns2:DIDPWD>
					<ns2:SEQ>1</ns2:SEQ>
					<ns2:role>123456789</ns2:role>
					<ns2:roleCode>0088</ns2:roleCode>
					<ns2:version>v1.00</ns2:version>
				</ns2:inaccessInfo>
				<ns3:sendNumber
					xmlns:ns3="http://parameter.webservice.xring.gzjp.cn">
					13255555555
				</ns3:sendNumber>
				<ns4:toneID
					xmlns:ns4="http://parameter.webservice.xring.gzjp.cn">
					99770900000001
				</ns4:toneID>
				<ns5:toneType
					xmlns:ns5="http://parameter.webservice.xring.gzjp.cn">
					1
				</ns5:toneType>
			</sendToneEvt>
		</sendTone>
	</soapenv:Body>
</soapenv:Envelope> 


做客户端要注意命名空间,必须和服务器的一致,否则服务器就解析不了XML.
   
0 请登录后投票
论坛首页 Java版 企业应用

跳转论坛:
JavaEye推荐