Java JAXB-Marshaller写入系统输出,但不写入XML文件

Java JAXB-Marshaller写入系统输出,但不写入XML文件,java,xml,spring-mvc,jaxb,marshalling,Java,Xml,Spring Mvc,Jaxb,Marshalling,我目前正在开发一个旅行服务,我们必须使用JAXB编组将用户信息写入XML文件。在Tomcat服务器上运行应用程序时,我在文本框中键入信息并单击“注册”,XML格式在控制台中写入,但实际上并没有写入XML文件。到目前为止,我的“accounts.xml”位于“src/main/resources”目录中。这是到目前为止我的控制器信息。我不确定它为什么不会写入XML文件: @Controller public class AccountController { @RequestMapping

我目前正在开发一个旅行服务,我们必须使用JAXB编组将用户信息写入XML文件。在Tomcat服务器上运行应用程序时,我在文本框中键入信息并单击“注册”,XML格式在控制台中写入,但实际上并没有写入XML文件。到目前为止,我的“accounts.xml”位于“src/main/resources”目录中。这是到目前为止我的控制器信息。我不确定它为什么不会写入XML文件:

@Controller
public class AccountController {
    @RequestMapping(value = "/register", method = RequestMethod.GET)
    public String registerPage(Locale locale, Model model) {
        return "register";
    }

    @RequestMapping(value = "/home", method = RequestMethod.POST)
    public String register(@RequestParam("name") String name, @Validated User user, Model model) throws JAXBException, IOException{

        Account account = new Account();
        account.setName(name);
        account.setEmail("email");
        account.setPassword("password");

        try {


            File file = ResourceUtils.getFile("classpath:accounts.xml");


            JAXBContext jaxbContext = JAXBContext.newInstance(Account.class);
            Marshaller jaxbMarshaller = jaxbContext.createMarshaller();

            jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
            jaxbMarshaller.marshal(account, file);
            jaxbMarshaller.marshal(account, System.out);


              } catch (JAXBException e) {
                  e.printStackTrace();
              }


        model.addAttribute("name", user.getName());
        return "user";
    }


}
提交信息时,我的控制台输出如下所示:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<account>
    <email>email</email>
    <name>testName</name>
    <password>password</password>
</account>

电子邮件
测试名
密码

任何帮助都将不胜感激

File File=ResourceUtils.getFile(“classpath:accounts.xml”);是一个“java.io.File”对象,它引用类路径的文件accounts.xml部分。这是部署在tomcat中的war文件的一部分


您需要使用File File=new File(“/tmp/accounts.xml”)中的File对象

如果您确实想这样做,您应该确保您的WAR已部署,并查看accounts.xml是否可写。看看这个:

此外,我看到您在每个请求中都创建了一个JAXBContext。JAXB规范说:

为了避免创建JAXBContext实例所涉及的开销,可以使用 鼓励JAXB应用程序重用JAXBContext实例。一 抽象类JAXBContext的实现需要 线程安全,因此,应用程序中的多个线程可以共享 相同的JAXBContext实例


你应该将JAXBLACKE移动到静态字段,因为只需要一个实例。

HI,如果有任何答案解决了你的问题,请考虑通过点击复选标记来接受它。这向更广泛的社区表明,你已经找到了一个解决方案,并给回答者和你自己带来了一些声誉。没有义务这样做。