Author |
Message
|
Rahul999 |
Posted: Tue Feb 16, 2010 10:09 pm Post subject: XML Message in JavaCompute Node & convert it to a FileSt |
|
|
 Centurion
Joined: 14 Mar 2007 Posts: 134
|
Hi All,
I am receiving an XML message via MQ which I am passing to JavaCompute Node, now my objective is to retrieve the String out of XML message and pass it to the Input Buffered Stream as a String.
But, I am not able to get the whole XML message as a String. Following is the code I am using but it is giving me NullPointerException(because the value at the end is null).
Quote: |
public void evaluate(MbMessageAssembly contact admin) throws MbException {
MbElement root = contact admin.getMessage().getRootElement();
MbElement body = root.getLastChild(); //gives XMLNSC
bElement message = body.getFirstChild(); //gives first tag of XMLNSC
String test1 = (String)VASMessage.getValue(); //getting Null
|
In the above code , I am getting the value of "test1" as null, whereas I am looking to get some string. I am supposed to pass this string to an InputBufferedStream.
Please anyone suggest how I can get a complete String for an XML message.
Thanks. _________________ "For all your days be prepared, and meet them ever alike.
When you are the anvil, bear - when you are the hammer, strike."
- Edwin Markham |
|
Back to top |
|
 |
Gaya3 |
Posted: Tue Feb 16, 2010 10:16 pm Post subject: Re: XML Message in JavaCompute Node & convert it to a Fi |
|
|
 Jedi
Joined: 12 Sep 2006 Posts: 2493 Location: Boston, US
|
Rahul999 wrote: |
But, I am not able to get the whole XML message as a String. Following is the code I am using but it is giving me NullPointerException(because the value at the end is null).
Please anyone suggest how I can get a complete String for an XML message.
|
Read about bitstream[createElementAsLastChildFromBitstream] functionality in MB Java _________________ Regards
Gayathri
-----------------------------------------------
Do Something Before you Die |
|
Back to top |
|
 |
Rahul999 |
Posted: Tue Feb 16, 2010 10:49 pm Post subject: |
|
|
 Centurion
Joined: 14 Mar 2007 Posts: 134
|
Hi Gaya3,
Quote: |
Read about bitstream[createElementAsLastChildFromBitstream] functionality in MB Java |
If I understand correctly, the createElementAsLastChildFromBitstream is for generating the output message. but as per my requirement I need to handle the XML message in Input end only. I need to convert it into String and then do some string manipulation and then pass it to the ClientSocket connection.
What I am trying to get the value of whole XML message.
Quote: |
<Body>
<Request>
<BillPayment>
<TransactionType>BILL PAYMENT</TransactionType>
<InstrumentType>ACCOUNT</InstrumentType>
<AmountPaid>100</AmountPaid>
</BillPayment>
</Request>
</Body>
</VASMessage |
Like in the above XML message, I need to convert it into a String format so that I can pass it to Buffered reader. I am using getValue() on MBElement but it is not working. _________________ "For all your days be prepared, and meet them ever alike.
When you are the anvil, bear - when you are the hammer, strike."
- Edwin Markham |
|
Back to top |
|
 |
kimbert |
Posted: Wed Feb 17, 2010 12:01 pm Post subject: |
|
|
 Jedi Council
Joined: 29 Jul 2003 Posts: 5542 Location: Southampton
|
Quote: |
I am receiving an XML message via MQ which I am passing to JavaCompute Node, now my objective is to retrieve the String out of XML message and pass it to the Input Buffered Stream as a String. |
The solution is trivial. Parse the message in the BLOB domain, and then convert InputRoot.BLOB.BLOB to a string in the correct code page. You will probably need to use Java's CharsetDecoder class for that.
However, I would like to know *why* you want to pass the entire input message into a Java stream. |
|
Back to top |
|
 |
Rahul999 |
Posted: Wed Feb 17, 2010 11:59 pm Post subject: |
|
|
 Centurion
Joined: 14 Mar 2007 Posts: 134
|
Hi Kimbert,
thanks for reply.
Quote: |
However, I would like to know *why* you want to pass the entire input message into a Java stream. |
I need to take that input message and then pass it to a socket port as a request. Before that I need to do some string manipulation so I can not directly use TCPIP node.
Thanks _________________ "For all your days be prepared, and meet them ever alike.
When you are the anvil, bear - when you are the hammer, strike."
- Edwin Markham |
|
Back to top |
|
 |
smdavies99 |
Posted: Thu Feb 18, 2010 3:41 am Post subject: |
|
|
 Jedi Council
Joined: 10 Feb 2003 Posts: 6076 Location: Somewhere over the Rainbow this side of Never-never land.
|
What sort of string manipulation do you need to do? _________________ WMQ User since 1999
MQSI/WBI/WMB/'Thingy' User since 2002
Linux user since 1995
Every time you reinvent the wheel the more square it gets (anon). If in doubt think and investigate before you ask silly questions. |
|
Back to top |
|
 |
Rahul999 |
Posted: Sun Feb 21, 2010 5:22 pm Post subject: |
|
|
 Centurion
Joined: 14 Mar 2007 Posts: 134
|
Quote: |
What sort of string manipulation do you need to do?
|
Appending the length of message at the beginning of message in big endian ascii format.
Regards, _________________ "For all your days be prepared, and meet them ever alike.
When you are the anvil, bear - when you are the hammer, strike."
- Edwin Markham |
|
Back to top |
|
 |
kimbert |
Posted: Mon Feb 22, 2010 1:40 am Post subject: |
|
|
 Jedi Council
Joined: 29 Jul 2003 Posts: 5542 Location: Southampton
|
Using a Java stream sounds like using a sledgehammer to crack a nut.
ESQL can tell you the length of the CHARACTER field. Then you can convert that to a BLOB containing ASCII characters ( endianness is irrelevant for ASCII, btw ) using a CAST and append the resulting bytes to the BLOB.
Sort of like this:
Code: |
SET myString = CAST InputRoot.BLOB.BLOB AS CHARACTER CCSID InputRoot.Properties.CodedCharsetId ENCODING InputRoot.Properties.Encoding;
SET strLength = LENGTH(myString);
SET lengthAsCharacter = CAST strLength AS CHARACTER;
SET lengthAsBLOB = CAST lengthAsCharacter AS BLOB CCSID <ascii code page>;
SET messageWithLength = InputRoot.BLOB.BLOB || lengthAsBLOB;
|
Not tested, probably not even syntactically correct, but you get the idea.
I suspect that the second and third CAST statements could be combined into a single CAST which converts from INTEGER to BLOB. |
|
Back to top |
|
 |
vikashsharma85 |
Posted: Wed Jun 23, 2010 1:46 am Post subject: |
|
|
 Novice
Joined: 19 Mar 2010 Posts: 15
|
I would Like to use the same thread for my Query:
I have a message parsed in BLOB domain,I want to retrieve my BLOB data in the Java Compute Node as Byte array .
I am using following code snippet:
--------------------------------------------------
MbElement body = root.getLastChild();
MbElement BLOB=body.getFirstChild();
String dataString=(String)BLOB.getValue();
byte[] responseBytes =dataString.getBytes();
------------------------------------------------------
This portion of Code is throwing NULL pointer exception,
Code: |
String dataString=(String)BLOB.getValue(); |
Though in Debugger i am able to see some value for BLOB element->
MbElement( type: 3000000 name: BLOB value: [B@639a639a )
I am not sure why getValue() function is throwing exception, when object is valid. |
|
Back to top |
|
 |
fjb_saper |
Posted: Wed Jun 23, 2010 10:51 am Post subject: |
|
|
 Grand High Poobah
Joined: 18 Nov 2003 Posts: 20756 Location: LI,NY
|
vikashsharma85 wrote: |
I would Like to use the same thread for my Query:
I have a message parsed in BLOB domain,I want to retrieve my BLOB data in the Java Compute Node as Byte array .
I am using following code snippet:
--------------------------------------------------
MbElement body = root.getLastChild();
MbElement BLOB=body.getFirstChild();
String dataString=(String)BLOB.getValue();
byte[] responseBytes =dataString.getBytes();
------------------------------------------------------
This portion of Code is throwing NULL pointer exception,
Code: |
String dataString=(String)BLOB.getValue(); |
Though in Debugger i am able to see some value for BLOB element->
MbElement( type: 3000000 name: BLOB value: [B@639a639a )
I am not sure why getValue() function is throwing exception, when object is valid. |
Think about it... This is more or less what I would expect.
You are casting from the BLOB to String... I would not dare... Too many byte values have no equivalent in String....
Why not directly do something like byte[] mybytes=BLOB.getValue()???  _________________ MQ & Broker admin |
|
Back to top |
|
 |
|