0

我创建了一个简单的类型

   <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(); 对象对象 = get_part_custom_field7.getObject();

该对象现在为空。即使 SOAP 消息是作为

   <bm:_part_custom_field7>9</bm:_part_custom_field7>
4

2 回答 2

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>

并解决了问题

于 2010-07-22T02:17:37.023 回答
0

我建议你停止使用union这种方式,也许根本不会。

您刚刚发现一种工具无法按照您想要的方式处理它 - 还会有很多其他工具。union在这种情况下并没有多大意义。在这种情况下应该使用什么 Java 类型?Object?

在这种情况下怎么办:

  <xs:simpleType name="SillyUnion">
    <xs:union memberTypes="xs:int xs:string"/>
  </xs:simpleType>

您将为此使用 wsdl2java 什么数据类型?Object再次?使用此数据的程序员将如何确定是否包含整数或字符串数​​据?你真的是说每个使用这些数据的人都应该先检查一下吗?

联合是当时听起来不错的想法之一,但事实证明它并没有以前想象的那么有用。

于 2010-07-22T02:26:05.237 回答