使用以下指示信息创建银行转帐请求消息流。
节点类型 | 节点名 |
---|---|
HTTPInput | HTTP Input |
JavaCompute | SetupTransferRequest |
SCAAsyncRequest | SCA Asynchronous Request |
SCAAsyncResponse | SCA Asynchronous Response |
JavaCompute | SetupTransferReply |
JavaCompute | SetupTransferFailedReply |
HTTPReply | HTTP Reply |
节点名 | 终端 | 连接到此节点 |
---|---|---|
HTTP Input | Out | SetupTransferRequest |
SetupTransferRequest | Failure | SetupTransferFailedReply |
SetupTransferFailedReply | Out | HTTP Reply |
SetupTransferRequest | Out | SCA Asynchronous Request |
SCA Asynchronous Response | Out | SetupTransferReply |
SetupTransferReply | Out | HTTP Reply |
import java.math.BigDecimal;
//Get the incoming MIME parts MbElement inRoot = inMessage.getRootElement(); MbElement inMime = inRoot.getFirstElementByPath("MIME"); MbElement inParts = inMime.getFirstElementByPath("Parts"); //Traverse the local environment for property overrides MbElement outRoot = outMessage.getRootElement(); MbMessage locEnv = inAssembly.getLocalEnvironment(); MbMessage newLocEnv = new MbMessage(locEnv); MbElement destination = newLocEnv.getRootElement() .getFirstElementByPath("Destination"); MbElement http = destination.getFirstElementByPath("HTTP"); MbElement requestIdentifier = http.getFirstElementByPath ("RequestIdentifier"); MbElement soap = destination.createElementAsLastChild (MbElement.TYPE_NAME, "SCA", null); MbElement request = soap.createElementAsLastChild (MbElement.TYPE_NAME, "Request", null); request.createElementAsLastChild(MbElement.TYPE_NAME_VALUE, "UserContext", requestIdentifier.getValue());
//Operation String operation = null; //Transfer amount String amount = null; //Get the first part MbElement part = inParts.getFirstChild(); //Iterate through all of the parts dynamically setting SCA overrides while (part != null) { //Strip out the property String content = (String)part.getFirstChild().getValue(); int start = content.indexOf("\"") + 1; int end = content.indexOf("\"", start); String property = content.substring(start, end); //Get the corresponding property data MbElement data = part.getLastChild().getFirstElementByPath("BLOB"); //If there is a data part then setup the relevant property overrides if (data != null) { //Obtain the byte data byte[] blobData = (byte[])data.getFirstElementByPath ("BLOB").getValue(); //Convert to a string String dataString = new String(blobData); //Set LE properties if (property.equals("Operation")) { request.createElementAsLastChild (MbElement.TYPE_NAME_VALUE, property, dataString); operation = dataString; } else if (property.equals("Amount")) { amount = dataString; try { BigDecimal bigDecimal = new BigDecimal(amount); if (bigDecimal.scale() > 2 || bigDecimal.scale() < 0) { throw new Exception ("Invalid currency format specified!"); } } catch (NumberFormatException nfe) { throw new Exception ("Invalid amount specified!"); } } } else { throw new Exception("No amount specified!"); } //Get the next part part = part.getNextSibling(); }
//Delete the HTTPInputHeader since we don't need this in our MQ message request MbElement httpInputHeader = outRoot.getFirstElementByPath ("HTTPInputHeader"); httpInputHeader.detach(); //Create the integration node XMLNSC Parser element MbElement outParser = outRoot.createElementAsLastChild (MbXMLNSC.PARSER_NAME); MbElement service = outParser.createElementAsLastChild (MbElement.TYPE_NAME, operation, null); service.setNamespace("http://SavingsAccount/SavingsAccountInterface"); MbElement transferin = service.createElementAsLastChild (MbElement.TYPE_NAME, "transferin", null); transferin.createElementAsLastChild(MbElement.TYPE_NAME_VALUE, "amount", amount); //Create the new assembly with the new property overrides MbMessageAssembly outAssembly = new MbMessageAssembly( inAssembly, newLocEnv, inAssembly.getExceptionList(), outMessage);
MbMessageAssembly outAssembly = new MbMessageAssembly (inAssembly, outMessage);
import java.math.BigDecimal;
//Traverse the local environment for property overrides MbMessage locEnv = inAssembly.getLocalEnvironment(); MbMessage newLocEnv = new MbMessage(locEnv); MbElement locEnvRoot = newLocEnv.getRootElement(); MbElement soap = locEnvRoot.getFirstElementByPath("SCA"); MbElement response = soap.getFirstElementByPath("Response"); MbElement userContext = response.getFirstElementByPath ("UserContext"); MbElement destination = locEnvRoot.getFirstElementByPath ("Destination"); MbElement http = destination.createElementAsLastChild (MbElement.TYPE_NAME, "HTTP", null); http.createElementAsLastChild(MbElement.TYPE_NAME_VALUE, "RequestIdentifier", userContext.getValue()); //Obtain response message values MbElement inRoot = inMessage.getRootElement(); MbElement XMLNSC = inRoot.getFirstElementByPath("XMLNSC"); MbElement transferResponse = XMLNSC.getLastChild(); MbElement transferOut = transferResponse.getFirstElementByPath ("transferout"); String amount = new BigDecimal(transferOut.getFirstElementByPath ("amount").getValue().toString()) .setScale(2, BigDecimal.ROUND_HALF_UP).toString(); String oldBalance = new BigDecimal(transferOut.getFirstElementByPath ("oldbalance").getValue().toString()) .setScale(2, BigDecimal.ROUND_HALF_UP).toString(); String newBalance = new BigDecimal(transferOut.getFirstElementByPath ("newbalance").getValue().toString()) .setScale(2, BigDecimal.ROUND_HALF_UP).toString(); String accept = transferOut.getFirstElementByPath ("accept").getValue().toString();
//Construct confirmation message StringBuffer html = new StringBuffer(); html.append("<HTML><HEAD>"); html.append("<META http-equiv='Content-Type' content='text/html; charset=ISO-8859-1'></HEAD>"); html.append("<BODY><form action='/TransferRequestForm' method=post>"); if (accept.equals("yes")) { html.append("<h1>Your transfer of " + amount +" has been successful!</h1>"); html.append("<h3>Your old savings balance was " + oldBalance + "</h3>"); html.append("<h3>Your new savings balance is " + newBalance + "</h3>"); } else { html.append("<h1><font color=\"#ff0000\"> Your transfer of " + amount + " has been unsuccessful due to insufficient funds! </font></h1>"); html.append("<h3>Your savings balance remains unchanged at " + newBalance + "</h3>"); } html.append("<tr><td><input type='submit' name='OK' value='OK'></td></tr>"); html.append("</form></BODY></HTML>");
//Set the content type to be html so that it may be viewed by a browser MbElement outRoot = outMessage.getRootElement(); MbElement outProperties = outRoot.getFirstElementByPath ("Properties"); MbElement contentType = outProperties.getFirstElementByPath ("ContentType"); contentType.setValue("text/html"); //Delete the MQMD header since we don't need this in our HTTP reply MbElement mqmd = outRoot.getFirstElementByPath("MQMD"); mqmd.detach(); //Create the integration node Blob Parser element MbElement outParser = outRoot.createElementAsLastChild (MbBLOB.PARSER_NAME); //Create the BLOB element in the Blob parser domain with the required text outParser.createElementAsLastChild(MbElement.TYPE_NAME_VALUE, "BLOB", html.toString().getBytes()); //Create the new assembly with the new property overrides MbMessageAssembly outAssembly = new MbMessageAssembly( inAssembly, newLocEnv, inAssembly.getExceptionList(), outMessage);
MbMessageAssembly outAssembly = new MbMessageAssembly (inAssembly, outMessage);
//Set the content type to be html so that it can be viewed by a browser MbElement outRoot = outMessage.getRootElement(); MbElement outProperties = outRoot.getFirstElementByPath ("Properties"); MbElement contentType = outProperties.getFirstElementByPath ("ContentType"); contentType.setValue("text/html"); //Clear out any messages outRoot.getLastChild().detach();
//Get the exception reported MbElement exception = inAssembly.getExceptionList() .getRootElement().getFirstElementByPath ("RecoverableException").getFirstElementByPath("UserException") .getFirstElementByPath("UserException"); //Create a HTML response StringBuffer buffer = new StringBuffer(); String head = "<html><body text=\"#ff0000\"> <form action=\"/TransferRequestForm\" method=post>"; buffer.append(head); //Iterate through the exception stacktrace and add the reason text to the message response MbElement insert = exception.getFirstElementByPath("Insert"); for (int i=0;i<5;i++) { insert = insert.getNextSibling(); } String text = (String)insert.getFirstElementByPath ("Text").getValue(); if (text.length() > 0) { buffer.append("<h1>"); buffer.append(text); buffer.append("</h1>"); } //Complete the HTML body String tail = "<br><input type=\"submit\" name=\"OK\" value=\"OK\"> </form></body></html>"; buffer.append(tail);
//Create the integration node Blob Parser element MbElement outParser = outRoot.createElementAsLastChild (MbBLOB.PARSER_NAME); //Create the BLOB element in the Blob parser domain with the required text outParser.createElementAsLastChild (MbElement.TYPE_NAME_VALUE, "BLOB", buffer.toString().getBytes());