/** * Construct an instance based on the provided xpath expression, namespaces and * {@link TransformerFactory}. * @param expression the xpath expression for splitting. * @param namespaces the XML namespace for parsing. * @param transformerFactory the {@link TransformerFactory} * for parsing and building documents. * @since 4.3.19 */ public XPathMessageSplitter(String expression, Map<String, String> namespaces, TransformerFactory transformerFactory) { this(XPathExpressionFactory.createXPathExpression(expression, namespaces), transformerFactory); XPath xpath = XPathFactory.newInstance().newXPath(); SimpleNamespaceContext namespaceContext = new SimpleNamespaceContext(); namespaceContext.setBindings(namespaces); xpath.setNamespaceContext(namespaceContext); try { this.jaxpExpression = xpath.compile(expression); } catch (XPathExpressionException e) { throw new org.springframework.xml.xpath.XPathParseException( "Could not compile [" + expression + "] to a XPathExpression: " + e.getMessage(), e); } }
@Override protected Map<String, Object> extractUserDefinedHeaders(SoapMessage source) { Map<String, Object> headers = new HashMap<String, Object>(); SoapHeader soapHeader = source.getSoapHeader(); if (soapHeader != null) { Iterator<?> attributeIter = soapHeader.getAllAttributes(); while (attributeIter.hasNext()) { Object name = attributeIter.next(); if (name instanceof QName) { String qnameString = QNameUtils.toQualifiedName((QName) name); String value = soapHeader.getAttributeValue((QName) name); if (value != null) { headers.put(qnameString, value); } } } Iterator<?> elementIter = soapHeader.examineAllHeaderElements(); while (elementIter.hasNext()) { Object element = elementIter.next(); if (element instanceof SoapHeaderElement) { QName qname = ((SoapHeaderElement) element).getName(); String qnameString = QNameUtils.toQualifiedName(qname); headers.put(qnameString, element); } } } return headers; }
@Override public void setAsText(String text) throws IllegalArgumentException { setValue(QNameUtils.parseQNameString(text)); }
/** * Binds the given namespace as default namespace. * * @param namespaceUri the namespace uri */ public void bindDefaultNamespaceUri(String namespaceUri) { bindNamespaceUri(XMLConstants.DEFAULT_NS_PREFIX, namespaceUri); }
/** * Returns fault code as qualified name. * @return */ public QName getFaultCodeQName() { return QNameUtils.parseQNameString(faultCode); }
@Override protected boolean validateLookupKey(String key) { return QNameUtils.validateQName(key); }
public String getPrefix(String namespaceUri) { List<String> prefixes = getPrefixesInternal(namespaceUri); return prefixes.isEmpty() ? null : prefixes.get(0); }
/** * Removes the binding for the given prefix. * * @see SimpleNamespaceContext#removeBinding(String) */ public final void endPrefixMapping(String prefix) { namespaceContext.removeBinding(prefix); }
/** * Sets namespace mapping for all XPath validations like {@link #assertXPath(String)} * @param namespaceMapping * @return */ public MessageValidator useNamespaceMapping(Map<String, String> namespaceMapping) { namespaceContext = new SimpleNamespaceContext(); namespaceContext.setBindings(namespaceMapping); return this; }
@Override public void setAsText(String text) throws IllegalArgumentException { setValue(QNameUtils.parseQNameString(text)); }
/** * Binds the given prefix to the given namespaces. * * @see SimpleNamespaceContext#bindNamespaceUri(String,String) */ public final void startPrefixMapping(String prefix, String uri) { namespaceContext.bindNamespaceUri(prefix, uri); }
@Override protected void populateUserDefinedHeader(String headerName, Object headerValue, SoapMessage target) { SoapHeader soapHeader = target.getSoapHeader(); if (headerValue instanceof String) { QName qname = QNameUtils.parseQNameString(headerName); soapHeader.addAttribute(qname, (String) headerValue); } else if (headerValue instanceof Source) { Result result = soapHeader.getResult(); try { this.transformerHelper.transform((Source) headerValue, result); } catch (TransformerException e) { throw new SoapHeaderException( "Could not transform source [" + headerValue + "] to result [" + result + "]", e); } } }
@Override protected boolean validateLookupKey(String key) { return QNameUtils.validateQName(key); }
@Override public void setAsText(String text) throws IllegalArgumentException { setValue(QNameUtils.parseQNameString(text)); }
/** * Binds the given namespace as default namespace. * * @param namespaceUri the namespace uri */ public void bindDefaultNamespaceUri(String namespaceUri) { bindNamespaceUri(XMLConstants.DEFAULT_NS_PREFIX, namespaceUri); }
assertEquals("bar", soapHeader.getAttributeValue(QNameUtils.parseQNameString("foo"))); soapHeader.examineHeaderElements(QNameUtils.parseQNameString("{http://test.auth.org}auth")); soapHeader.examineHeaderElements(QNameUtils.parseQNameString("{http://test.org}test"));
@Override protected boolean validateLookupKey(String key) { return QNameUtils.validateQName(key); }
/** * Adds mapping between prefix and namespace. * @param prefix * @param namespace * @return */ public MessageValidator addNamespaceMapping(String prefix, String namespace) { namespaceContext.bindNamespaceUri(prefix, namespace); return this; }
assertNotNull(soapHeader.getAttributeValue(QNameUtils.parseQNameString("foo"))); assertNotNull(soapHeader.getAttributeValue(QNameUtils.parseQNameString("foobar"))); assertNotNull(soapHeader.getAttributeValue(QNameUtils.parseQNameString("abaz"))); assertNull(soapHeader.getAttributeValue(QNameUtils.parseQNameString("bar"))); if (soap) { ((SoapMessage) wsMessage).getSoapHeader().addAttribute(QNameUtils.parseQNameString("bar"), "bar"); ((SoapMessage) wsMessage).getSoapHeader().addAttribute(QNameUtils.parseQNameString("baz"), "baz");
/** * Binds the given namespace as default namespace. * * @param namespaceUri the namespace uri */ public void bindDefaultNamespaceUri(String namespaceUri) { bindNamespaceUri(XMLConstants.DEFAULT_NS_PREFIX, namespaceUri); }