2016-03-22 1 views
0

Récemment, j'ai rencontré des problèmes lors de la communication CORBA d'une très ancienne application que je dois maintenir. Partie client et serveur communiquant via CORBA. Sur un appel de fonction particulière du client sur le serveur je reçois erreur folowing:org.omg.CORBA: MARSHAL & org.omg.CORBA.BAD_PARAM erreur

Not successful call - original stacktrace 
java.lang.Exception 
    at de.tc.app.lamo.bss.util.dialog.AbstractCallProxy.<init>(AbstractCallProxy.java:135) 
    at de.tc.app.lamo.bss.util.dialog.CallProxy.<init>(CallProxy.java:68) 
    at de.tc.app.lamo.bss.util.dialog.BasisCtl.initiateServerCall(BasisCtl.java:186) 
    at de.tc.app.lamo.bss.util.dialog.BasisCtl.initiateServerCall(BasisCtl.java:198) 
    at de.tc.app.lamo.bss.dialog.stz.STZCtl.funcLesen(STZCtl.java:106) 
    at de.tc.app.lamo.bss.dialog.stz.STZView$1.actionPerformed(STZView.java:163) 
    at javax.swing.JTextField.fireActionPerformed(JTextField.java:492) 
    at javax.swing.JTextField.postActionEvent(JTextField.java:705) 
    at javax.swing.JTextField$NotifyAction.actionPerformed(JTextField.java:820) 
    at javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1639) 
    at javax.swing.JComponent.processKeyBinding(JComponent.java:2859) 
    at javax.swing.JComponent.processKeyBindings(JComponent.java:2894) 
    at javax.swing.JComponent.processKeyEvent(JComponent.java:2822) 
    at java.awt.Component.processEvent(Component.java:6074) 
    at java.awt.Container.processEvent(Container.java:2039) 
    at java.awt.Component.dispatchEventImpl(Component.java:4660) 
    at java.awt.Container.dispatchEventImpl(Container.java:2097) 
    at java.awt.Component.dispatchEvent(Component.java:4488) 
    at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1856) 
    at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:722) 
    at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1000) 
    at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:865) 
    at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:686) 
    at java.awt.Component.dispatchEventImpl(Component.java:4532) 
    at java.awt.Container.dispatchEventImpl(Container.java:2097) 
    at java.awt.Window.dispatchEventImpl(Window.java:2489) 
    at java.awt.Component.dispatchEvent(Component.java:4488) 
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:668) 
    at java.awt.EventQueue.access$400(EventQueue.java:81) 
    at java.awt.EventQueue$2.run(EventQueue.java:627) 
    at java.awt.EventQueue$2.run(EventQueue.java:625) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) 
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98) 
    at java.awt.EventQueue$3.run(EventQueue.java:641) 
    at java.awt.EventQueue$3.run(EventQueue.java:639) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:638) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:122) 
Exception Serveraufruf: de.tc.app.lamo.awf.stub.Corba_St_STZAwf.lese 
org.omg.CORBA.BAD_PARAM: vmcid: 0x0 minor code: 0 completed: No 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
    at java.lang.Class.newInstance0(Class.java:355) 
    at java.lang.Class.newInstance(Class.java:308) 
    at com.inprise.vbroker.orb.SE.read(Unknown Source) 
    at com.inprise.vbroker.orb.DelegateImpl.handleReply(Unknown Source) 
    at com.inprise.vbroker.orb.DelegateImpl.invoke(Unknown Source) 
    at org.omg.CORBA.portable.ObjectImpl._invoke(ObjectImpl.java:457) 
    at de.tc.app.lamo.awf.corba._STZAwfStub.lese(_STZAwfStub.java:272) 
    at de.tc.app.lamo.awf.stub.Corba_St_STZAwf.lese(Corba_St_STZAwf.java:50) 
    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:597) 
    at de.tc.app.lamo.bss.util.dialog.AbstractCallProxy.call(AbstractCallProxy.java:145) 
    at de.tc.app.lamo.bss.util.dialog.AbstractCallProxy.doCall(AbstractCallProxy.java:431) 
    at de.tc.app.lamo.bss.util.dialog.AbstractCallProxy.run(AbstractCallProxy.java:346) 
    at de.tc.app.lamo.bss.util.dialog.CallProxy.run(CallProxy.java:141) 
    at java.lang.Thread.run(Thread.java:662) 

L'erreur est reproductible. Pendant le débogage, je peux voir que les données sont chargées par l'arrière-plan comme d'habitude et atteint le client. Le client obtient réellement la réponse mais n'est pas en mesure de traiter les données.

Le même appel de fonction fonctionne pour d'autres données. Il n'y a qu'une sélection de données particulière qui ne passe pas.

Je ne peux pas détecter de différence significative entre ces données. Les définitions idl n'ont pas été modifiées non plus.

Avez-vous des indications pour moi, où chercher la cause de l'erreur?

+0

Est-ce la totalité de la pile de pile? – John

+0

Bonjour John, J'ai ajouté l'ensemble stacktrace à mon poste. Des idées maintenant? –

Répondre

0

En ce qui concerne les conseils d'un ami, org.omg.CORBA.MARSHAL est lancé, si le serveur et le client fonctionnent avec des versions de bibliothèque différentes. Je ne peux pas expliquer comment cela a pu arriver à mon projet, néanmoins cette erreur particulière a disparu: -/

Le problème actuel dans mon cas était une exception org.omg.CORBA.BAD_PARAM, qui a été provoquée par le suivant ligne de code:

public static void write (final org.omg.CORBA.portable.OutputStream _output, final de.tc.app.lamo.comm.STZFlugereignis _vis_value) { 
    ... 
    _output.write_string((java.lang.String)_vis_value.flugNr); 
    ... 
    } 

_vis_value.flugNr était nulle.

Donc, une exception NullPointerException, mais masquée par VisiBroker sous CORBA-Exception avec la trace de pile correspondante.

0

Assurez-vous d'avoir les mêmes versions de toutes les dépendances (fichiers jar) sur le client et le serveur.

Assurez-vous que le client et le serveur exécutent la même version de Java?

+0

Hello John, Le client et le serveur sont tous deux compilés avec Java 6. Le serveur fonctionne sous Java 7. Le client est chargé par Java Web Start, donc je n'ai aucune influence sur le client JRE. Je dois supporter Java 6 cependant. Jusqu'à présent, ce n'était pas un problème. Il y a quelque temps, l'interface Web, dans laquelle les données devaient être affichées sur le client, a été étendue. Mais cela ne devrait pas affecter la communication CORBA. Je ne sais plus où chercher. –