我创建了一个简单的类型
<xsd:simpleType name="IntOrBlank"> <xsd:union memberTypes="xsd:int"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:enumeration value=""/> </xsd:restriction> </xsd:simpleType> </xsd:union> </xsd:simpleType>
然后我使用来自axis2的wsdl2java创建存根,发送工作和接收似乎工作,直到我尝试从此类型获取整数值。我的代码是这样的:
IntOrBlank get_part_custom_field7 = each_record [0] .get_part_custom_field7(); Object object = get_part_custom_field7.getObject();
现在该对象为null。尽管SOAP消息是以
进入的<bm:_part_custom_field7>9</bm:_part_custom_field7>
答案 0 :(得分:0)
我浏览代码,发现wsdl2java错误地生成了存根。创建的对象是java.math.BigInteger,而存根检查以确保该对象是Integer的实例,因此,该对象为null而不会抛出任何异常。我将类型更改为
<xsd:simpleType name="IntOrBlank"> <xsd:union memberTypes="xsd:integer"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:enumeration value=""/> </xsd:restriction> </xsd:simpleType> </xsd:union> </xsd:simpleType>
并解决了问题
答案 1 :(得分:0)
我建议你不要那样使用union
,也许根本不用。
你刚刚发现了一种不按你喜欢的方式处理它的工具 - 还会有很多其他工具。在这种情况下,union
并没有多大意义。在这种情况下应该使用什么Java类型? Object
?
在这种情况下怎么样:
<xs:simpleType name="SillyUnion">
<xs:union memberTypes="xs:int xs:string"/>
</xs:simpleType>
wsdl2java会使用哪种数据类型?再次Object
?程序员如何使用此数据来确定是否包含整数或字符串数据?你真的是说每个使用这些数据的人都应该先检查一下吗?
联盟是当时听起来像个好主意的事情之一,而且事实证明它并没有像以前想象的那样有用。