Я пишу приложение, в котором у пользователя есть опция регистрации и входа, где информация хранится и извлекается через файл XML. Проблема, с которой я сталкиваюсь, заключается в том, что после того, как пользователь зарегистрируется, остановит сервер Tomcat и снова включит его, вместо повторной регистрации, он должен иметь возможность войти в систему. Это работает 50% времени, но когда это не работает, я получаю следующую ошибку, и мои XML данные удаляются:
javax.xml.bind.UnmarshalException- with linked exception: [org.xml.sax.SAXParseException; systemId: file:/C:/Users/Kevin/eclipse-workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/KDTravelService/WEB-INF/classes/accounts.xml; lineNumber: 1; columnNumber: 1; Premature end of file.]
Вот мой код контроллера, который включает в себя маршалинг и демаршаллинг:
@RequestMapping(value = "/registration-complete", method = RequestMethod.POST)
public String register(@RequestParam("name") String name, @RequestParam("email") String email, @RequestParam("password") String password, @Validated User user, Model model) throws JAXBException, IOException, URISyntaxException{
Account account = new Account();
account.setName(name);
account.setEmail(email);
account.setPassword(password);
accountName = name;
accountEmail = email;
accountPassword = password;
try {
File file = ResourceUtils.getFile("classpath:accounts.xml");
JAXBContext jaxbContext = JAXBContext.newInstance(Account.class);
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
// output pretty printed
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
jaxbMarshaller.marshal(account, file);
jaxbMarshaller.marshal(account, System.out);
System.out.print(file.getAbsolutePath());
} catch (JAXBException e) {
e.printStackTrace();
}
model.addAttribute("name", user.getName());
return "registrationComplete";
}
@RequestMapping(value = "/login-complete", method = RequestMethod.POST)
public String login(@RequestParam("email") String email, @RequestParam("password") String password, @Validated User user, Model model) throws JAXBException, IOException, NullPointerException{
try {
File file = ResourceUtils.getFile("classpath:accounts.xml");
JAXBContext jaxbContext = JAXBContext.newInstance(Account.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
Account account = (Account) jaxbUnmarshaller.unmarshal(file);
accountName = account.getName();
accountEmail = account.getEmail();
accountPassword = account.getPassword();
if (email.contentEquals(accountEmail) && password.contentEquals(accountPassword)){
return "loginComplete";
}
else {
return "loginFail";
}
} catch (JAXBException e) {
model.addAttribute("error", e.toString());
return "error";
}
}
Когда пользователь регистрируется один раз, информация должна храниться в XML и не требовать повторной регистрации. И я не совсем уверен, почему это sporadi c с точки зрения того, когда он работает или нет; Я не могу вызвать это, это происходит случайно.