2013-03-01 44 views
0

只是爲了給出我的想法的大背景。我不得不使用Java服務。而有些方法有值類型像int, decimal.將代理生成中的方法參數值類型更改爲可爲空的值類型

我生成的代理通過svcutil.exe當然參數它生成與各類型的方法,但我想他們生成的nullables ...

代替decimal,我想讓他們成爲decimal?,你可能會爲什麼?

那麼原因是因爲Java服務是通過JBoss自動生成的服務,他們只是製作一個oracle包並通過Jboss公開它並生成服務。所以有些程序做這樣的事情......

WHERE COLUMN = NVL(PARAM_NOT_MARKED_AS_NULLABLE_IN_SERVICE, COLUMN) 
AND COLUMN2 = NVL(ANOTHER_PARAM_NOT_NULLABLE_IN_SERVICE, COLUMN2) 

所以你必須知道,是不一樣的,如果食用這樣

WSClient.somemethod(0, 0,0); 

不是這樣

WSClient.somemethod(null, null,null); 

服務當最後一個不是時,最後一個會返回一些結果。

我無法更改服務,我無法請求他們更改WSDL的定義,因爲它們是爲它們自動生成的。他們對Java一無所知,只是pl-sql。

我手動更改了我的自動生成的代理來測試,如果這個想法可行,並且將方法的參數類型更改爲可空,我測試了它,並且,正如猜測的那樣,它像一個魅力一樣工作。

服務不斷將改變一些參數是添加,刪除,改進等,所以當對服務的改變,我再次生成代理,只是複製並粘貼到我的項目

我產生服務是這樣的:

svcutil /ct:System.Collections.Generic.List`1 http://Myurl?wsdl 

我認爲這將是,如果我有我每次重新生成我的代理時手動更改每個方法

我願意使用其他軟件,使用一個特殊的命令真的很痛苦svcutil,使用anoth呃工具,無論如何,但我正在尋找一種方法來改變方法的值paremeter類型爲可爲空的類型,我不得不說只是方法參數不是所有的參數,因爲一些對象定義,實際上具有可爲空類型的屬性並且它們可以從原點無效。

我知道我在問一些錯誤的,真正的解決方案應該是服務可以互操作,但正如我所說的,我不能這麼問。

我不認爲手動查找和替換看起來是一種方法,並將其更改爲「?」應該是最好的主意。

我真的很感激任何幫助。

問候,

回答

0

創建一個控制檯應用程序,並查找/替換爲你運行它作爲構建腳本

+0

的一部分,我認爲這是「沒有其他的解決辦法」,如果沒有更好的,我必須這樣做,但我認爲可能有更好的解決方案,無論如何這將是痛苦的:( – 2013-03-01 20:12:33

相關問題