esa / CCSDS_MO_TRANS

REPOSITORY ARCHIVED - for the latest version please go to https://github.com/esa/mo-services-java
Other
3 stars 7 forks source link

Throw Exception upwards if there is an error with the Encoding #12

Closed CesarCoelho closed 7 years ago

CesarCoelho commented 8 years ago

Hi Sam,

I forced a change of encodings (consumer String Enc, provider Binary Enc) and I would like to receive the exception on my layer, so I can give a warning message. I have checked and it seems that you are catching the Encoding exception on the GEN transport and it is not passed upwards, so my code doesn't know that there was an exception below:

Oct 05, 2016 10:42:45 AM esa.mo.mal.transport.gen.body.GENMessageBody decodeMessageBody WARNING: GEN Message body ERROR on decode : {0} org.ccsds.moims.mo.mal.MALException: For input string: "" at esa.mo.mal.encoder.string.StringDecoder$StringBufferHolder.getSignedInt(StringDecoder.java:211) at esa.mo.mal.encoder.string.StringListDecoder.(StringListDecoder.java:48) at esa.mo.mal.encoder.string.StringDecoder.createListDecoder(StringDecoder.java:79) at org.ccsds.moims.mo.common.directory.structures.ProviderSummaryList.decode(ProviderSummaryList.java:77) at esa.mo.mal.encoder.string.StringDecoder.decodeNullableElement(StringDecoder.java:90) at esa.mo.mal.encoder.gen.GENElementInputStream.readElement(GENElementInputStream.java:162) at esa.mo.mal.transport.gen.body.GENMessageBody.decodeBodyPart(GENMessageBody.java:504) at esa.mo.mal.transport.gen.body.GENMessageBody.decodeMessageBody(GENMessageBody.java:425) at esa.mo.mal.transport.gen.body.GENMessageBody.getBodyElement(GENMessageBody.java:151) at org.ccsds.moims.mo.common.directory.consumer.DirectoryStub.lookupProvider(DirectoryStub.java:48) at esa.mo.nanosatmoframework.groundmoadapter.MOServicesConsumer.retrieveProvidersFromDirectory(MOServicesConsumer.java:261) at esa.mo.fw.configurationtool.stuff.DirectoryConnectionConsumerPanel.load_URI_links1ActionPerformed(DirectoryConnectionConsumerPanel.java:419) at esa.mo.fw.configurationtool.stuff.DirectoryConnectionConsumerPanel.access$400(DirectoryConnectionConsumerPanel.java:56) at esa.mo.fw.configurationtool.stuff.DirectoryConnectionConsumerPanel$4.actionPerformed(DirectoryConnectionConsumerPanel.java:215) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) at java.awt.Component.processMouseEvent(Component.java:6535) at javax.swing.JComponent.processMouseEvent(JComponent.java:3324) at java.awt.Component.processEvent(Component.java:6300) at java.awt.Container.processEvent(Container.java:2236) at java.awt.Component.dispatchEventImpl(Component.java:4891) at java.awt.Container.dispatchEventImpl(Container.java:2294) at java.awt.Component.dispatchEvent(Component.java:4713) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466) at java.awt.Container.dispatchEventImpl(Container.java:2280) at java.awt.Window.dispatchEventImpl(Window.java:2750) at java.awt.Component.dispatchEvent(Component.java:4713) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758) at java.awt.EventQueue.access$500(EventQueue.java:97) at java.awt.EventQueue$3.run(EventQueue.java:709) at java.awt.EventQueue$3.run(EventQueue.java:703) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86) at java.awt.EventQueue$4.run(EventQueue.java:731) at java.awt.EventQueue$4.run(EventQueue.java:729) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) at java.awt.EventQueue.dispatchEvent(EventQueue.java:728) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) Caused by: java.lang.NumberFormatException: For input string: "" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) at java.lang.Integer.parseInt(Integer.java:592) at java.lang.Integer.valueOf(Integer.java:766) at esa.mo.mal.encoder.string.StringDecoder$StringBufferHolder.getSignedInt(StringDecoder.java:207) ... 49 more

Would it be possible to pass it upwards so I can handle it myself? This would involve removing your catch on line: https://github.com/esa/CCSDS_MO_TRANS/blob/master/CCSDS_MAL_TRANSPORT_GEN/src/main/java/esa/mo/mal/transport/gen/body/GENMessageBody.java#L494

Sam's answer: That would make sense, although I'm concerned about throwing an exception from there as off the top of my head I can't remember where that effectively gets called from. We could break a lot of things!