Почему я получаю org.xml.sax.SAXException для этого блока XML? - PullRequest
4 голосов
/ 12 мая 2010

Я немного анонимизировал это. Надеюсь, это не умаляет полезного сообщения. Я думаю, что в stringARRAY меня бросают, но я не уверен, поэтому, если я смотрю не в том месте, позвольте мне знать.

Из WSDL

  <xsd:element name="LongishOpName">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element maxOccurs="unbounded" name="stringARRAY" type="xsd:string" />
        <xsd:element name="stringfield1" type="xsd:string" />
        <xsd:element name="stringfield2" type="xsd:string" />
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

Фактический вызов метода выглядит следующим образом:

string originalValue = "some useful value";
string[] usefulName1 = new[] { originalValue };
service.response[] responses = server.LongishOpName( usefulName1, someString1, someString2 );

И он генерирует этот XML на сервер (благодаря Fiddler2):

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <soap:Body>
    <LongishOpName xmlns="http://appropriate-namespace">
      <stringARRAY>114003</stringARRAY>
      <stringfield1>a string</stringfield1>
      <stringfield2>a string</stringfield2>
    </LongishOpName>
  </soap:Body>
</soap:Envelope>

На что я получаю этот ответ

<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <soapenv:Body>
    <soapenv:Fault>
      <faultcode>soapenv:Server.userException</faultcode>
      <faultstring>org.xml.sax.SAXException: Found character data inside an array element while deserializing</faultstring>
      <detail>
        <ns1:hostname xmlns:ns1="http://xml.apache.org/axis/">SERVERNAME</ns1:hostname>
      </detail>
    </soapenv:Fault>
  </soapenv:Body>
</soapenv:Envelope>

Мое мыльное сообщение действительно искажено? (да, я использую веб-ссылки ASP.NET для выполнения всех операций по подъему, я не создаю вручную)

Должен ли я делать что-то другое?

Мне просто нужно пойти домой и поспать на нем, а завтра все будет "просто работать"?

Ответы [ 2 ]

4 голосов
/ 25 мая 2010

Таким образом, ответ на этот вопрос был следующим: WSDL не соответствует тому, что делает настоящий метод. Я не знаю, как это точно.

Для пояснения метод принимает массив из трех строк, а не массив строк, а затем две отдельные строки. Таким образом, «двойная проверка WSDL является точной».

0 голосов
/ 12 мая 2010

Полагаю, это связано с тем, что пространства имен не обрабатываются должным образом.

Мне всегда полезно вырезать и вставлять сообщения об ошибках, которые я получаю в Google , и посмотреть, не возникла ли у кого-то еще такая же проблема. Я не всегда нахожу ответ, но обычно узнаю, что я ни один, ни первый.

...