dúvidas DTD

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");
	}

}

poxa ninguém sabe? :cry: