2013-02-22 85 views
0
Class Services.TestClass Extends (%RegisteredObject, %XML.Adaptor) 
{ 

Property DS As %XML.DataSet; 

} 

和我的web服務類中的以下Web方法:%XML.DataSet創建無效的XML

Method HelloWorld(name As %String) As Services.TestClass [ WebMethod ] 
{ 
Quit ##class(Services.TestClass).%New() 
} 

這將產生以下XML:

<s:complexType name="TestClass"> 
<s:sequence> 
<s:element minOccurs="0" name="DS" type="s0:DataSet"/> 
</s:sequence> 
</s:complexType> 
<s:complexType name="s_DataSet"> 
<s:sequence> 
<s:element ref="s:schema"/> 
<s:any/> 
</s:sequence> 
</s:complexType> 
</s:schema> 

我相信s_DataSet名稱實際上應只是數據集,因爲s0:DataSet指向DataSet,而不是s_DataSet

當我使用消耗t他服務我得到以下錯誤:錯誤:鍵入'DataSet @http://tempuri.org'找不到。 (來自SoapUI)

當我將DataSet屬性從TestClass中取出並直接返回時,一切都很好。到底是怎麼回事?

+0

我沒有一個偉大的回答這個問題,但我用這個數據集對象在許多網絡服務中,您已經看到了一些您所討論的奇怪之處。文檔中沒有任何東西應該讓人相信它不能被用作一個類的屬性,但我從來沒有成功地這樣做過。 [鏈接](http://docs.intersystems.com/ens20102/csp/documatic/%25CSP.Documatic.cls?APP=1&LIBRARY=%25SYS&CLASSNAME=%25XML.DataSet)我已經創建了webmethods返回一組數據集使用a%ListOfObjects和%xml.dataset的單個實例。 – mccrackend 2013-02-23 15:24:57

+0

您的webmethods是否將動態的,非類型化的數據集處理爲ListOfObjects? – 2013-02-26 14:01:03

回答

0

您向我們展示的是WebService(類)的WSDL(的一部分)。 s_Dataset只是一個名稱,模式部分是指模式元素。

調用WebService的:

... Serivices.Client.cls?soap_method=HelloWorld&name=zzz 

就產生:

<SOAP-ENV:Envelope> 
    <SOAP-ENV:Body> 
     <HelloWorldResponse> 
      <HelloWorldResult/> 
     </HelloWorldResponse> 
    </SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

沒有錯誤

+0

s_DataSet應該是DataSet,因爲WSDL引用了未定義的名稱DataSet的複雜類型。我不明白你在說什麼。 – 2013-02-26 13:57:25