JABMessage.java
上传用户:xfwatch
上传日期:2020-12-14
资源大小:872k
文件大小:13k
源码类别:

中间件编程

开发平台:

Java

  1. /*
  2.  * JBoss, Home of Professional Open Source
  3.  * Copyright 2008, Red Hat, Inc., and others contributors as indicated
  4.  * by the @authors tag. All rights reserved.
  5.  * See the copyright.txt in the distribution for a
  6.  * full listing of individual contributors.
  7.  * This copyrighted material is made available to anyone wishing to use,
  8.  * modify, copy, or redistribute it subject to the terms and conditions
  9.  * of the GNU Lesser General Public License, v. 2.1.
  10.  * This program is distributed in the hope that it will be useful, but WITHOUT A
  11.  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
  12.  * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
  13.  * You should have received a copy of the GNU Lesser General Public License,
  14.  * v.2.1 along with this distribution; if not, write to the Free Software
  15.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
  16.  * MA  02110-1301, USA.
  17.  */
  18. package org.jboss.blacktie.jatmibroker.jab;
  19. import java.util.Map;
  20. import org.jboss.blacktie.jatmibroker.xatmi.Buffer;
  21. import org.jboss.blacktie.jatmibroker.xatmi.Connection;
  22. import org.jboss.blacktie.jatmibroker.xatmi.ConnectionException;
  23. import org.jboss.blacktie.jatmibroker.xatmi.Response;
  24. import org.jboss.blacktie.jatmibroker.xatmi.X_COMMON;
  25. import org.jboss.blacktie.jatmibroker.xatmi.X_C_TYPE;
  26. import org.jboss.blacktie.jatmibroker.xatmi.X_OCTET;
  27. /**
  28.  * The JABRequest class wraps the output parameter to the service.
  29.  * 
  30.  * @see JABRemoteService
  31.  */
  32. public class JABMessage implements Message {
  33. /**
  34.  * The rcode if this is a response
  35.  */
  36. private int rcode;
  37. private X_OCTET xOctet;
  38. private X_COMMON xCommon;
  39. private X_C_TYPE xCType;
  40. /**
  41.  * The request should be created from the JABRemoteService getRequest
  42.  * method.
  43.  * 
  44.  * @param connection
  45.  *            The connection to use
  46.  * @param bufferSubType
  47.  * @param bufferType
  48.  * @throws JABException
  49.  */
  50. JABMessage(Connection connection, String bufferType, String bufferSubType)
  51. throws JABException {
  52. try {
  53. Buffer buffer = connection.tpalloc(bufferType, bufferSubType);
  54. if (buffer.getType().equals("X_OCTET")) {
  55. xOctet = (X_OCTET) buffer;
  56. } else if (buffer.getType().equals("X_COMMON")) {
  57. xCommon = (X_COMMON) buffer;
  58. } else {
  59. xCType = (X_C_TYPE) buffer;
  60. }
  61. } catch (ConnectionException e) {
  62. throw new JABException("Could not create an X_OCTET buffer", e);
  63. }
  64. }
  65. /**
  66.  * Create a message from the response
  67.  * 
  68.  * @param response
  69.  *            The response
  70.  */
  71. JABMessage(Response response) {
  72. Buffer buffer = response.getBuffer();
  73. if (buffer.getType().equals("X_OCTET")) {
  74. xOctet = (X_OCTET) buffer;
  75. } else if (buffer.getType().equals("X_COMMON")) {
  76. xCommon = (X_COMMON) buffer;
  77. } else {
  78. xCType = (X_C_TYPE) buffer;
  79. }
  80. rcode = response.getRcode();
  81. }
  82. /**
  83.  * An internal method to access the actual buffer.
  84.  * 
  85.  * @return The buffer
  86.  */
  87. Buffer getBuffer() {
  88. if (xOctet != null) {
  89. return xOctet;
  90. } else if (xCommon != null) {
  91. return xCommon;
  92. } else {
  93. return xCType;
  94. }
  95. }
  96. /**
  97.  * Clear the real buffer
  98.  */
  99. void clear() {
  100. if (xOctet != null) {
  101. xOctet.clear();
  102. } else if (xCommon != null) {
  103. xCommon.clear();
  104. } else {
  105. xCType.clear();
  106. }
  107. }
  108. /**
  109.  * Get the rcode that tpreturn returned with.
  110.  * 
  111.  * @return The application return code.
  112.  */
  113. int getRCode() {
  114. return rcode;
  115. }
  116. /**
  117.  * Get the content of the buffer
  118.  * 
  119.  * @param key
  120.  *            The content of the buffer to set
  121.  * @param position
  122.  *            The position to check
  123.  * @throws JABException
  124.  *             In case the content is malformed
  125.  */
  126. public byte getByte(String key) throws JABException {
  127. if (xOctet != null) {
  128. throw new JABException("Not supported for this buffer type");
  129. } else if (xCommon != null) {
  130. try {
  131. return xCommon.getByte(key);
  132. } catch (Throwable t) {
  133. throw new JABException(t.getMessage(), t);
  134. }
  135. } else {
  136. try {
  137. return xCType.getByte(key);
  138. } catch (Throwable t) {
  139. throw new JABException(t.getMessage(), t);
  140. }
  141. }
  142. }
  143. public byte[] getByteArray(String key) throws JABException {
  144. if (xOctet != null) {
  145. if (key.equals("X_OCTET")) {
  146. return xOctet.getByteArray();
  147. } else {
  148. throw new JABException(
  149. "X_OCTET buffers contain a single attribute X_OCTET");
  150. }
  151. } else if (xCommon != null) {
  152. try {
  153. return xCommon.getByteArray(key);
  154. } catch (Throwable t) {
  155. throw new JABException(t.getMessage(), t);
  156. }
  157. } else {
  158. try {
  159. return xCType.getByteArray(key);
  160. } catch (Throwable t) {
  161. throw new JABException(t.getMessage(), t);
  162. }
  163. }
  164. }
  165. public byte[][] getByteArrayArray(String key) throws JABException {
  166. if (xOctet != null) {
  167. throw new JABException("Not supported for this buffer type");
  168. } else if (xCommon != null) {
  169. throw new JABException("Not supported for this buffer type");
  170. } else {
  171. try {
  172. return xCType.getByteArrayArray(key);
  173. } catch (Throwable t) {
  174. throw new JABException(t.getMessage(), t);
  175. }
  176. }
  177. }
  178. public double getDouble(String key) throws JABException {
  179. if (xOctet != null) {
  180. throw new JABException("Not supported for this buffer type");
  181. } else if (xCommon != null) {
  182. throw new JABException("Not supported for this buffer type");
  183. } else {
  184. try {
  185. return xCType.getDouble(key);
  186. } catch (Throwable t) {
  187. throw new JABException(t.getMessage(), t);
  188. }
  189. }
  190. }
  191. public double[] getDoubleArray(String key) throws JABException {
  192. if (xOctet != null) {
  193. throw new JABException("Not supported for this buffer type");
  194. } else if (xCommon != null) {
  195. throw new JABException("Not supported for this buffer type");
  196. } else {
  197. try {
  198. return xCType.getDoubleArray(key);
  199. } catch (Throwable t) {
  200. throw new JABException(t.getMessage(), t);
  201. }
  202. }
  203. }
  204. public float getFloat(String key) throws JABException {
  205. if (xOctet != null) {
  206. throw new JABException("Not supported for this buffer type");
  207. } else if (xCommon != null) {
  208. throw new JABException("Not supported for this buffer type");
  209. } else {
  210. try {
  211. return xCType.getFloat(key);
  212. } catch (Throwable t) {
  213. throw new JABException(t.getMessage(), t);
  214. }
  215. }
  216. }
  217. public float[] getFloatArray(String key) throws JABException {
  218. if (xOctet != null) {
  219. throw new JABException("Not supported for this buffer type");
  220. } else if (xCommon != null) {
  221. throw new JABException("Not supported for this buffer type");
  222. } else {
  223. try {
  224. return xCType.getFloatArray(key);
  225. } catch (Throwable t) {
  226. throw new JABException(t.getMessage(), t);
  227. }
  228. }
  229. }
  230. public int getInt(String key) throws JABException {
  231. if (xOctet != null) {
  232. throw new JABException("Not supported for this buffer type");
  233. } else if (xCommon != null) {
  234. throw new JABException("Not supported for this buffer type");
  235. } else {
  236. try {
  237. return xCType.getInt(key);
  238. } catch (Throwable t) {
  239. throw new JABException(t.getMessage(), t);
  240. }
  241. }
  242. }
  243. public int[] getIntArray(String key) throws JABException {
  244. if (xOctet != null) {
  245. throw new JABException("Not supported for this buffer type");
  246. } else if (xCommon != null) {
  247. throw new JABException("Not supported for this buffer type");
  248. } else {
  249. try {
  250. return xCType.getIntArray(key);
  251. } catch (Throwable t) {
  252. throw new JABException(t.getMessage(), t);
  253. }
  254. }
  255. }
  256. public short getShort(String key) throws JABException {
  257. if (xOctet != null) {
  258. throw new JABException("Not supported for this buffer type");
  259. } else if (xCommon != null) {
  260. try {
  261. return xCommon.getShort(key);
  262. } catch (Throwable t) {
  263. throw new JABException(t.getMessage(), t);
  264. }
  265. } else {
  266. try {
  267. return xCType.getShort(key);
  268. } catch (Throwable t) {
  269. throw new JABException(t.getMessage(), t);
  270. }
  271. }
  272. }
  273. public short[] getShortArray(String key) throws JABException {
  274. if (xOctet != null) {
  275. throw new JABException("Not supported for this buffer type");
  276. } else if (xCommon != null) {
  277. try {
  278. return xCommon.getShortArray(key);
  279. } catch (Throwable t) {
  280. throw new JABException(t.getMessage(), t);
  281. }
  282. } else {
  283. try {
  284. return xCType.getShortArray(key);
  285. } catch (Throwable t) {
  286. throw new JABException(t.getMessage(), t);
  287. }
  288. }
  289. }
  290. public void setByte(String key, byte data) throws JABException {
  291. if (xOctet != null) {
  292. throw new JABException("Not supported for this buffer type");
  293. } else if (xCommon != null) {
  294. try {
  295. xCommon.setByte(key, data);
  296. } catch (Throwable t) {
  297. throw new JABException(t.getMessage(), t);
  298. }
  299. } else {
  300. try {
  301. xCType.setByte(key, data);
  302. } catch (Throwable t) {
  303. throw new JABException(t.getMessage(), t);
  304. }
  305. }
  306. }
  307. public void setByteArray(String key, byte[] data) throws JABException {
  308. if (xOctet != null) {
  309. if (key.equals("X_OCTET")) {
  310. xOctet.setByteArray(data);
  311. } else {
  312. throw new JABException(
  313. "X_OCTET buffers contain a single attribute X_OCTET");
  314. }
  315. } else if (xCommon != null) {
  316. try {
  317. xCommon.setByteArray(key, data);
  318. } catch (Throwable t) {
  319. throw new JABException(t.getMessage(), t);
  320. }
  321. } else {
  322. try {
  323. xCType.setByteArray(key, data);
  324. } catch (Throwable t) {
  325. throw new JABException(t.getMessage(), t);
  326. }
  327. }
  328. }
  329. public void setByteArrayArray(String key, byte[][] data)
  330. throws JABException {
  331. if (xOctet != null) {
  332. throw new JABException("Not supported for this buffer type");
  333. } else if (xCommon != null) {
  334. throw new JABException("Not supported for this buffer type");
  335. } else {
  336. try {
  337. xCType.setByteArrayArray(key, data);
  338. } catch (Throwable t) {
  339. throw new JABException(t.getMessage(), t);
  340. }
  341. }
  342. }
  343. public void setDouble(String key, double data) throws JABException {
  344. if (xOctet != null) {
  345. throw new JABException("Not supported for this buffer type");
  346. } else if (xCommon != null) {
  347. throw new JABException("Not supported for this buffer type");
  348. } else {
  349. try {
  350. xCType.setDouble(key, data);
  351. } catch (Throwable t) {
  352. throw new JABException(t.getMessage(), t);
  353. }
  354. }
  355. }
  356. public void setDoubleArray(String key, double[] data) throws JABException {
  357. if (xOctet != null) {
  358. throw new JABException("Not supported for this buffer type");
  359. } else if (xCommon != null) {
  360. throw new JABException("Not supported for this buffer type");
  361. } else {
  362. try {
  363. xCType.setDoubleArray(key, data);
  364. } catch (Throwable t) {
  365. throw new JABException(t.getMessage(), t);
  366. }
  367. }
  368. }
  369. public void setFloat(String key, float data) throws JABException {
  370. if (xOctet != null) {
  371. throw new JABException("Not supported for this buffer type");
  372. } else if (xCommon != null) {
  373. throw new JABException("Not supported for this buffer type");
  374. } else {
  375. try {
  376. xCType.setFloat(key, data);
  377. } catch (Throwable t) {
  378. throw new JABException(t.getMessage(), t);
  379. }
  380. }
  381. }
  382. public void setFloatArray(String key, float[] data) throws JABException {
  383. if (xOctet != null) {
  384. throw new JABException("Not supported for this buffer type");
  385. } else if (xCommon != null) {
  386. throw new JABException("Not supported for this buffer type");
  387. } else {
  388. try {
  389. xCType.setFloatArray(key, data);
  390. } catch (Throwable t) {
  391. throw new JABException(t.getMessage(), t);
  392. }
  393. }
  394. }
  395. public void setInt(String key, int data) throws JABException {
  396. if (xOctet != null) {
  397. throw new JABException("Not supported for this buffer type");
  398. } else if (xCommon != null) {
  399. throw new JABException("Not supported for this buffer type");
  400. } else {
  401. try {
  402. xCType.setInt(key, data);
  403. } catch (Throwable t) {
  404. throw new JABException(t.getMessage(), t);
  405. }
  406. }
  407. }
  408. public void setIntArray(String key, int[] data) throws JABException {
  409. if (xOctet != null) {
  410. throw new JABException("Not supported for this buffer type");
  411. } else if (xCommon != null) {
  412. throw new JABException("Not supported for this buffer type");
  413. } else {
  414. try {
  415. xCType.setIntArray(key, data);
  416. } catch (Throwable t) {
  417. throw new JABException(t.getMessage(), t);
  418. }
  419. }
  420. }
  421. public void setShort(String key, short data) throws JABException {
  422. if (xOctet != null) {
  423. throw new JABException("Not supported for this buffer type");
  424. } else if (xCommon != null) {
  425. try {
  426. xCommon.setShort(key, data);
  427. } catch (Throwable t) {
  428. throw new JABException(t.getMessage(), t);
  429. }
  430. } else {
  431. try {
  432. xCType.setShort(key, data);
  433. } catch (Throwable t) {
  434. throw new JABException(t.getMessage(), t);
  435. }
  436. }
  437. }
  438. public void setShortArray(String key, short[] data) throws JABException {
  439. if (xOctet != null) {
  440. throw new JABException("Not supported for this buffer type");
  441. } else if (xCommon != null) {
  442. try {
  443. xCommon.setShortArray(key, data);
  444. } catch (Throwable t) {
  445. throw new JABException(t.getMessage(), t);
  446. }
  447. } else {
  448. try {
  449. xCType.setShortArray(key, data);
  450. } catch (Throwable t) {
  451. throw new JABException(t.getMessage(), t);
  452. }
  453. }
  454. }
  455. int getLength() {
  456. if (xOctet != null) {
  457. return xOctet.getByteArray().length;
  458. } else {
  459. return 0;
  460. }
  461. }
  462. public Map<String, Class> getMessageFormat() {
  463. if (xOctet != null) {
  464. return xOctet.getFormat();
  465. } else if (xCommon != null) {
  466. return xCommon.getFormat();
  467. } else {
  468. return xCType.getFormat();
  469. }
  470. }
  471. }