SOAP сообщение об ошибке для структуры, когда структура верна - PullRequest
0 голосов
/ 12 февраля 2020

Я пытаюсь сделать простой SOAP вызов веб-службы, используя Firefox «Открыть вкладку RESTED» для тестирования. Я думаю, что у меня есть правильная структура вызова, но я получаю сообщение об ошибке внутреннего сервера 500 "Серверу не удалось прочитать запрос. ---> В документе XML ошибка (8, 33). - -> Входная строка была не в правильном формате. "

Я выполняю этот вызов:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <LoginAndGetData xmlns="http://url.com">
      <username>user</username>
      <password>password</password>
      <p>
        <WarriorId>false</WarriorId>
        <WarriorIds>
          <int></int>
          <int></int>
        </WarriorIds>
        <Lessons>false</Lessons>
        <Programs>false</Programs>
        <Year>false</Year>
        <IdNumber>true</IdNumber>
        <ExtraFields>true</ExtraFields>
        <UpdateDate>null</UpdateDate>
        <DivisionInfo>true</DivisionInfo>
        <ProgramInfo>true</ProgramInfo>
        <AccumulatedAcademicPoints>false</AccumulatedAcademicPoints>
        <MoneyBalanceInfo>false</MoneyBalanceInfo>
        <PassportImage>false</PassportImage>
        <SpecializationData>true</SpecializationData>
        <OtherID></OtherId>
        <FullName></FullName>
        <ProgramInfoDetails>false</ProgramInfoDetails>
        <RegistraionRoadMaps>false</RegistraionRoadMaps>
        <WarriorCreationDate>null</WarriorCreationDate>
        <WarriorLearningProgramUpdateDate>null</WarriorLearningProgramUpdateDate>
        <RegistraionRoadMapUpdateDate>null</RegistraionRoadMapUpdateDate>
        <Phone>true</Phone>
      </p>
    </LoginAndGetData>
  </soap:Body>
</soap:Envelope>

Документация для службы SOAP выглядит следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <LoginAndGetData xmlns="http://url.com/">
      <username>string</username>
      <password>string</password>
      <p>
        <WarrirId>int</WarriorId>
        <WarriorIds>
          <int>int</int>
          <int>int</int>
        </WarriorIds>
        <Lessons>boolean</Lessons>
        <Programs>boolean</Programs>
        <Year>int</Year>
        <IdNumber>int</IdNumber>
        <ExtraFields>boolean</ExtraFields>
        <UpdateDate>dateTime</UpdateDate>
        <DivisionInfo>boolean</DivisionInfo>
        <ProgramInfo>boolean</ProgramInfo>
        <AccumulatedAcademicPoints>boolean</AccumulatedAcademicPoints>
        <MoneyBalanceInfo>boolean</MoneyBalanceInfo>
        <PassportImage>boolean</PassportImage>
        <SpecializationData>boolean</SpecializationData>
        <OtherId>string</OtherId>
        <FullName>string</FullName>
        <ProgramInfoDetails>boolean</ProgramInfoDetails>
        <RegistraionRoadMaps>boolean</RegistraionRoadMaps>
        <WarriorCreationDate>dateTime</WarriorCreationDate>
        <WarriorLearningProgramUpdateDate>dateTime</WarriorLearningProgramUpdateDate>
        <RegistraionRoadMapUpdateDate>dateTime</RegistraionRoadMapUpdateDate>
        <Phone>string</Phone>
      </p>
    </LoginAndGetData>
  </soap:Body>
</soap:Envelope>

Функции WSDL определены следующим образом:

<s:element name="LoginAndGetData">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="username" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="password" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="p" type="tns:RequestParameters"/>
</s:sequence>
</s:complexType>
</s:element>
<s:complexType name="RequestParameters">
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="WarriorId" nillable="true" type="s:int"/>
<s:element minOccurs="0" maxOccurs="1" name="WarriorIds" type="tns:ArrayOfInt"/>
<s:element minOccurs="1" maxOccurs="1" name="Lessons" nillable="true" type="s:boolean"/>
<s:element minOccurs="1" maxOccurs="1" name="Programs" nillable="true" type="s:boolean"/>
<s:element minOccurs="1" maxOccurs="1" name="Year" nillable="true" type="s:int"/>
<s:element minOccurs="1" maxOccurs="1" name="IdNumber" nillable="true" type="s:int"/>
<s:element minOccurs="1" maxOccurs="1" name="ExtraFields" nillable="true" type="s:boolean"/>
<s:element minOccurs="1" maxOccurs="1" name="UpdateDate" nillable="true" type="s:dateTime"/>
<s:element minOccurs="1" maxOccurs="1" name="DivisionInfo" nillable="true" type="s:boolean"/>
<s:element minOccurs="1" maxOccurs="1" name="ProgramInfo" nillable="true" type="s:boolean"/>
<s:element minOccurs="1" maxOccurs="1" name="AccumulatedAcademicPoints" type="s:boolean"/>
<s:element minOccurs="1" maxOccurs="1" name="MoneyBalanceInfo" nillable="true" type="s:boolean"/>
<s:element minOccurs="1" maxOccurs="1" name="PassportImage" nillable="true" type="s:boolean"/>
<s:element minOccurs="1" maxOccurs="1" name="SpecializationData" nillable="true" type="s:boolean"/>
<s:element minOccurs="0" maxOccurs="1" name="OtherId" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="FullName" type="s:string"/>
<s:element minOccurs="1" maxOccurs="1" name="ProgramInfoDetails" type="s:boolean"/>
<s:element minOccurs="1" maxOccurs="1" name="RegistraionRoadMaps" nillable="true" type="s:boolean"/>
<s:element minOccurs="1" maxOccurs="1" name="WarriorCreationDate" nillable="true" type="s:dateTime"/>
<s:element minOccurs="1" maxOccurs="1" name="WarriorLearningProgramUpdateDate" nillable="true" type="s:dateTime"/>
<s:element minOccurs="1" maxOccurs="1" name="RegistraionRoadMapUpdateDate" nillable="true" type="s:dateTime"/>
<s:element minOccurs="0" maxOccurs="1" name="Phone" type="s:string"/>
</s:sequence>
</s:complexType>

Вызов WSDL возвращает следующие функции и атрибуты:

string(X) "[ "LoginAndGetDataResponse LoginAndGetData(LoginAndGetData $parameters)"]"

string(X) "[ "struct LoginAndGetData {\n string username;\n string password;\n WarriorRequestParameters p;\n}", "struct WarriorRequestParameters {\n int WarriorId;\n ArrayOfInt WarriorIds;\n boolean Lessons;\n boolean Programs;\n int Year;\n int IdNumber;\n boolean ExtraFields;\n dateTime UpdateDate;\n boolean DivisionInfo;\n boolean ProgramInfo;\n boolean AccumulatedAcademicPoints;\n boolean MoneyBalanceInfo;\n boolean PassportImage;\n boolean SpecializationData;\n string OtherId;\n string FullName;\n boolean ProgramInfoDetails;\n boolean RegistraionRoadMaps;\n dateTime FromWarriorCreationDate;\n dateTime WarriorLearningProgramUpdateDate;\n dateTime RegistraionRoadMapUpdateDate;\n string Phone;\n}", "struct ArrayOfInt {\n int int;\n}", "struct LoginAndGetWarriorsDataResponse {\n ArrayOfWarriorDataItem LoginAndGetWarriorsDataResult;\n}"

Я понимаю, что что-то в структура элемента P в вызове SOAP неверна, но я понятия не имею, что ...

1 Ответ

0 голосов
/ 13 февраля 2020

Я нашел проблему. Проблема была в нулевых значениях. SOAP Нулевые значения должны быть определены следующим образом:

<IdNumber xsi:nil="true"/>

Я не могу использовать «Ноль» в качестве значения, так как оно будет передано в виде строки (и пустой элемент также будет передан как пустая строка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...