@Override protected Object splitMessage(Message<?> message) { try { Object payload = message.getPayload(); Object result = null; if (payload instanceof Node) { result = splitNodePayload((Node) payload, message); } else if (payload instanceof String) { payload = xmlPayloadConverter.convertToDocument(payload); result = splitStringPayload(message); } else { throw new IllegalArgumentException( "Unsupported payload type [" + payload.getClass().getName() + "]. The XPathMessageSplitter only accepts [" + Node.class.getName() + "] or [java.lang.String] typed payloads."); } return result; } catch (ParserConfigurationException e) { throw new MessagingException(message, "failed to create DocumentBuilder", e); } catch (Exception e) { throw new MessagingException(message, "failed to split Message payload", e); } }
private Object splitStringPayload(Message<?> message) throws ParserConfigurationException, TransformerFactoryConfigurationError, TransformerException { Node node = xmlPayloadConverter.convertToDocument(message.getPayload()); List<Node> nodes = splitNodePayload(node, message); Transformer transformer = TransformerFactory.newInstance().newTransformer(); List<String> splitStrings = new ArrayList<String>(nodes.size()); for (Node nodeFromList : nodes) { StringResult result = new StringResult(); transformer.transform(new DOMSource(nodeFromList), result); splitStrings.add(result.toString()); } return splitStrings; }