отправка SOAP-сообщения через HTTP в Java - PullRequest
1 голос
/ 02 декабря 2010

У меня есть следующий код:

  String xmldata = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>" + 
        "<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://www.w3.org/2003/05/soap-envelope\" " + 
          "xmlns:wsdl=\"http://schemas.xmlsoap.org/wsdl/\" " + 
          "xmlns:ns1=\"http://org.apache.axis2/xsd\"  " + 
          "xmlns:ns=\"http://tfc\" " +
          "xmlns:wsaw=\"http://www.w3.org/2006/05/addressing/wsdl\" " +
          "xmlns:http=\"http://schemas.xmlsoap.org/wsdl/http/\"  " +
          "xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"" +
          "xmlns:mime=\"http://schemas.xmlsoap.org/wsdl/mime/\"  " +
          "xmlns:soap=\"http://schemas.xmlsoap.org/wsdl/soap/\"  " +
          "xmlns:soap12=\"http://schemas.xmlsoap.org/wsdl/soap12/\"  " +
          "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"  " +
          "xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" > " +
          "<SOAP-ENV:Body>" +
              "<ns:CalFare xmlns:ns=\"http://tfc\">" +
              "<ns:nonairport>1</ns:nonairport>" +
              "<ns:distance>20</ns:distance>" +
              "</ns:CalFare>" +
          "</SOAP-ENV:Body>" +
          "</SOAP-ENV:Envelope>";

          //Create socket
          String hostname = "128.196.239.112";
          int port = 8080;
          InetAddress  addr = InetAddress.getByName(hostname);
          Socket sock = new Socket(addr, port);

          //Send header
          String path = "/LocatorzTaxiFare/services/Calculator.CalculatorHttpSoap11Endpoint/";
          BufferedWriter  wr = new BufferedWriter(new OutputStreamWriter(sock.getOutputStream(),"UTF-8"));
          // You can use "UTF8" for compatibility with the Microsoft virtual machine.
          wr.write("POST " + path + " HTTP/1.0\r\n");
          wr.write("Host: 128.196.239.112\r\n");
          wr.write("Content-Length: " + xmldata.length() + "\r\n");
          wr.write("Content-Type: text/xml; charset=\"utf-8\"\r\n");
          wr.write("\r\n");

          //Send data
          wr.write(xmldata);
          wr.flush();

          // Response
          BufferedReader rd = new BufferedReader(new InputStreamReader(sock.getInputStream()));
          String line;
          while((line = rd.readLine()) != null)
        System.out.println(line);
        } catch (Exception e) {
          e.printStackTrace();
        }

Теперь выдается внутренняя ошибка сервера со следующим ответом:

<?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Header xmlns:wsa="http://www.w3.org/2005/08/addressing"><wsa:Action>http://www.w3.org/2005/08/addressing/soap/fault</wsa:Action></soapenv:Header><soapenv:Body><soapenv:Fault><faultcode></faultcode><faultstring>com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character 'x' (code 120) excepted space, or '>' or "/>"&#xd;
 at [row,col {unknown-source}]: [1,390]</faultstring><detail /></soapenv:Fault></soapenv:Body></soapenv:Envelope>

Вот ссылка на WSDL

1 Ответ

5 голосов
/ 02 декабря 2010

На первый взгляд похоже, что отправляемый вами XML-файл недействителен.Процессор XML обнаружил «x», когда искал пробел, «>» или «/>».Итак, исправьте вашу полезную нагрузку.

Да ... вот оно:

 "xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"" +
 "xmlns:mime=\"http://schemas.xmlsoap.org/wsdl/mime/\"  " +

В первой строке неверно, вам нужно добавить завершающий пробел (как во второй строке)

Имейте в виду, это помогает читать сообщения об ошибках.Это именно то, что было сказано неправильно.Здесь нет настоящей магии.

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