Skip to Main Content

Java APIs

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

cannot invoke remote method

843793Aug 30 2006 — edited Aug 31 2006
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)
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Sep 28 2006
Added on Aug 30 2006
7 comments
290 views