Olá pessoal da GUJ.
Estou com o seguinte problema , eu já consegui ler bonitinho o meu xml e já criei o DTD pra ele , só que agora fica a grande dúvida.
Tem de alguma forma fazer com que o DTD seja validado antes que eu começe a varrer o arquivo pelas informaçoes do xml? Não estou conseguindo controlar esta validação…ai vai o meu xml(com o DTD no corpo mesmo.). Estou usando o Struts tbém…
PS: tem algumas coisas que são meio temporárias…
PS2: eu sei que não está validando porque quando por exemplo o meu xmlreader vai ler a tag que não veio no xml , ele lança um a exceção “NullPointerException”.
Qualquer sugestão é bem vinda!
[]´s
user_import.xml
<?xml version="1.0"?>
<!DOCTYPE users [
<!ELEMENT users (user+)>
<!ELEMENT user (firstname,lastname,password,login,initialcontext)>
<!ELEMENT firstname (#PCDATA)>
<!ELEMENT lastname (#PCDATA)>
<!ELEMENT password (#PCDATA)>
<!ELEMENT login (#PCDATA)>
<!ELEMENT initialcontext (#PCDATA)>
]>
<users>
<user>
<firstname>Jair Elton</firstname>
<lastname>Silva</lastname>
<password>1234</password>
<login>jairteste</login>
<initialcontext></initialcontext>
</user>
<user>
<firstname>Roberto</firstname>
<lastname>Carlos</lastname>
<password>1234</password>
<login>robertoteste</login>
<initialcontext>TIDIA</initialcontext>
</user>
</users>
ImportUserAction
package br.fapesp.tidia.ae.presentation.lms.usermgr.action;
import java.sql.Timestamp;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionError;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import br.fapesp.tidia.ae.common.lms.commontypes.Ticket;
import br.fapesp.tidia.ae.common.lms.commontypes.UserInfo;
import br.fapesp.tidia.ae.common.lms.commontypes.UserName;
import br.fapesp.tidia.ae.common.shared.exceptions.SystemException;
import br.fapesp.tidia.ae.elearning.lms.toolmgr.impl.ErrorChecker;
import br.fapesp.tidia.ae.presentation.lms.usermgr.form.UserImportForm;
import br.fapesp.tidia.ae.system.lms.api.spec.LMSAPILocal;
/**
*
* @author Alberto Ngai
*
*/
public class UserImportAction extends Action {
/**
* <p>
* Default constructor
* </p>
*
*/
public UserImportAction() {
}
/**
* <p>
* Request the UserManager to enable or disable an user account
* </p>
*/
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest req, HttpServletResponse resp) throws Exception {
boolean userExists = false;
LMSAPILocal lms = (LMSAPILocal) req.getSession().getAttribute("LMSAPI");
UserImportForm importForm = (UserImportForm)form;
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
factory.setValidating(true);
builder.setErrorHandler(new ErrorChecker());
Document doc = builder.parse(importForm.getTxtfile().getInputStream());
//root representa a tag raiz do xml
Element root = doc.getDocumentElement();
for(int i=0;i< root.getElementsByTagName("user").getLength();i++ ) {
UserInfo user = new UserInfo();
UserName name = new UserName();
Element info = (Element)root.getElementsByTagName("user").item(i);
String login = info.getElementsByTagName("login").item(0).getFirstChild().getNodeValue();
name.setFirstName(info.getElementsByTagName("firstname").item(0).getFirstChild().getNodeValue());
name.setLastName(info.getElementsByTagName("lastname").item(0).getFirstChild().getNodeValue());
user.setName(name);
user.setPassword(info.getElementsByTagName("password").item(0).getFirstChild().getNodeValue());
user.setLogin(login);
user.setRegister(new Timestamp(System.currentTimeMillis()));
Boolean exists = lms.userExists(login);
if(exists.booleanValue()) {
ActionErrors errors = new ActionErrors();
errors.add("ActionError.GLOBAL_ERROR", new ActionError(
"user.import.errors.loginexists"));
saveErrors(req, errors);
userExists = true;
}
if(info.getElementsByTagName("initialcontext").getLength() == 0 || info.getElementsByTagName("initialcontext").item(0).getNodeValue() == null) {
Ticket ticket = lms.getTicket();
user.setInitialContext(ticket.getIdContext());
} else {
Long contextID = null;
try {
contextID = lms.locateContext(info.getElementsByTagName("initialcontext").
item(0).getFirstChild().getNodeValue());
user.setInitialContext(contextID);
} catch (SystemException e) {
ActionErrors errors = new ActionErrors();
errors.add("ActionError.GLOBAL_ERROR", new ActionError(
"user.import.errors.initialcontext"));
saveErrors(req, errors);
}
}
// Se tudo ocorrer bem insere o usuario
if(!userExists) {
lms.createUser(user);
}
}
if(userExists) {
mapping.findForward("fail");
}
return mapping.findForward("ok");
}
}