Веб-сервис отправляет ноль в целочисленных полях - PullRequest
2 голосов
/ 01 июня 2011

Я пытаюсь использовать сторонний веб-сервис.Одно из возвращаемых полей определяется как

<s:element name="SomeField" minOccurs="0" maxOccurs="1" type="s:int"/> 

. В ответе SOAP они отправляют поле как

<SomeField/>

. Это приводит к тому, что десериализатор .Net создает исключение какпустой элемент xml не является допустимым целым числом.

Каков наилучший способ справиться с этим?

Я попытался настроить wsdl, чтобы пометить поле как обнуляемое, что помечает сгенерированные поля как int?но десериализатор все равно не работает.

Я могу реализовать конечную точку либо как ссылку на службу, либо как ссылку на веб-службу.

Ответы [ 3 ]

4 голосов
/ 01 июня 2011

Я не думаю, что .Net десериализатор может справиться с этим.

Как насчет настройки определения SomeField в строку.Таким образом, вы можете проверить нулевое значение, но вам нужно будет сделать Int32.Parse к реальному значению.

<s:element name="SomeField" minOccurs="0" maxOccurs="1" type="s:string"/> 

Аксессор может быть:

 void int? GetSomeField()
 {
     if (someField == null) return null;
     return In32.Parse(someField);
 }
3 голосов
/ 01 июня 2011

Вы можете установить значение по умолчанию 0. Таким образом, если значение не установлено, оно отправит 0.

<s:element name="SomeField" minOccurs="0" maxOccurs="1" default="0" type="s:int"/> 
1 голос
/ 01 июня 2011

Это ошибка в их коде.Это не соответствует схеме.XMLSpy говорит:

File Untitled6.xml is not valid.
Value '' is not allowed for element <SomeField>.
    Hint: A valid value would be '0'.
    Error location: root / SomeField
    Details
        cvc-datatype-valid.1.2.1: For type definition 'xs:int' the string '' does not match a literal in the lexical space of built-in type definition 'xs:int'.
        cvc-simple-type.1: For type definition 'xs:int' the string '' is not valid.
        cvc-type.3.1.3: The normalized value '' is not valid with respect to the type definition 'xs:int'.
        cvc-elt.5.2.1: The element <SomeField> is not valid with respect to the actual type definition 'xs:int'.

Я получил это со следующей схемой:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:element name="root">
        <xs:annotation>
            <xs:documentation>Comment describing your root element</xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:sequence>
            <xs:element name="SomeField" minOccurs="0" maxOccurs="1" type="xs:int"/> 
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

и следующим XML:

<?xml version="1.0" encoding="UTF-8"?>
<root xsi:noNamespaceSchemaLocation="Untitled5.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <SomeField/>
</root>
...