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