response.asXml() винаги връща грешка при кодиране на Play Framework

Правя приложение за play framweork. Опитах се да получа xml съдържание от уеб услуги. http://example.com/api връща xml, но кодирането му е EUC-JP. (charset=euc-jp)

Написах следния код.

WSRequest request = ws.url("http://example.com/api");
WSRequest complexRequest = request.setHeader("Accept", "application/xml")
    .setContentType("application/x-www-form-urlencoded");
Promise<Document> documentPromise = complexRequest.post("key1=value1").map(response -> {
    String name = XPath.selectText("//name", response.asXml());
    System.out.println("name :" + name);
    return response.asXml();
});

Въпреки това, response.asXml() винаги връща грешка:

[Fatal Error] :xx:xx: Invalid byte 1 of 1-byte UTF-8 sequence.

Как мога да получа данни с помощта на response.asXml без грешка?


person satomikko94    schedule 06.01.2016    source източник
comment
stackoverflow.com/questions/15545720/   -  person Rajarshi Das    schedule 06.01.2016


Отговори (1)


Накрая използвах DocumentBuilder от името на asXml, като Как да коригирам невалиден байт 1 от 1-байтова UTF-8 последователност

  Promise<Result> resultPromise = request.post("key=" + value).map(response -> {
    DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
    ByteArrayInputStream stream = new ByteArrayInputStream(response.getBody().getBytes("euc-jp"));
    String name = XPath.selectText("//name", builder.parse(stream)));
    System.out.println("name :" + name);

    return ok(main.render());
  });
person satomikko94    schedule 13.01.2016