只是为了说明我的想法。
我必须使用Java服务。有些方法将值类型作为参数,如int, decimal.
我通过svcutil.exe
生成了代理,当然它生成了各自类型的方法,但我想将它们生成为nullables ......
而不是decimal
,我希望它们是decimal?
,你可能会问为什么?
原因是因为Java Service是一个通过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。
我手动更改了我的自动生成代理以进行测试,如果这个想法可行,并将方法的参数类型更改为nullables,我测试了它,并且,如猜测的那样,它就像一个魅力。
服务不断变化,一些参数被添加,删除,改进等,所以当服务发生变化时,我再次生成代理,只需将其复制并粘贴到我的项目中
我生成这样的服务:
svcutil /ct:System.Collections.Generic.List`1 http://Myurl?wsdl
我认为如果每次重新生成代理时都必须手动更改每个方法,那将非常痛苦
我愿意使用另一个软件,使用svcutil的特殊命令,使用其他工具,无论如何,但我正在寻找一种方法将方法的值paremeter类型更改为可空类型,我必须注意,只是方法参数不是所有参数,因为一些对象定义,实际上具有可空类型的属性,并且它们可以从原点为空。
我知道我在问一些错误的东西,真正的解决方案应该是服务可以互操作,但正如我所说,我不能这么说。
我不认为手动查找和替换看起来是一种方法并将其更改为“?”应该是最好的主意。
我真的很感激任何帮助。
此致
答案 0 :(得分:0)
创建一个控制台应用程序,为您执行查找/替换并将其作为构建脚本的一部分运行