首页 > 解决方案 > Soap 服务无法写入 XML 文件

问题描述

在 Tomcat v9.0 服务器上的 Axis 引擎上运行的 Simple Soap 服务需要读取和写入 XML 文件。我在 Eclipse 中像动态 Web 项目一样开发了肥皂服务,因此 XML 文件位于 WebContent->WEB-INF->resources->...

当我读取文件时,一切正常,但是当我想写入文件时,我得到 InvocationTargetException。由于我正常读取文件,我想我在写入文件时没有像应该那样打开流,所以任何人都可以指导我如何正确地做到这一点?

这是读取文件的方法,这很有效:

public Station deserialization(String name, String path) {
        Station s=null;
        try {
            URL url=getClass().getClassLoader().getResource(path+File.separator+name+".xml");
            InputStream is=url.openStream();
            XMLDecoder decoder = new XMLDecoder(is);
            s=(Station) decoder.readObject();
            decoder.close();
        } catch (Exception e) {
            Main.LOGGER.info("Station deserializaton was not successful!");
        }
        return s;
    }

这是写入文件的方法,这不起作用:

public boolean serialize(Station s, String path) {
        try {
            URL url=getClass().getClassLoader() .getResource(path+File.separator+s.getName()+".xml");
            URLConnection con=url.openConnection();
            con.setDoOutput(true);
            OutputStream out=con.getOutputStream();
            XMLEncoder encoder = new XMLEncoder(out);
            encoder.writeObject(s);
            encoder.close();
        } catch (Exception e) {
            Main.LOGGER.info("Station serialization was not successful!");
            return false;
        }
        return true;
    }

我真正的问题是如何在读取文件时使用相同的原理而对写入文件不起作用?两种方法中的文件路径相同。

标签: javaxmlurlserializationsoap

解决方案


我发现了问题所在。原来您可以使用 URL 读取文件,但不能写入 URL 或 URLConnection。我不得不使用 FileOutputStream 写入文件:

XMLEncoder encoder=new XMLEncoder(new FileOutputStream("file_path"));

如果您希望 Web 服务使用它们,您也可以将文件保存在 WebContent->WEB-INF 中(如果您在 Eclipse 中开发 Web 服务),因为它会复制它们。请密切注意您提供的路径,仔细检查它是否是正确的!


推荐阅读