31
31
import java .security .GeneralSecurityException ;
32
32
import java .security .KeyStore ;
33
33
import java .security .SecureRandom ;
34
- import java .util .Map ;
35
34
import java .util .concurrent .atomic .AtomicBoolean ;
36
35
37
36
import javax .jms .JMSConsumer ;
45
44
import javax .net .ssl .TrustManager ;
46
45
import javax .net .ssl .TrustManagerFactory ;
47
46
47
+ import org .apache .kafka .common .config .AbstractConfig ;
48
+ import org .apache .kafka .common .config .types .Password ;
48
49
import org .apache .kafka .connect .errors .ConnectException ;
49
50
import org .apache .kafka .connect .errors .RetriableException ;
50
51
import org .apache .kafka .connect .source .SourceRecord ;
@@ -61,7 +62,7 @@ public class JMSReader {
61
62
62
63
// Configs
63
64
private String userName ;
64
- private String password ;
65
+ private Password password ;
65
66
private String topic ;
66
67
private boolean messageBodyJms ;
67
68
@@ -93,116 +94,80 @@ public JMSReader() {
93
94
*
94
95
* @throws ConnectException Operation failed and connector should stop.
95
96
*/
96
- public void configure (final Map < String , String > props ) {
97
+ public void configure (final AbstractConfig config ) {
97
98
log .trace ("[{}] Entry {}.configure, props={}" , Thread .currentThread ().getId (), this .getClass ().getName (),
98
- props );
99
-
100
- final String queueManager = props .get (MQSourceConnector .CONFIG_NAME_MQ_QUEUE_MANAGER );
101
- final String connectionMode = props .get (MQSourceConnector .CONFIG_NAME_MQ_CONNECTION_MODE );
102
- final String connectionNameList = props .get (MQSourceConnector .CONFIG_NAME_MQ_CONNECTION_NAME_LIST );
103
- final String channelName = props .get (MQSourceConnector .CONFIG_NAME_MQ_CHANNEL_NAME );
104
- final String queueName = props .get (MQSourceConnector .CONFIG_NAME_MQ_QUEUE );
105
- final String userName = props .get (MQSourceConnector .CONFIG_NAME_MQ_USER_NAME );
106
- final String password = props .get (MQSourceConnector .CONFIG_NAME_MQ_PASSWORD );
107
- final String ccdtUrl = props .get (MQSourceConnector .CONFIG_NAME_MQ_CCDT_URL );
108
- final String builderClass = props .get (MQSourceConnector .CONFIG_NAME_MQ_RECORD_BUILDER );
109
- final String mbj = props .get (MQSourceConnector .CONFIG_NAME_MQ_MESSAGE_BODY_JMS );
110
- final String mdr = props .get (MQSourceConnector .CONFIG_NAME_MQ_MESSAGE_MQMD_READ );
111
- final String sslCipherSuite = props .get (MQSourceConnector .CONFIG_NAME_MQ_SSL_CIPHER_SUITE );
112
- final String sslPeerName = props .get (MQSourceConnector .CONFIG_NAME_MQ_SSL_PEER_NAME );
113
- final String sslKeystoreLocation = props .get (MQSourceConnector .CONFIG_NAME_MQ_SSL_KEYSTORE_LOCATION );
114
- final String sslKeystorePassword = props .get (MQSourceConnector .CONFIG_NAME_MQ_SSL_KEYSTORE_PASSWORD );
115
- final String sslTruststoreLocation = props .get (MQSourceConnector .CONFIG_NAME_MQ_SSL_TRUSTSTORE_LOCATION );
116
- final String sslTruststorePassword = props .get (MQSourceConnector .CONFIG_NAME_MQ_SSL_TRUSTSTORE_PASSWORD );
117
- final String useMQCSP = props .get (MQSourceConnector .CONFIG_NAME_MQ_USER_AUTHENTICATION_MQCSP );
118
- final String useIBMCipherMappings = props .get (MQSourceConnector .CONFIG_NAME_MQ_SSL_USE_IBM_CIPHER_MAPPINGS );
119
- final String topic = props .get (MQSourceConnector .CONFIG_NAME_TOPIC );
120
-
121
- if (useIBMCipherMappings != null ) {
122
- System .setProperty ("com.ibm.mq.cfg.useIBMCipherMappings" , useIBMCipherMappings );
123
- }
99
+ config );
124
100
125
- int transportType = WMQConstants .WMQ_CM_CLIENT ;
126
- if (connectionMode != null ) {
127
- if (connectionMode .equals (MQSourceConnector .CONFIG_VALUE_MQ_CONNECTION_MODE_CLIENT )) {
128
- transportType = WMQConstants .WMQ_CM_CLIENT ;
129
- } else if (connectionMode .equals (MQSourceConnector .CONFIG_VALUE_MQ_CONNECTION_MODE_BINDINGS )) {
130
- transportType = WMQConstants .WMQ_CM_BINDINGS ;
131
- } else {
132
- log .error ("Unsupported MQ connection mode {}" , connectionMode );
133
- throw new ConnectException ("Unsupported MQ connection mode" );
134
- }
135
- }
101
+ System .setProperty ("com.ibm.mq.cfg.useIBMCipherMappings" ,
102
+ config .getBoolean (MQSourceConnector .CONFIG_NAME_MQ_SSL_USE_IBM_CIPHER_MAPPINGS ).toString ());
103
+
104
+ final int transportType =
105
+ config .getString (MQSourceConnector .CONFIG_NAME_MQ_CONNECTION_MODE )
106
+ .equals (MQSourceConnector .CONFIG_VALUE_MQ_CONNECTION_MODE_CLIENT ) ?
107
+ WMQConstants .WMQ_CM_CLIENT :
108
+ WMQConstants .WMQ_CM_BINDINGS ;
136
109
137
110
try {
138
111
mqConnFactory = new MQConnectionFactory ();
139
112
mqConnFactory .setTransportType (transportType );
140
- mqConnFactory .setQueueManager (queueManager );
141
- mqConnFactory .setBooleanProperty (WMQConstants .USER_AUTHENTICATION_MQCSP , true );
142
- if (useMQCSP != null ) {
143
- mqConnFactory .setBooleanProperty (WMQConstants .USER_AUTHENTICATION_MQCSP ,
144
- Boolean .parseBoolean (useMQCSP ));
145
- }
113
+ mqConnFactory .setQueueManager (config .getString (MQSourceConnector .CONFIG_NAME_MQ_QUEUE_MANAGER ));
114
+ mqConnFactory .setBooleanProperty (WMQConstants .USER_AUTHENTICATION_MQCSP ,
115
+ config .getBoolean (MQSourceConnector .CONFIG_NAME_MQ_USER_AUTHENTICATION_MQCSP ));
146
116
147
117
if (transportType == WMQConstants .WMQ_CM_CLIENT ) {
118
+ final String ccdtUrl = config .getString (MQSourceConnector .CONFIG_NAME_MQ_CCDT_URL );
119
+
148
120
if (ccdtUrl != null ) {
149
- final URL ccdtUrlObject ;
150
- try {
151
- ccdtUrlObject = new URL (ccdtUrl );
152
- } catch (final MalformedURLException e ) {
153
- log .error ("MalformedURLException exception {}" , e );
154
- throw new ConnectException ("CCDT file url invalid" , e );
155
- }
156
- mqConnFactory .setCCDTURL (ccdtUrlObject );
121
+ mqConnFactory .setCCDTURL (new URL (ccdtUrl ));
157
122
} else {
158
- mqConnFactory .setConnectionNameList (connectionNameList );
159
- mqConnFactory .setChannel (channelName );
123
+ mqConnFactory .setConnectionNameList (config . getString ( MQSourceConnector . CONFIG_NAME_MQ_CONNECTION_NAME_LIST ) );
124
+ mqConnFactory .setChannel (config . getString ( MQSourceConnector . CONFIG_NAME_MQ_CHANNEL_NAME ) );
160
125
}
161
126
162
- if (sslCipherSuite != null ) {
163
- mqConnFactory .setSSLCipherSuite (sslCipherSuite );
164
- if (sslPeerName != null ) {
165
- mqConnFactory .setSSLPeerName (sslPeerName );
166
- }
167
- }
127
+ mqConnFactory .setSSLCipherSuite (config .getString (MQSourceConnector .CONFIG_NAME_MQ_SSL_CIPHER_SUITE ));
128
+ mqConnFactory .setSSLPeerName (config .getString (MQSourceConnector .CONFIG_NAME_MQ_SSL_PEER_NAME ));
168
129
130
+
131
+ final String sslKeystoreLocation = config .getString (MQSourceConnector .CONFIG_NAME_MQ_SSL_KEYSTORE_LOCATION );
132
+ final Password sslKeystorePassword = config .getPassword (MQSourceConnector .CONFIG_NAME_MQ_SSL_KEYSTORE_PASSWORD );
133
+ final String sslTruststoreLocation = config .getString (MQSourceConnector .CONFIG_NAME_MQ_SSL_TRUSTSTORE_LOCATION );
134
+ final Password sslTruststorePassword = config .getPassword (MQSourceConnector .CONFIG_NAME_MQ_SSL_TRUSTSTORE_PASSWORD );
169
135
if (sslKeystoreLocation != null || sslTruststoreLocation != null ) {
170
136
final SSLContext sslContext = buildSslContext (sslKeystoreLocation , sslKeystorePassword ,
171
137
sslTruststoreLocation , sslTruststorePassword );
172
138
mqConnFactory .setSSLSocketFactory (sslContext .getSocketFactory ());
173
139
}
174
140
}
175
141
176
- queue = new MQQueue (queueName );
142
+ queue = new MQQueue (config . getString ( MQSourceConnector . CONFIG_NAME_MQ_QUEUE ) );
177
143
178
- this . userName = userName ;
179
- this . password = password ;
144
+ userName = config . getString ( MQSourceConnector . CONFIG_NAME_MQ_USER_NAME ) ;
145
+ password = config . getPassword ( MQSourceConnector . CONFIG_NAME_MQ_PASSWORD ) ;
180
146
181
- this .messageBodyJms = false ;
182
- queue .setMessageBodyStyle (WMQConstants .WMQ_MESSAGE_BODY_MQ );
183
- if (mbj != null ) {
184
- if (Boolean .parseBoolean (mbj )) {
185
- this .messageBodyJms = true ;
186
- queue .setMessageBodyStyle (WMQConstants .WMQ_MESSAGE_BODY_JMS );
187
- }
188
- }
147
+ messageBodyJms = config .getBoolean (MQSourceConnector .CONFIG_NAME_MQ_MESSAGE_BODY_JMS );
148
+ queue .setMessageBodyStyle (messageBodyJms ?
149
+ WMQConstants .WMQ_MESSAGE_BODY_JMS :
150
+ WMQConstants .WMQ_MESSAGE_BODY_MQ );
189
151
190
- if (mdr != null ) {
191
- if (Boolean .parseBoolean (mdr )) {
192
- queue .setBooleanProperty (WMQConstants .WMQ_MQMD_READ_ENABLED , true );
193
- }
194
- }
152
+ queue .setBooleanProperty (WMQConstants .WMQ_MQMD_READ_ENABLED ,
153
+ config .getBoolean (MQSourceConnector .CONFIG_NAME_MQ_MESSAGE_MQMD_READ ));
154
+
155
+ topic = config .getString (MQSourceConnector .CONFIG_NAME_TOPIC );
195
156
196
- this .topic = topic ;
197
157
} catch (JMSException | JMSRuntimeException jmse ) {
198
158
log .error ("JMS exception {}" , jmse );
199
159
throw new ConnectException (jmse );
160
+ } catch (final MalformedURLException e ) {
161
+ log .error ("MalformedURLException exception {}" , e );
162
+ throw new ConnectException ("CCDT file url invalid" , e );
200
163
}
201
164
165
+
166
+ final String builderClass = config .getString (MQSourceConnector .CONFIG_NAME_MQ_RECORD_BUILDER );
202
167
try {
203
168
final Class <? extends RecordBuilder > c = Class .forName (builderClass ).asSubclass (RecordBuilder .class );
204
169
builder = c .newInstance ();
205
- builder .configure (props );
170
+ builder .configure (config . originalsStrings () );
206
171
} catch (ClassNotFoundException | ClassCastException | IllegalAccessException | InstantiationException
207
172
| NullPointerException exc ) {
208
173
log .error ("Could not instantiate message builder {}" , builderClass );
@@ -220,7 +185,7 @@ public void connect() {
220
185
221
186
try {
222
187
if (userName != null ) {
223
- jmsCtxt = mqConnFactory .createContext (userName , password , JMSContext .SESSION_TRANSACTED );
188
+ jmsCtxt = mqConnFactory .createContext (userName , password . value () , JMSContext .SESSION_TRANSACTED );
224
189
} else {
225
190
jmsCtxt = mqConnFactory .createContext (JMSContext .SESSION_TRANSACTED );
226
191
}
@@ -373,7 +338,7 @@ private boolean connectInternal() {
373
338
log .trace ("[{}] Entry {}.connectInternal" , Thread .currentThread ().getId (), this .getClass ().getName ());
374
339
try {
375
340
if (userName != null ) {
376
- jmsCtxt = mqConnFactory .createContext (userName , password , JMSContext .SESSION_TRANSACTED );
341
+ jmsCtxt = mqConnFactory .createContext (userName , password . value () , JMSContext .SESSION_TRANSACTED );
377
342
} else {
378
343
jmsCtxt = mqConnFactory .createContext (JMSContext .SESSION_TRANSACTED );
379
344
}
@@ -498,8 +463,8 @@ private ConnectException handleException(final Throwable exc) {
498
463
return new ConnectException (exc );
499
464
}
500
465
501
- private SSLContext buildSslContext (final String sslKeystoreLocation , final String sslKeystorePassword ,
502
- final String sslTruststoreLocation , final String sslTruststorePassword ) {
466
+ private SSLContext buildSslContext (final String sslKeystoreLocation , final Password sslKeystorePassword ,
467
+ final String sslTruststoreLocation , final Password sslTruststorePassword ) {
503
468
log .trace ("[{}] Entry {}.buildSslContext" , Thread .currentThread ().getId (), this .getClass ().getName ());
504
469
505
470
try {
@@ -508,7 +473,7 @@ private SSLContext buildSslContext(final String sslKeystoreLocation, final Strin
508
473
509
474
if (sslKeystoreLocation != null ) {
510
475
final KeyManagerFactory kmf = KeyManagerFactory .getInstance (KeyManagerFactory .getDefaultAlgorithm ());
511
- kmf .init (loadKeyStore (sslKeystoreLocation , sslKeystorePassword ), sslKeystorePassword .toCharArray ());
476
+ kmf .init (loadKeyStore (sslKeystoreLocation , sslKeystorePassword ), sslKeystorePassword .value (). toCharArray ());
512
477
keyManagers = kmf .getKeyManagers ();
513
478
}
514
479
@@ -530,12 +495,12 @@ private SSLContext buildSslContext(final String sslKeystoreLocation, final Strin
530
495
}
531
496
}
532
497
533
- private KeyStore loadKeyStore (final String location , final String password ) throws GeneralSecurityException {
498
+ private KeyStore loadKeyStore (final String location , final Password password ) throws GeneralSecurityException {
534
499
log .trace ("[{}] Entry {}.loadKeyStore" , Thread .currentThread ().getId (), this .getClass ().getName ());
535
500
536
501
try (final InputStream ksStr = new FileInputStream (location )) {
537
502
final KeyStore ks = KeyStore .getInstance ("JKS" );
538
- ks .load (ksStr , password .toCharArray ());
503
+ ks .load (ksStr , password .value (). toCharArray ());
539
504
540
505
log .trace ("[{}] Exit {}.loadKeyStore, retval={}" , Thread .currentThread ().getId (),
541
506
this .getClass ().getName (), ks );
0 commit comments