wsdl2java生成的存根不能读取类型为int或blank的WSDL

时间:2010-07-13 21:35:30

标签: axis2 wsdl2java

我创建了一个简单的类型

   <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>

2 个答案:

答案 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?程序员如何使用此数据来确定是否包含整数或字符串数​​据?你真的是说每个使用这些数据的人都应该先检查一下吗?

联盟是当时听起来像个好主意的事情之一,而且事实证明它并没有像以前想象的那样有用。