2015-07-02 2 views
0

Если я вызываю этот метод сервера с клиентом из другого места, iam получает следующую ошибку. Если я запустил клиент из того же места, где находится сервер, я получаю вывод.Java Remote method invocation

Просьба дать несколько советов для вызова моего сервера rmi с клиентом rmi из другого места.

Error 
Exception in thread "main" java.rmi.UnmarshalException: error unmarshalling return; nested exception is: 
    java.lang.ClassNotFoundException: com.transform.xsl.XslFoTransformer_Stub (no security manager: RMI class loader disabled) 
    at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source) 
    at java.rmi.Naming.lookup(Naming.java:101) 
    at com.transform.xsl.RmiClient.main(RmiClient.java:15) 
Caused by: java.lang.ClassNotFoundException: com.transform.xsl.XslFoTransformer_Stub (no security manager: RMI class loader disabled) 
    at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:394) 
    at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:184) 
    at java.rmi.server.RMIClassLoader$2.loadClass(RMIClassLoader.java:637) 
    at java.rmi.server.RMIClassLoader.loadClass(RMIClassLoader.java:264) 
    at sun.rmi.server.MarshalInputStream.resolveClass(MarshalInputStream.java:222) 
    at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1610) 
    at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1515) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1769) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1348) 
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370) 
    ... 3 more 

Код ======

import java.io.File; 
import java.rmi.Remote; 
import java.rmi.RemoteException; 

public interface XslFoTransformerInterface extends Remote { 
    public byte[] doTransform(File stylesheet, File datafile) throws Throwable,RemoteException; 

} 

public class XslFoTransformer extends UnicastRemoteObject implements XslFoTransformerInterface { 

    protected XslFoTransformer() throws RemoteException { 
     super(); 

    } 

    public byte[] doTransform(File stylesheet, File datafile) throws Exception { 

     String fileName = datafile.getName(); 
     int pos = fileName.lastIndexOf("."); 
     if (pos > 0) { 
      fileName = fileName.substring(0, pos); 

     } 
     DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
     File file = new File(fileName + ".xsl-fo"); 
     try { 
      // File stylesheet = new 
      // File("C:\\Users\\Q811213\\Documents\\XSLT\\files\\ECGSearchResultsPDF_changed1.xsl"); 
      // File datafile = new 
      // File("C:\\Users\\Q811213\\Documents\\XSLT\\files\\NEWDATA.xml"); 
      DocumentBuilder builder = factory.newDocumentBuilder(); 
      Document document = builder.parse(datafile); 
      TransformerFactory tFactory = TransformerFactory.newInstance(); 
      StreamSource stylesource = new StreamSource(stylesheet); 
      Transformer transformer = tFactory.newTransformer(stylesource); 
      DOMSource source = new DOMSource(document); 
      ByteArrayOutputStream bos=new ByteArrayOutputStream(); 
      StreamResult result=new StreamResult(bos); 
      transformer.transform(source, result); 
      byte [] array=bos.toByteArray(); 


     return array; 
     } catch (Exception e) { 
      throw e; 
     }}} 


--Rmi server class 


public class RmiServer { 
    public static void main(String args[]) throws Exception{ 
     try{ 


     XslFoTransformerInterface stub=new XslFoTransformer(); 
     Naming.rebind("rmi://localhost:1099/Xsl-Fo_Transform",stub); 
     }catch(Exception e){ 
      throw e; 

     } 
     } 

} 


--Rmi client created in different location 



public class RmiClient { 
    public static void main(String args[]) throws Throwable { 
     try { 
      XslFoTransformerInterface stub = (XslFoTransformerInterface) Naming 
        .lookup("rmi://localhost:1099/Xsl-Fo_Transform"); 
      System.out.println("stub is ready" + stub); 
      File f1 = new File(
        "C:\\Users\\s811213\\osbwstest\\XSL-FO_Transformer\\files\\ECGSearchResultsPDF_changed1.xsl"); 
      File f2 = new File(`enter code here` 
        "C:\\Users\\s811213\\osbwstest\\XSL-FO_Transformer\\files\\NEWDATA.xml"); 
      try { 
       byte[] f = stub.doTransform(f1, f2); 
       }cartch(){} 

}} 

Если я называю этот метод сервера с клиентом из другого местоположения IAM получения следующего error.If я запустить клиент с того же места, где сервер там я получаю вывод. Просьба дать несколько советов для вызова моего сервера rmi с клиентом rmi из другого места.

+1

«localhost» ... – Stefan

ответ

-1

В RMI клиента

XslFoTransformerInterface окурка = (XslFoTransformerInterface) Naming .lookup ("RMI: // локальный: 1099/XSL-Fo_Transform");

вам необходимо изменить локальный компьютер на сервер IP

+0

Да, я изменил его –

+0

такая же ошибка, я получаю –

+0

Исключение из потока «main» java.rmi.UnmarshalException: ошибка unmarshalling return; вложенное исключение: \t java.lang.ClassNotFoundException: com.transform.xsl.XslFoTransformer_Stub (нет менеджера безопасности: загрузчик класса RMI отключен) –

-1

Я не уверен, если вы запускаете вашу программу в разных местах (не сервер машина) с обновленной версией коды для IP, который вы жестко закодированного для локального хоста ,

Если это не проблема, вы должны быть уверены, что разместили класс XslFoTransformerInterface в своих кодах клиента в том же пакете, что и в кодах сервера.

Также в будущем, если у вас есть классы Serializable POJO в качестве аргументов или возвращаемые типы удаленных методов, для них применяется одно и то же правило. Всегда помещайте их в тот же пакет, в котором они находятся, - это коды сервера.

Удачи.

+0

Я добавил XslFoTransformerInterface в расположение клиента, но все же он дает такую ​​же ошибку –

+0

, например, если пакет для XslFoTransformerInterface: com.java.rmi в проекте сервера, в проекте клиента вы должны иметь пакет com.hava.rmi и разместите там свой интерфейс XslFoTransformerInterface. Вы делали это? – STaefi

+0

Какую версию java вы используете? – STaefi

0

Вам необходимо развернуть класс-заглушку, указанный в исключении, для клиента.

Смежные вопросы