2013-03-01 45 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

相关问题