ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/CertificadoDigital].[Faces Servlet]] (http--127.0.0.1-8080-2) Servlet.service() for servlet Faces Servlet threw exception: java.lang.NullPointerException
at certificate.controle.UserCertControle.cadastrar(UserCertControle.java:29) [classes:]
at certificate.bean.UserCertBean.cadastrar(UserCertBean.java:32) [classes:]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.6.0_38]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) [rt.jar:1.6.0_38]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [rt.jar:1.6.0_38]
at java.lang.reflect.Method.invoke(Method.java:597) [rt.jar:1.6.0_38]
at org.apache.el.parser.AstValue.invoke(AstValue.java:262) [jbossweb-7.0.13.Final.jar:]
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278) [jbossweb-7.0.13.Final.jar:]
at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105) [jsf-impl-2.1.7-jbossorg-2.jar:]
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102) [jsf-impl-2.1.7-jbossorg-2.jar:]
at javax.faces.component.UICommand.broadcast(UICommand.java:315) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81) [jsf-impl-2.1.7-jbossorg-2.jar:]
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) [jsf-impl-2.1.7-jbossorg-2.jar:]
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) [jsf-impl-2.1.7-jbossorg-2.jar:]
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) [jbossweb-7.0.13.Final.jar:]
at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368) [jbossweb-7.0.13.Final.jar:]
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [jbossweb-7.0.13.Final.jar:]
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:671) [jbossweb-7.0.13.Final.jar:]
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:930) [jbossweb-7.0.13.Final.jar:]
at java.lang.Thread.run(Thread.java:662) [rt.jar:1.6.0_38]
Acho que estou comendo bola em alguma parte da arquitetura do projeto. O erro ocorre quando chamo a interface na classe controler.
Segue as classes:
xhtml
[code]
<h:head>
Cadastro e Emissão de Certificado
</h:head>
<h:body>
<h:form>
<h:messages></h:messages>
<h:panelGrid columns=“2”>
<h:outputLabel for="username" value="Username"></h:outputLabel>
<h:inputText id="username" value="#{userCertBean.userCertModel.username}" size="20" maxlength="50" required="true" requiredMessage="Nome do usuário"></h:inputText>
<h:outputLabel for="password" value="Password"></h:outputLabel>
<h:inputSecret id="password" value="#{userCertBean.userCertModel.password}" size="20" maxlength="50" required="true" requiredMessage="Senha"></h:inputSecret>
<h:outputLabel for="cn" value="Common Name"></h:outputLabel>
<h:inputText id="cn" value="#{userCertBean.userCertModel.CN}" size="20" maxlength="50" required="true" requiredMessage="Nome completo"></h:inputText>
<h:outputLabel id="lblLocalidade" for="localidade" value="Localidade" ></h:outputLabel>
<h:selectOneMenu id="localidade" value="#{userCertBean.userCertModel.l}">
<f:selectItem itemValue="BragancaPaulista" itemLabel="Bragança Paulista" />
<f:selectItem itemValue="Piracaia" itemLabel="Piracaia" />
<f:selectItem itemValue="Atibaia" itemLabel="Atibaia" />
<f:selectItem itemValue="BomJesusdosPerdoes" itemLabel="Bom Jesus dos Perdões" />
<f:selectItem itemValue="NazarePaulista" itemLabel="Nazaré Paulista" />
</h:selectOneMenu>
<h:outputLabel for="campus" value="Campus" ></h:outputLabel>
<h:selectOneMenu id="campus" value="#{userCertBean.userCertModel.o}">
<f:selectItem itemValue="BragancaPaulista" itemLabel="Bragança Paulista" />
</h:selectOneMenu>
<h:outputLabel for="tipoUsuario" value="Tipo de Usuário" ></h:outputLabel>
<h:selectOneMenu id="tipoUsuario" value="#{userCertBean.userCertModel.ou}">
<f:selectItem itemValue="Administrativo" itemLabel="Administrativo" />
<f:selectItem itemValue="Aluno" itemLabel="Aluno" />
<f:selectItem itemValue="Professor" itemLabel="Professor" />
</h:selectOneMenu>
<h:outputLabel for="tokenType" value="Tipo de Token"></h:outputLabel>
<h:selectOneMenu id="tokenType" value="#{userCertBean.userCertModel.tokenType}">
<f:selectItem itemValue="p12" itemLabel="#PKCS12" />
</h:selectOneMenu>
<h:outputLabel for="email" value="Email" size="20"></h:outputLabel>
<h:inputText id="email" value="#{userCertBean.userCertModel.e}" size="20" maxlength="50" required="true" requiredMessage="E-mail"></h:inputText>
</h:panelGrid>
<h:panelGrid columns="2">
<h:commandButton action="#{userCertBean.cadastrar}" value="Cadastrar"></h:commandButton>
<h:commandButton value="voltar"></h:commandButton>
</h:panelGrid>
</h:form>
</h:body>
[/code]Bean
[code]package certificate.bean;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.SignatureException;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import org.ejbca.core.model.ca.caadmin.CADoesntExistsException;
import certificate.controle.UserCertControle;
import certificate.model.UserCertModel;
@ManagedBean
@RequestScoped
public class UserCertBean {
public UserCertBean()
{
}
private UserCertModel userCertModel = new UserCertModel();
public String cadastrar () throws InvalidKeyException, NoSuchAlgorithmException, NoSuchProviderException, SignatureException, InvalidAlgorithmParameterException, CADoesntExistsException
{
UserCertControle addUserCertcontrole = new UserCertControle();
addUserCertcontrole.cadastrar(userCertModel);
return "Sucesso";
}
public UserCertModel getUserCertModel() {
return userCertModel;
}
public void setUserCertModel(UserCertModel userCertModel) {
this.userCertModel = userCertModel;
}
}[/code]
Model
[code]package certificate.model;
public class UserCertModel {
private String tokenType;
private String username;
private String password;
private String CN;
private String L;
private String E;
private String O;
private String path;
private String OU;
public String getTokenType() {
return tokenType;
}
public void setTokenType(String tokenType) {
this.tokenType = tokenType;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getCN() {
return CN;
}
public void setCN(String cN) {
CN = cN;
}
public String getL() {
return L;
}
public void setL(String l) {
L = l;
}
public String getE() {
return E;
}
public void setE(String e) {
E = e;
}
public String getO() {
return O;
}
public void setO(String o) {
O = o;
}
public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
}
public String getOu() {
return OU;
}
public void setOu(String OU) {
this.OU = OU;
}
}
[/code]
Controlador
[code]package certificate.controle;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.SignatureException;
import org.ejbca.core.model.ca.caadmin.CADoesntExistsException;
import certificate.interfaces.UserCertInterface;
import certificate.model.UserCertModel;
public class UserCertControle {
UserCertInterface userCertInterface;
UserCertModel userCertModel = new UserCertModel();
public String cadastrar(UserCertModel userCertModel) throws InvalidKeyException, NoSuchAlgorithmException, NoSuchProviderException, SignatureException, InvalidAlgorithmParameterException, CADoesntExistsException
{
return userCertInterface.addUserCert(userCertModel);
}
}
[/code]
Interface
[code]package certificate.interfaces;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.SignatureException;
import org.ejbca.core.model.ca.caadmin.CADoesntExistsException;
import certificate.model.UserCertModel;
public interface UserCertInterface {
public String addUserCert (UserCertModel userCertModel) throws InvalidKeyException, NoSuchAlgorithmException, NoSuchProviderException, SignatureException, InvalidAlgorithmParameterException, CADoesntExistsException;
}
[/code]
E essa é a classe que implementa a interface
EJBCAAPI
package certificate.api;
import java.io.FileInputStream;
import java.io.IOException;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.SignatureException;
import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.sql.SQLException;
import org.ejbca.core.ejb.ca.caadmin.CaSessionRemote;
import org.ejbca.core.model.SecConst;
import org.ejbca.core.model.ca.caadmin.CA;
import org.ejbca.core.model.ca.caadmin.CADoesntExistsException;
import org.ejbca.core.model.log.Admin;
import org.ejbca.core.model.ra.UserDataConstants;
import org.ejbca.core.model.ra.UserDataVO;
import org.ejbca.core.model.util.EjbRemoteHelper;
import org.ejbca.ui.cli.batch.BatchMakeP12;
import certificate.interfaces.UserCertInterface;
import certificate.model.UserCertModel;
public class ApiEjbca implements UserCertInterface{
Admin admin = new Admin(Admin.TYPE_RA_USER);//Usado para pegar o AdminSession
EjbRemoteHelper ejb = new EjbRemoteHelper();
CaSessionRemote caSession = ejb.getCaSession();
Boolean status = false;
UserDataVO userdata = new UserDataVO();
//CertificateRequestSession certRequest = ejb.getCertficateRequestSession();
//Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
public String emitirCert(String tokenType, UserDataVO userdata, String username, String password, String path)
{
if (tokenType == "p12")
{
userdata.setTokenType(SecConst.TOKEN_SOFT_P12);
} else if (tokenType == "jks")
{
userdata.setTokenType(SecConst.TOKEN_SOFT_JKS);
}
try
{
ejb.getUserAdminSession().addUser(admin, userdata, true);
BatchMakeP12 batch = new BatchMakeP12();
batch.setMainStoreDir(path);
batch.createAllNew();
status = true;
}catch (Exception e) {
e.printStackTrace();
}
if(status == true)
{
try {
ApiSignServer signserver = new ApiSignServer();
signserver.criaWorker(username, password);
} catch (SQLException e) {
e.printStackTrace();
}
return "Sucesso";
}else
return "Falha";
}
@Override
public String addUserCert(UserCertModel userCertModel) throws InvalidKeyException,
NoSuchAlgorithmException, NoSuchProviderException,
SignatureException, InvalidAlgorithmParameterException, CADoesntExistsException {
String DN = "CN=" + userCertModel.getCN() + ", E=" + userCertModel.getE() + ", O=" + userCertModel.getO() + ", OU=" + userCertModel.getOu() + ", L=" + userCertModel.getL() + ", C=BR";
CA CaInfo = caSession.getCA(admin, userCertModel.getOu());
int caid = CaInfo.getCAId();
userdata.setUsername(userCertModel.getUsername());
userdata.setPassword(userCertModel.getPassword());
userdata.setDN(DN);
userdata.setCAId(caid);
userdata.setEmail(userCertModel.getE());
userdata.setType(SecConst.USER_ENDUSER);
userdata.setStatus(UserDataConstants.STATUS_NEW);
userdata.setEndEntityProfileId(SecConst.EMPTY_ENDENTITYPROFILE);
userdata.setCertificateProfileId(SecConst.CERTPROFILE_FIXED_ENDUSER);
System.out.println("Username: " + userdata.getUsername());
System.out.println("Password: " + userdata.getPassword());
System.out.println("DN: " + userdata.getDN());
System.out.println("CaId: " + userdata.getCAId());
System.out.println("E-mail: " + userdata.getEmail());
System.out.println("Type: " + userdata.getType());
System.out.println("Status: " + userdata.getStatus());
System.out.println("End Entity Profile ID: " + userdata.getEndEntityProfileId());
System.out.println("Certificata Profile ID: " + userdata.getCertificateProfileId());
//return emitirCert(userCertModel.getTokenType(), userdata, userCertModel.getUsername(), userCertModel.getPassword(), userCertModel.getPath());
return "Sucesso";
}
public PrivateKey getPrivKey() throws CertificateException, IOException, KeyStoreException
{
// begin private key
KeyStore ks = KeyStore.getInstance("PKCS12");
String keyStorePass = "mar72063480";
PrivateKey privKey = null;
try {
ks.load(new FileInputStream("C:/Users/Marcos/Desktop/p12/MPFontana.p12"), keyStorePass.toCharArray());
String alias = ks.aliases().nextElement();
privKey = (PrivateKey) ks.getKey(alias, keyStorePass.toCharArray());
} catch (Exception ex) {
ex.printStackTrace();
}
// end private key
return privKey;
}
public PublicKey getPubKey() throws CertificateException, IOException, KeyStoreException
{
// begin public key
FileInputStream fis = new FileInputStream("C:/Users/Marcos/Desktop/p12/MPFontana.crt");
CertificateFactory certF = CertificateFactory.getInstance("X.509");
X509Certificate cert = (X509Certificate)certF.generateCertificate(fis);
PublicKey pubKey = cert.getPublicKey();
fis.close();
// end public key
return pubKey;
}
}