Buggy code:
public class AlarmDecoderBinding extends AbstractActiveBinding < AlarmDecoderBindingProvider > implements ManagedService { private static final Logger logger = LoggerFactory . getLogger ( AlarmDecoderBinding . class ) ; private String m_connectString = null ; private String m_tcpHostName = null ; private int m_tcpPort = - 1 ; private String m_serialDeviceName = null ; private long refreshInterval = 10000 ; private BufferedReader m_reader = null ; private Socket m_socket = null ; private SerialPort m_port = null ; private Thread m_thread = null ; private AlarmDecoderBinding . MsgReader m_msgReader = null ; private static HashMap < String , ADMsgType > s_startToMsgType = new HashMap < String , ADMsgType > ( ) ; private HashMap < String , AlarmDecoderBindingConfig > m_unupdatedItems = new HashMap < String , AlarmDecoderBindingConfig > ( ) ; @ Override protected String getName ( ) { } @ Override protected long getRefreshInterval ( ) { } @ Override public void execute ( ) { } private void parseTcpConfig ( String [ ] parts ) throws ConfigurationException { } @ SuppressWarnings ( "rawtypes" ) @ Override public void updated ( Dictionary config ) throws ConfigurationException { } @ Override protected void internalReceiveCommand ( String itemName , Command command ) { } private synchronized void connect ( ) { } private void startMsgReader ( ) { } private synchronized void disconnect ( ) { } private void markAllItemsUnupdated ( ) { } private void stopThread ( ) { } class MsgReader implements Runnable { private boolean m_keepRunning = true ; @ Override public void run ( ) { } public void stopRunning ( ) { } } private void parseKeypadMessage ( String msg ) throws AlarmDecoderBinding . MessageParseException { } @ Override public void bindingChanged ( BindingProvider provider , String itemName ) { } private void setUnupdatedItemsToDefault ( ) { } private void parseRelayOrExpanderMessage ( ADMsgType mt , String msg ) throws AlarmDecoderBinding . MessageParseException { } private void parseRFMessage ( String msg ) throws AlarmDecoderBinding . MessageParseException { String [ ] parts = splitMessage ( msg ) ; if ( ( parts . length ) != 2 ) { throw new AlarmDecoderBinding . MessageParseException ( "need<seq2seq4repair_space>2<seq2seq4repair_space>comma<seq2seq4repair_space>separated<seq2seq4repair_space>fields<seq2seq4repair_space>in<seq2seq4repair_space>msg" ) ; } try { <START_BUG> int numeric = Integer . parseInt ( parts [ 1 ] ) ; <END_BUG> ArrayList < AlarmDecoderBindingConfig > bcl = getItems ( RFX , parts [ 0 ] , null ) ; for ( AlarmDecoderBindingConfig c : bcl ) { if ( c . hasFeature ( "data" ) ) { int bit = c . getIntParameter ( "bit" , 0 , 7 , ( - 1 ) ) ; int v = ( bit == ( - 1 ) ) ? numeric : ( numeric > > bit ) & 1 ; updateItem ( c , new DecimalType ( v ) ) ; } else if ( c . hasFeature ( "contact" ) ) { int bit = c . getIntParameter ( "bitmask" , 0 , 255 , 80 ) ; int v = numeric & bit ; updateItem ( c , ( v == 0 ? OpenClosedType . CLOSED : OpenClosedType . OPEN ) ) ; } } } catch ( NumberFormatException e ) { throw new AlarmDecoderBinding . MessageParseException ( ( "msg<seq2seq4repair_space>contains<seq2seq4repair_space>invalid<seq2seq4repair_space>state<seq2seq4repair_space>number:<seq2seq4repair_space>" + ( e . getMessage ( ) ) ) ) ; } } private String [ ] splitMessage ( String msg ) throws AlarmDecoderBinding . MessageParseException { } private void updateItem ( AlarmDecoderBindingConfig bc , State state ) { } private ArrayList < AlarmDecoderBindingConfig > getItems ( ADMsgType mt , String addr , String feature ) { } private ArrayList < AlarmDecoderBindingConfig > getItems ( String itemName ) { } private static ADMsgType s_getMsgType ( String s ) { } private static class MessageParseException extends Exception { private static final long serialVersionUID = 1L ; public MessageParseException ( String msg ) { } } }

Fix:
int numeric = Integer . parseInt ( parts [ 1 ] , 16 ) ;