can you please tell whatis wrong in the program.
//the interface
package com.nanotech.nanopos.synchronize.actions.user;
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.security.Key;
import org.w3c.dom.Document;
public interface ISyncUser extends Remote {
public void updateUsers(Document d, Key keyEncryptKey) throws RemoteException;
}
// the object
package com.nanotech.nanopos.synchronize.actions.user;
import com.nanotech.framework.Framework;
import com.nanotech.nanopos.user.bl.IUserBO;
import com.nanotech.nanopos.user.bl.UserBO;
import com.nanotech.nanopos.user.delegate.IUserDelegate;
import java.rmi.MarshalledObject;
import java.rmi.RemoteException;
import java.rmi.activation.Activatable;
import java.rmi.activation.ActivationID;
import java.security.Key;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESedeKeySpec;
import org.apache.xml.security.encryption.XMLCipher;
import org.apache.xml.security.utils.EncryptionConstants;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class SyncUser extends Activatable implements ISyncUser{
Document d;
public SyncUser(ActivationID id, MarshalledObject data) throws RemoteException {
super(id, 0);
}
public void updateUsers(Document doc, Key keyEncryptKey) throws RemoteException {
try {
d = decryptFile(doc,keyEncryptKey);
Element root1 = d.getDocumentElement();
NodeList nusers = root1.getChildNodes();
Framework nanoFramework = Framework.getInstance();
IUserDelegate userDelegate = (IUserDelegate) nanoFramework.getBean("userDelegate");
for(int j=0; j < nusers.getLength(); j++){
Node n = nusers.item(j);
String s = n.getAttributes().getNamedItem("status").getNodeValue();
NodeList nl = n.getChildNodes();
IUserBO user = new UserBO();
user.setUserId(nl.item(0).getFirstChild().getNodeValue());
user.setUserName(nl.item(1).getFirstChild().getNodeValue());
user.setPassword(nl.item(2).getFirstChild().getNodeValue());
user.setRights(Integer.parseInt(nl.item(3).getFirstChild().getNodeValue()));
user.setStatus("S");
if(s.equalsIgnoreCase("A")){
userDelegate.addUser(user);
}else if(s.equalsIgnoreCase("E")){
userDelegate.updateUser(user);
}else if(s.equalsIgnoreCase("D")){
userDelegate.deleteUser(user.getUserId());
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
public Document decryptFile(Document doc, Key EncryptKey) throws Exception{
// load the encrypted file into a Document
Document document = doc;
org.apache.xml.security.Init.init();
// get the encrypted data element
String namespaceURI = EncryptionConstants.EncryptionSpecNS;
String localName = EncryptionConstants._TAG_ENCRYPTEDDATA;
Element encryptedDataElement =
(Element)document.getElementsByTagNameNS(namespaceURI,
localName).item(0);
// Load the key encryption key.
String jceAlgorithmName = "DESede";
// File kekFile = new File(fileName);
DESedeKeySpec keySpec = new DESedeKeySpec(EncryptKey.getEncoded());
SecretKeyFactory skf = SecretKeyFactory.getInstance(jceAlgorithmName);
SecretKey key = skf.generateSecret(keySpec);
Key keyEncryptKey = key;
// initialize cipher
XMLCipher xmlCipher = XMLCipher.getInstance();
xmlCipher.init(XMLCipher.DECRYPT_MODE, null);
xmlCipher.setKEK(keyEncryptKey);
// do the actual decryption
xmlCipher.doFinal(document, encryptedDataElement);
return document;
}
}
//server
package com.nanotech.nanopos.synchronize.actions.server;
import com.nanotech.nanopos.synchronize.actions.user.ISyncUser;
import java.net.MalformedURLException;
import java.rmi.MarshalledObject;
import java.rmi.Naming;
import java.rmi.RMISecurityManager;
import java.rmi.RemoteException;
import java.rmi.activation.Activatable;
import java.rmi.activation.ActivationDesc;
import java.rmi.activation.ActivationException;
import java.rmi.activation.ActivationGroup;
import java.rmi.activation.ActivationGroupDesc;
import java.rmi.activation.ActivationGroupID;
import java.rmi.activation.UnknownGroupException;
import java.util.Properties;
public class SyncUserServer {
public SyncUserServer(){
try {
System.setSecurityManager(new RMISecurityManager());
Properties props = new Properties();
props.put("java.security.policy", "com/nanotech/nanopos/synchronize/actions/security/security.policty");
ActivationGroupDesc.CommandEnvironment ace = null;
ActivationGroupDesc exampleGroup = new ActivationGroupDesc(props, ace);
ActivationGroupID agi =
ActivationGroup.getSystem().registerGroup(exampleGroup);
String location = "file:com/nanotech/nanopos/synchronize/actions/user/";
MarshalledObject data = null;
ActivationDesc desc = new ActivationDesc
(agi, "com.nanotech.nanopos.synchronize.actions.user.SyncUser",location, data);
ISyncUser syncUser = (ISyncUser)Activatable.register(desc);
System.out.println("Got the stub for SyncUser");
Naming.rebind("SyncUser1", syncUser);
System.out.println("Exported from registration");
} catch (RemoteException ex) {
ex.printStackTrace();
} catch (UnknownGroupException ex) {
ex.printStackTrace();
} catch (MalformedURLException ex) {
ex.printStackTrace();
} catch (ActivationException ex) {
ex.printStackTrace();
}
}
}
//the client
package com.nanotech.nanopos.synchronize.actions.user;
import com.nanotech.framework.Framework;
import com.nanotech.framework.action.IAction;
import com.nanotech.nanopos.controller.NanoPOSController;
import com.nanotech.nanopos.user.bl.IUserBO;
import com.nanotech.nanopos.user.delegate.IUserDelegate;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.util.ArrayList;
import java.util.Iterator;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.TransformerFactoryConfigurationError;
import org.w3c.dom.Attr;
import org.w3c.dom.DOMException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import java.security.Key;
import javax.crypto.SecretKey;
import javax.crypto.KeyGenerator;
import org.apache.xml.security.keys.KeyInfo;
import org.apache.xml.security.encryption.XMLCipher;
import org.apache.xml.security.encryption.EncryptedData;
import org.apache.xml.security.encryption.EncryptedKey;
public class UserSyncAction implements IAction {
public void execute(Object controller) throws Exception {
NanoPOSController nanoPOSController = (NanoPOSController) controller;
Framework nanoFramework = Framework.getInstance();
IUserDelegate userDelegate = (IUserDelegate) nanoFramework.getBean("userDelegate");
ArrayList users = userDelegate.getAllUnSyncUsers();
try {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
org.w3c.dom.Document d = db.newDocument();
Element root = d.createElement("nanoPOS");
Iterator i = users.iterator();
while(i.hasNext()){
Element user = d.createElement("user");
IUserBO userBO = (IUserBO) i.next();
Element userId = d.createElement("userid");
Element userName = d.createElement("username");
Element password = d.createElement("password");
Element rights = d.createElement("rights");
userId.appendChild(d.createTextNode(userBO.getUserId()));
userName.appendChild(d.createTextNode(userBO.getUserName()));
password.appendChild(d.createTextNode(userBO.getPassword()));
rights.appendChild(d.createTextNode(userBO.getRights().toString()));
user.appendChild(userId);
user.appendChild(userName);
user.appendChild(password);
user.appendChild(rights);
Attr status = d.createAttribute("status");
status.setValue(userBO.getStatus());
user.setAttributeNode(status);
root.appendChild(user);
}
d.appendChild(root);
Registry reg = LocateRegistry.getRegistry();
ISyncUser syncUser = (ISyncUser) reg.lookup("SyncUser");
syncUser.updateUsers(encryptFile(d),keyEncryptKey);
} catch (DOMException ex) {
ex.printStackTrace();
} catch (ParserConfigurationException ex) {
ex.printStackTrace();
} catch (TransformerFactoryConfigurationError ex) {
ex.printStackTrace();
}
}
private Key GenerateSymmetricKey() throws Exception {
String jceAlgorithmName = "AES";
KeyGenerator keyGenerator =
KeyGenerator.getInstance(jceAlgorithmName);
keyGenerator.init(128);
return keyGenerator.generateKey();
}
private SecretKey GenerateKeyEncryptionKey() throws Exception {
String jceAlgorithmName = "DESede";
KeyGenerator keyGenerator =
KeyGenerator.getInstance(jceAlgorithmName);
SecretKey keyEncryptKey = keyGenerator.generateKey();
return keyEncryptKey;
}
private void storeKeyFile(Key keyEncryptKey) throws IOException {
byte[] keyBytes = keyEncryptKey.getEncoded();
File keyEncryptKeyFile = new File("keyEncryptKey");
FileOutputStream outStream = new FileOutputStream(keyEncryptKeyFile);
outStream.write(keyBytes);
outStream.close();
System.out.println("Key encryption key stored in: "
+ keyEncryptKeyFile.toURL().toString());
}
Key keyEncryptKey;
public Document encryptFile(Document d) throws Exception{
org.apache.xml.security.Init.init();
// generate symmetric key
Key symmetricKey = GenerateSymmetricKey();
// Get a key to be used for encrypting the symmetric key
keyEncryptKey = GenerateKeyEncryptionKey();
// Write the key to a file
storeKeyFile(keyEncryptKey);
// initialize cipher
XMLCipher keyCipher =
XMLCipher.getInstance(XMLCipher.TRIPLEDES_KeyWrap);
keyCipher.init(XMLCipher.WRAP_MODE, keyEncryptKey);
// encrypt symmetric key
EncryptedKey encryptedKey = keyCipher.encryptKey(d, symmetricKey);
// specify the element to encrypt
Element elementToEncrypt = d.getDocumentElement();
// initialize cipher
XMLCipher xmlCipher =
XMLCipher.getInstance(XMLCipher.AES_128);
xmlCipher.init(XMLCipher.ENCRYPT_MODE, symmetricKey);
// add key info to encrypted data element
EncryptedData encryptedDataElement =
xmlCipher.getEncryptedData();
KeyInfo keyInfo = new KeyInfo(d);
keyInfo.add(encryptedKey);
encryptedDataElement.setKeyInfo(keyInfo);
// do the actual encryption
boolean encryptContentsOnly = true;
xmlCipher.doFinal(d,elementToEncrypt,encryptContentsOnly);
return d;
}
}
//policy file
grant {
Permission java.security.AllPermission;
};
//command used to run the program
first i start the rmiregistryby the following command
start rmiregisry
the rmid deamon
start rmid -J-Djava.security.policy=com\nanotech\nanopos\synchronize\actions\security\security.policy
when i arn the program i getting the following exception
java.rmi.activation.ActivateFailedException: activation failed; nested exception is:
java.rmi.activation.ActivationException: Activatable object must provide an activation constructor; nested exception is:
java.lang.NoSuchMethodException: com.nanotech.nanopos.synchronize.actions.user.SyncUser.<init>(java.rmi.activation.ActivationID, java.rmi.MarshalledObject)
at sun.rmi.server.ActivatableRef.activate(ActivatableRef.java:285)
at sun.rmi.server.ActivatableRef.invoke(ActivatableRef.java:114)
at com.nanotech.nanopos.synchronize.actions.user.SyncUser_Stub.updateUsers(Unknown Source)
at com.nanotech.nanopos.synchronize.actions.user.UserSyncAction.execute(UserSyncAction.java:86)
at com.nanotech.nanopos.controller.NanoPOSController.actionPerformed(NanoPOSController.java:582)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:234)
at java.awt.Component.processMouseEvent(Component.java:5488)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3093)
at java.awt.Component.processEvent(Component.java:5253)
at java.awt.Container.processEvent(Container.java:1966)
at java.awt.Component.dispatchEventImpl(Component.java:3955)
at java.awt.Container.dispatchEventImpl(Container.java:2024)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
at java.awt.Container.dispatchEventImpl(Container.java:2010)
at java.awt.Window.dispatchEventImpl(Window.java:1766)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:234)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
Caused by: java.rmi.activation.ActivationException: Activatable object must provide an activation constructor; nested exception is:
java.lang.NoSuchMethodException: com.nanotech.nanopos.synchronize.actions.user.SyncUser.<init>(java.rmi.activation.ActivationID, java.rmi.MarshalledObject)
at sun.rmi.server.ActivationGroupImpl.newInstance(ActivationGroupImpl.java:273)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:294)
at sun.rmi.transport.Transport$1.run(Transport.java:153)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:149)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:460)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:701)
at java.lang.Thread.run(Thread.java:595)
at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:247)
at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:223)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:126)
at java.rmi.activation.ActivationGroup_Stub.newInstance(Unknown Source)
at sun.rmi.server.Activation$ObjectEntry.activate(Activation.java:1277)
at sun.rmi.server.Activation$GroupEntry.activate(Activation.java:972)
at sun.rmi.server.Activation$ActivatorImpl.activate(Activation.java:243)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:294)
at sun.rmi.transport.Transport$1.run(Transport.java:153)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:149)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:460)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:701)
at java.lang.Thread.run(Thread.java:595)
at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:247)
at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:223)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:126)
at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:179)
at java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:132)
at $Proxy17.activate(Unknown Source)
at java.rmi.activation.ActivationID.activate(ActivationID.java:96)
at sun.rmi.server.ActivatableRef.activate(ActivatableRef.java:258)
... 28 more
Caused by: java.lang.NoSuchMethodException: com.nanotech.nanopos.synchronize.actions.user.SyncUser.<init>(java.rmi.activation.ActivationID, java.rmi.MarshalledObject)
at java.lang.Class.getConstructor0(Class.java:2647)
at java.lang.Class.getDeclaredConstructor(Class.java:1953)
at sun.rmi.server.ActivationGroupImpl$1.run(ActivationGroupImpl.java:228)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.server.ActivationGroupImpl.newInstance(ActivationGroupImpl.java:222)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:294)
at sun.rmi.transport.Transport$1.run(Transport.java:153)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:149)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:460)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:701)
at java.lang.Thread.run(Thread.java:595)