WSDL с типом int или blank не читается заглушками, сгенерированными wsdl2java - PullRequest
0 голосов
/ 14 июля 2010

Я создал простой тип

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

Затем я создаю заглушки, используя wsdl2java из axis2, отправка и получение работали, пока я не попытаюсь получить целочисленное значение изэтот тип.Мой код таков:

IntOrBlank get_part_custom_field7 = each_record [0] .get_part_custom_field7 ();Object object = get_part_custom_field7.getObject ();

Объект теперь нулевой.даже если сообщение SOAP приходит как

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

Ответы [ 2 ]

0 голосов
/ 22 июля 2010

Я бы посоветовал вам прекратить использовать union таким образом, может быть, совсем нет.

Вы только что нашли один инструмент, который не справляется с этим так, как вам бы хотелось - будетбыть много других.union не имеет особого смысла в этом контексте.Какой тип Java следует использовать в этом случае?Object?

А как в этом случае:

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

Какой тип данных вы бы использовали для этого в wsdl2java?Object снова?Как программист, использующий эти данные, определит, были ли включены целочисленные или строковые данные?Вы действительно имеете в виду, что каждый, кто использует эти данные, должен проверить в первую очередь?

Союз - это одна из тех вещей, которая в то время звучала как хорошая идея, и которая оказалась не такой полезной, как считалось ранее.

0 голосов
/ 22 июля 2010

Я прослеживаю код и обнаружил, что wsdl2java сгенерировал заглушки неправильно.Созданный объект был java.math.BigInteger, в то время как заглушки выполняли проверку, чтобы убедиться, что объект является экземпляром Integer, в результате объект является нулевым, не вызывая каких-либо исключений.Я изменил тип на

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

и решил проблему

...