/** * Initializes this object. * * @param key Property-key to use for locating initialization properties. * @param type Property-type to use for locating initialization properties. * @exception ProcessingException when initialization fails */ public void initialize(String key, String type) throws ProcessingException { super.initialize(key, type); StringBuffer errorBuf = new StringBuffer(); // serverName = getRequiredProperty(SERVER_NAME_PROP, errorBuf); headerLocation = getPropertyValue(NF_HEADER_LOCATION_PROP); isAsyncLocation = getPropertyValue(IS_ASYNCHRONOUS_LOCATION_PROP); orbAgentAddr = getPropertyValue(ORB_AGENT_ADDR_PROP); orbAgentPort = getPropertyValue(ORB_AGENT_PORT_PROP); orbAgentAddrLocation = getPropertyValue(ORB_AGENT_ADDR_PROP_LOCATION); orbAgentPortLocation = getPropertyValue(ORB_AGENT_PORT_PROP_LOCATION); if (!StringUtils.hasValue(isAsyncLocation)) { try { isAsync = StringUtils.getBoolean( (String) getRequiredPropertyValue(DEFAULT_IS_ASYNCHRONOUS_PROP, errorBuf)); } catch (FrameworkException fe) { errorBuf.append( "No value is specified for either " + IS_ASYNCHRONOUS_LOCATION_PROP + "or" + DEFAULT_IS_ASYNCHRONOUS_PROP + ". One of the values should be present" + fe.getMessage()); } } if (!StringUtils.hasValue(headerLocation)) { try { header = getRequiredPropertyValue(DEFAULT_HEADER_PROP, errorBuf); } catch (Exception e) { errorBuf.append( "No value is specified for " + NF_HEADER_LOCATION_PROP + "or" + DEFAULT_HEADER_PROP + ". One of the values should be present" + e.getMessage()); } } if (errorBuf.length() > 0) throw new ProcessingException(errorBuf.toString()); }
/** * This function substitues ALL the occurence of the pattern in the input with the replacement * passed in. The substitution is done only in the range bound by the begin token and the end * token. * * @param pattern pattern string to match * @param input input string * @param replacement replacement string to replace with * @param beginToken begin boundary token * @param endToken end boundary token * @param beginTokens[] an array of beginTokens - this is used for negative look ahead where there * are other begin tokens to be recognized. * @return returns processed string if both beginToken and the endToken are successfully found, * returns the unproessed original input otherwise. * @exception throws a FrameworkException when either pattern/input/replacement is null. */ public static String replaceAll( String pattern, String input, String replacement, String beginToken, String endToken, String beginTokens[]) throws FrameworkException { if ((pattern == null) || (replacement == null) || (input == null)) { Debug.log( Debug.ALL_ERRORS, "RegexUtils: replaceAll(): pattern or replacement or input is null. " + "\npattern = " + pattern + "\ninput = " + input + "\nreplacement = " + replacement); throw new FrameworkException( "RegexUtils: replaceAll(): pattern or replacement or input is null."); } Perl5Util util = new Perl5Util(); StringBuffer resultBuffer = new StringBuffer(); if ((beginToken == null) || (endToken == null)) { // either beginToken or endToken cannot be null, however both can be null. throw new FrameworkException( "RegexUtils: replaceAll(): Either begin or end token is null. BeginToken = " + beginToken + ", " + "endToken = " + endToken); } else // do pattern match { // making the Perl5 regular expression format pattern String begin = makePerl5MatchPattern(beginToken); String end = makePerl5MatchPattern(endToken); boolean beginTokenMatch = true; // if begin token found while (beginTokenMatch) { // check the input for each iteration. when there is no input, break out of the loop. if (input == null) break; beginTokenMatch = util.match(begin, input); if (beginTokenMatch) { String negativeLookAheadPattern = makePerl5MatchPatternNegativeLookAhead(pattern, replacement); int beginOffsetForBeginToken = util.beginOffset(0); int endOffsetForBeginToken = util.endOffset(0); // the input after the begin token String subInput = input.substring(endOffsetForBeginToken); // if end token passed in was an empty string if (endToken.equals("")) { String result = null; try { result = replaceAllWithBeginToken(pattern, input, replacement, beginToken); } catch (FrameworkException e) { Debug.log(Debug.ALL_ERRORS, "RegexUtils: replaceAll() failed." + e.getMessage()); } return result; } else if (util.match(end, subInput)) // endToken found { // begin offset for the end token relative to the input not subInput int beginOffsetForEndToken = endOffsetForBeginToken + util.beginOffset(0); int endOffsetForEndToken = endOffsetForBeginToken + util.endOffset(0); // pre is the string before the beginToken and the beginToken String pre = input.substring(0, endOffsetForBeginToken); resultBuffer.append(pre); // current is the string between the beginToken and the endToken String current = input.substring(endOffsetForBeginToken, beginOffsetForEndToken); // theRest is the rest of the input string after the endToken String theRest = input.substring(endOffsetForEndToken); // current is the string between begin token and the endtoken current = skipOrphanedBeginToken(begin, current, resultBuffer); if (isOtherBeginTokenThere(beginToken, current, beginTokens) == false) { current = replaceAll(pattern, current, replacement); } // isOtherBeginTokenThere resultBuffer.append(current); resultBuffer.append(input.substring(beginOffsetForEndToken, endOffsetForEndToken)); input = theRest; } else // endToken not found { resultBuffer.append(input); break; } } // if beginToken found else // beginToken not found { resultBuffer.append(input); break; } } // while begin token found } // else do pattern match return resultBuffer.toString(); }
/** * If NF_HEADER_LOCATION_PROP exists in context use as the header to forward to Gateway. If * IS_ASYNCHRONOUS_PROP exists in context then use that value to call either processAsync or * processSync * * @param input MessageObject containing the value to be processed * * @param mpcontext The context * @return Optional NVPair containing a Destination name and a MessageObject, or null if none. * @exception ProcessingException Thrown if processing fails. * @exception MessageException Thrown if bad message. */ public NVPair[] process(MessageProcessorContext ctx, MessageObject input) throws MessageException, ProcessingException { if (input == null) return null; try { serverName = getRequiredProperty(ctx, input, SERVER_NAME_PROP); } catch (MessageException me) { throw new ProcessingException(me.getMessage()); } if (StringUtils.hasValue(headerLocation)) { try { header = getString(headerLocation, ctx, input); } catch (MessageException me) { throw new ProcessingException(me.getMessage()); } } if (StringUtils.hasValue(isAsyncLocation)) { try { isAsync = StringUtils.getBoolean(getString(isAsyncLocation, ctx, input)); } catch (FrameworkException fe) { throw new ProcessingException( "Value of " + IS_ASYNCHRONOUS_LOCATION_PROP + " is not TRUE/FALSE. " + fe.getMessage()); } } // Fetch the alternate Orb Address, if one exists at the specified context location if (StringUtils.hasValue(orbAgentAddrLocation)) { try { if (exists(orbAgentAddrLocation, ctx, input, true)) { orbAgentAddr = getString(orbAgentAddrLocation, ctx, input); if (Debug.isLevelEnabled(Debug.MSG_STATUS)) Debug.log( Debug.MSG_STATUS, "RequestHandlerClient:: alternate orb exists with orb agent address [" + orbAgentAddr + "]"); } } catch (MessageException me) { throw new ProcessingException(me.getMessage()); } } // Fetch the alternate Orb Port, if one exists at the specified context location if (StringUtils.hasValue(orbAgentPortLocation)) { try { if (exists(orbAgentPortLocation, ctx, input, true)) { orbAgentPort = getString(orbAgentPortLocation, ctx, input); if (Debug.isLevelEnabled(Debug.MSG_STATUS)) Debug.log( Debug.MSG_STATUS, "RequestHandlerClient:: alternate orb exists with orb agent port [" + orbAgentPort + "]"); } } catch (MessageException me) { throw new ProcessingException(me.getMessage()); } } String msg = input.getString(); try { try { return (formatNVPair(makeClientCall(serverName, false, header, msg))); } catch (Exception e) { // Any of the following exceptions indicate that the failure might be due to // a CORBA communications issue (stale object reference) that should be retried. if ((e instanceof org.omg.CORBA.OBJECT_NOT_EXIST) || (e instanceof org.omg.CORBA.TRANSIENT) || (e instanceof org.omg.CORBA.COMM_FAILURE) || (e instanceof org.omg.CORBA.INV_OBJREF) || (e instanceof org.omg.CORBA.UNKNOWN)) { Debug.warning( "Caught the following CORBA communication error, so retrying:\n" + e.toString() + "\n" + Debug.getStackTrace(e)); return (formatNVPair(makeClientCall(serverName, true, header, msg))); } else { // It's not a communication exception indicating that retry is recommended, // so just re-throw it. throw e; } } } catch (Exception e) { if (e instanceof InvalidDataException) { Debug.error(e.toString() + "\n" + Debug.getStackTrace(e)); throw new MessageException(((InvalidDataException) e).errorMessage); } else { Debug.error(e.toString() + "\n" + Debug.getStackTrace(e)); throw new ProcessingException(e.toString()); } } }