尝试从生成的sudzc应用程序调用SAP SOAP Web服务会显示我不知道的错误:
SudzCExamples[5192:f803] <?xml version="1.0" encoding="utf-8"?><soap:Envelope
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns="urn:sap-
com:document:sap:soap:functions:mc-style"><soap:Body><ZComUrlGetrecords>
<IYear>2012</IYear></ZComUrlGetrecords></soap:Body></soap:Envelope>
SudzCExamples[5192:f803] <soap-env:Envelope xmlns:soap-
env="http://schemas.xmlsoap.org/soap/envelope/"><soap-env:Header></soap-env:Header><soap-
env:Body><soap-env:Fault><faultcode>soap-env:Server</faultcode><faultstring
xml:lang="en">CX_ST_MATCH_ELEMENT:XSLT exception.System expected element
'IYear'</faultstring><detail><ns:SystemFault
xmlns:ns="http://www.sap.com/webas/710/soap/runtime/abap/fault/system/">
<Host>undefined</Host><Component>APPL</Component><ChainedException>
<Exception_Name>CX_SOAP_CORE</Exception_Name><Exception_Text>CX_ST_MATCH_ELEMENT:XSLT
exception.System expected element 'IYear'</Exception_Text></ChainedException>
<ChainedException><Exception_Name>CX_SXMLP</Exception_Name><Exception_Text>XSLT
exception</Exception_Text></ChainedException><ChainedException>
<Exception_Name>CX_ST_MATCH_ELEMENT</Exception_Name><Exception_Text>System expected
element 'IYear': Main Program:/1BCDWB/WSS825E06E4DEC40F9171D|
Program:/1BCDWB/WSS825E06E4DEC40F9171D| Line: 18| Valid:X</Exception_Text>
</ChainedException></ns:SystemFault></detail></soap-env:Fault></soap-env:Body></soap-
env:Envelope>
2012-03-11 20:09:30.631 SudzCExamples[5192:f803] soap-env:Server CX_ST_MATCH_ELEMENT:XSLT
exception.System expected element 'IYear'
(null)
奇怪的是,该请求似乎具有IYear元素。有人可以告诉我在哪里搜索问题吗?
最佳答案
昨天我遇到了同样的问题,经过一些试验后发现了解决方案。我所做的第一件事是使用SoapUI客户端成功发出请求。 SoapUI附带了免费试用版,即使您不使用免费试用版,您仍然可以使用它来访问Web服务而无需注册它。我将成功发出的请求中的xml与SudzC发出的请求进行了比较。它们在几个方面有所不同,并且SudzC形成请求的方式还不够。
我对您的建议是比较两个请求,并更改SudzC的请求以匹配SoapUI请求。您可以通过编辑SudzC提供给您的Soap源代码来执行此操作,尤其是在createEnvelope函数的Soap.m文件中可以找到此源代码。
另外,如果您的请求的标头为空,则SudzC不包含请求的标头部分。信封的名称空间部分之后的空白标头中的硬代码。这样做对我来说确实解决了这个问题。