public class SetHeaderExtensionFunction extends ExtensionFunctionDefinition { private static final long serialVersionUID = 1L; @Override public StructuredQName getFunctionQName() { return new StructuredQName("", "http://sap.com/it/", "setHeader"); } @Override public int getMinimumNumberOfArguments() { return 3; } @Override public int getMaximumNumberOfArguments() { return 3; } @Override public SequenceType[] getArgumentTypes() { return new SequenceType[] { SequenceType.SINGLE_ITEM, SequenceType.SINGLE_STRING, SequenceType.SINGLE_ITEM }; } @Override public SequenceType getResultType(SequenceType[] suppliedArgumentTypes) { return SequenceType.EMPTY_SEQUENCE; } @Override public ExtensionFunctionCall makeCallExpression() { return new ExtensionFunctionCall() { private static final long serialVersionUID = 1L; @Override public Sequence call(XPathContext xPathContext, Sequence[] arguments) throws XPathException { // 1st argument (mandatory, index 0) ObjectValue arg1 = (ObjectValue) arguments[0].iterate().next(); Exchange exchange; if (arg1.getObject() instanceof Exchange) { exchange = (Exchange) arg1.getObject(); } else { throw new XPathException("The first parameter of " + getFunctionQName().getClarkName() + " must be an org.apache.camel.Exchange but is a " + arg1.getObject().getClass().getName()); } // 2nd argument (mandatory, index 1) StringValue arg2 = (StringValue) arguments[1].iterate().next(); String headerName = arg2.getStringValue(); // 3rd argument (mandatory, index 2) Item arg3 = arguments[2].iterate().next(); String headerValue = arg3.getStringValue(); exchange.getOut().setHeader(headerName, headerValue); // Don't return anything return SequenceTool.toLazySequence(EmptyIterator.emptyIterator()); } }; } }