杰克逊XmlMapper

时间:2019-10-31 17:15:44

标签: java json jackson

我有一个有效的方法,该方法使用Jackson来发布JSON格式的数据。

我基本上复制了该方法,将ObjectMapper更改为XmlMapper。我还将RequestProperty从application/json更改为application/xml

   private static void post_xml_to_url(Logger logger, Object infoToPost, URL url, String user, String psw) throws JsonProcessingException, MalformedURLException, IOException, NoSuchAlgorithmException, KeyManagementException {
    logger.log(Level.INFO, "Posting Ticket..");

    XmlMapper mapper = new XmlMapper(); //Chang back to use JSON
    mapper.enable(SerializationFeature.INDENT_OUTPUT);

    byte[] val = mapper.writeValueAsBytes(infoToPost);//Error is thrown here
    System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(infoToPost));
    HttpsURLConnection con = null;
    try {
        disableCertificateValidation();


        con = (HttpsURLConnection) url.openConnection();
        String encoding = Base64.getEncoder().encodeToString((user + ":" + psw).getBytes("UTF-8"));
        con.setRequestProperty("Authorization", String.format("Basic %s", encoding));
        con.setDoOutput(true);
        con.setDoInput(true);
        con.setRequestProperty("Content-Type", "application/xml; charset=UTF-8");
        con.setRequestMethod("POST");
        con.setRequestProperty("User-Agent", "Java client");

        DataOutputStream wr = new DataOutputStream(con.getOutputStream());
        wr.write(val);

        StringBuilder content;
        try (BufferedReader in = new BufferedReader(
                new InputStreamReader(con.getInputStream()))) {

            String line;
            content = new StringBuilder();

            while ((line = in.readLine()) != null) {
                content.append(line);
                content.append(System.lineSeparator());
            }

        }

    } finally {
        con.disconnect();
    }

}

似乎存在一些依赖问题

  

线程“主”中的异常java.lang.NoSuchMethodError:com.fasterxml.jackson.dataformat.xml.ser.ToXmlGenerator.getOutputContext()Lcom / fasterxml / jackson / core / json / JsonWriteContext;       在com.fasterxml.jackson.dataformat.xml.ser.ToXmlGenerator.close(ToXmlGenerator.java:951)       在com.fasterxml.jackson.databind.ObjectMapper._configAndWriteValue(ObjectMapper.java:3911)       在com.fasterxml.jackson.databind.ObjectMapper.writeValueAsBytes(ObjectMapper.java:3244)

我很难弄清楚我需要解决哪个JAR文件。我想念什么?

我已附上图书馆中当前文件的屏幕截图:

Current Libraries

2 个答案:

答案 0 :(得分:1)

我有类似的错误。我发现我有不同版本的:

  • jackson-dataformat-xml
  • 杰克逊注释

更新到类似版本后问题消失。 使用您的构建包工具列出您的库 jar 版本。

例如,运行以下命令之一以正确显示当前的 jar 依赖项:

  • mvn 依赖:树 或
  • mvn 依赖:解决

后者也解决了当前的 maven 冲突。希望我的回答能帮到你!

答案 1 :(得分:-1)

该异常指出com.fasterxml.jackson.dataformat.xml.ser.ToXmlGenerator缺少方法getOutputContext()。

您可能使用了错误的此类。

首先,确定哪个jar包含该类。您可以通过在库中的每个jar上运行jar -tf来执行此操作,否则您的IDE可能会更简单。

一旦找到包含该类的jar,就可以在线找到该库的API,并确定提供缺少的方法所需的版本。