/** * Default constructor using fields. */ public RootQNameMessageSelector(String name, String value, TestContext context) { super(name, value, context); Assert.isTrue(selectKey.equals(SELECTOR_ID), String.format("Invalid usage of root QName message selector - " + "usage restricted to key '%s' but was '%s'", SELECTOR_ID, selectKey)); if (QNameUtils.validateQName(value)) { this.rootQName = QNameUtils.parseQNameString(value); } else { throw new CitrusRuntimeException("Invalid root QName string '" + value + "'"); } }
@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 domSource(Node node) throws Exception { if (node.getNodeType() == Node.ELEMENT_NODE) { result = QNameUtils.getQNameForNode(node); } else if (node.getNodeType() == Node.DOCUMENT_NODE) { Document document = (Document) node; result = QNameUtils.getQNameForNode(document.getDocumentElement()); } }
private List<Attribute> getAttributes(Attributes attributes) { List<Attribute> list = new ArrayList<Attribute>(); for (int i = 0; i < attributes.getLength(); i++) { QName name = QNameUtils.toQName(attributes.getURI(i), attributes.getQName(i)); if (!("xmlns".equals(name.getLocalPart()) || "xmlns".equals(QNameUtils.getPrefix(name)))) { list.add(eventFactory.createAttribute(name, attributes.getValue(i))); } } return list; }
@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); }
/** * Convert a namespace URI and DOM or SAX qualified name to a <code>QName</code>. The qualified name can have the * form <code>prefix:localname</code> or <code>localName</code>. * * @param namespaceUri the namespace URI * @param qualifiedName the qualified name * @return a QName */ public static QName toQName(String namespaceUri, String qualifiedName) { int idx = qualifiedName.indexOf(':'); if (idx == -1) { return new QName(namespaceUri, qualifiedName); } else { return createQName(namespaceUri, qualifiedName.substring(idx + 1), qualifiedName.substring(0, idx)); } }
private void setValueText(QName code, SOAPFault fault, SOAPFaultCode faultCode) { String prefix = QNameUtils.getPrefix(code); if (StringUtils.hasLength(code.getNamespaceURI()) && StringUtils.hasLength(prefix)) { OMNamespace namespace = fault.findNamespaceURI(prefix); if (namespace == null) { fault.declareNamespace(code.getNamespaceURI(), prefix); } } else if (StringUtils.hasLength(code.getNamespaceURI())) { OMNamespace namespace = fault.findNamespace(code.getNamespaceURI(), null); if (namespace == null) { namespace = fault.declareNamespace(code.getNamespaceURI(), ""); } code = QNameUtils.createQName(code.getNamespaceURI(), code.getLocalPart(), namespace.getPrefix()); } faultCode.setText(code); }
/** * Convert a <code>QName</code> to a qualified name, as used by DOM and SAX. The returned string has a format of * <code>prefix:localName</code> if the prefix is set, or just <code>localName</code> if not. * * @param qName the <code>QName</code> * @return the qualified name */ public static String toQualifiedName(QName qName) { String prefix = getPrefix(qName); if (!StringUtils.hasLength(prefix)) { return qName.getLocalPart(); } else { return prefix + ":" + qName.getLocalPart(); } }
public final void endElement(String uri, String localName, String qName) throws SAXException { try { endElementInternal(QNameUtils.toQName(uri, qName), namespaceContext); } catch (XMLStreamException ex) { throw new SAXException("Could not handle endElement: " + ex.getMessage(), ex); } }
/** * Returns fault code as qualified name. * @return */ public QName getFaultCodeQName() { return QNameUtils.parseQNameString(faultCode); }
@Override protected boolean validateLookupKey(String key) { return QNameUtils.validateQName(key); }
@Override protected final QName getInvalidAddressingHeaderFaultSubcode() { return QNameUtils.createQName(NAMESPACE_URI, "InvalidMessageInformationHeader", getNamespacePrefix()); }
@Override protected void startElementInternal(QName name, Attributes attributes, SimpleNamespaceContext namespaceContext) throws XMLStreamException { streamWriter.writeStartElement(QNameUtils.getPrefix(name), name.getLocalPart(), name.getNamespaceURI()); String defaultNamespaceUri = namespaceContext.getNamespaceURI(""); if (StringUtils.hasLength(defaultNamespaceUri)) { streamWriter.writeNamespace("", defaultNamespaceUri); streamWriter.setDefaultNamespace(defaultNamespaceUri); } for (Iterator<String> iterator = namespaceContext.getBoundPrefixes(); iterator.hasNext();) { String prefix = iterator.next(); streamWriter.writeNamespace(prefix, namespaceContext.getNamespaceURI(prefix)); streamWriter.setPrefix(prefix, namespaceContext.getNamespaceURI(prefix)); } for (int i = 0; i < attributes.getLength(); i++) { QName attrName = QNameUtils.toQName(attributes.getURI(i), attributes.getQName(i)); String attrPrefix = QNameUtils.getPrefix(attrName); if (!("xmlns".equals(attrName.getLocalPart()) || "xmlns".equals(attrPrefix))) { streamWriter.writeAttribute(attrPrefix, attrName.getNamespaceURI(), attrName.getLocalPart(), attributes.getValue(i)); } } } }
private void setValueText(QName code, SOAPFaultValue faultValue) { String prefix = QNameUtils.getPrefix(code); if (StringUtils.hasLength(code.getNamespaceURI()) && StringUtils.hasLength(prefix)) { OMNamespace namespace = getAxiomFault().findNamespaceURI(prefix); if (namespace == null) { getAxiomFault().declareNamespace(code.getNamespaceURI(), prefix); } } else if (StringUtils.hasLength(code.getNamespaceURI())) { OMNamespace namespace = getAxiomFault().findNamespace(code.getNamespaceURI(), null); if (namespace == null) { throw new IllegalArgumentException("Could not resolve namespace of code [" + code + "]"); } code = QNameUtils.createQName(code.getNamespaceURI(), code.getLocalPart(), namespace.getPrefix()); } faultValue.setText(prefix + ":" + code.getLocalPart()); }
@Override public String getAsText() { Object value = getValue(); if (value == null || !(value instanceof QName)) { return ""; } else { QName qName = (QName) value; String prefix = QNameUtils.getPrefix(qName); if (StringUtils.hasLength(qName.getNamespaceURI()) && StringUtils.hasLength(prefix)) { return "{" + qName.getNamespaceURI() + "}" + prefix + ":" + qName.getLocalPart(); } else if (StringUtils.hasLength(qName.getNamespaceURI())) { return "{" + qName.getNamespaceURI() + "}" + qName.getLocalPart(); } else { return qName.getLocalPart(); } } } }
public final void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException { try { startElementInternal(QNameUtils.toQName(uri, qName), atts, namespaceContext); } catch (XMLStreamException ex) { throw new SAXException("Could not handle startElement: " + ex.getMessage(), ex); } }
private void handleEndElement() throws SAXException { if (getContentHandler() != null) { QName qName = reader.getName(); if (hasNamespacesFeature()) { getContentHandler() .endElement(qName.getNamespaceURI(), qName.getLocalPart(), QNameUtils.toQualifiedName(qName)); for (int i = 0; i < reader.getNamespaceCount(); i++) { String prefix = reader.getNamespacePrefix(i); if (prefix == null) { prefix = ""; } endPrefixMapping(prefix); } } else { getContentHandler().endElement("", "", QNameUtils.toQualifiedName(qName)); } } }
private void copySoapHeaders(final WebServiceEndpointConfiguration endpointConfiguration, final org.springframework.ws.soap.SoapMessage soapRequest, final SoapMessage soapMessage) { for (final Entry<String, Object> headerEntry : soapMessage.getHeaders().entrySet()) { if (MessageHeaderUtils.isSpringInternalHeader(headerEntry.getKey())) { continue; } if (headerEntry.getKey().equalsIgnoreCase(SoapMessageHeaders.SOAP_ACTION)) { soapRequest.setSoapAction(headerEntry.getValue().toString()); } else if (headerEntry.getKey().toLowerCase().startsWith(SoapMessageHeaders.HTTP_PREFIX)) { handleOutboundMimeMessageHeader(soapRequest, headerEntry.getKey().substring(SoapMessageHeaders.HTTP_PREFIX.length()), headerEntry.getValue(), endpointConfiguration.isHandleMimeHeaders()); } else if (!headerEntry.getKey().startsWith(MessageHeaders.PREFIX)) { final SoapHeaderElement headerElement; if (QNameUtils.validateQName(headerEntry.getKey())) { headerElement = soapRequest.getSoapHeader().addHeaderElement(QNameUtils.parseQNameString(headerEntry.getKey())); } else { headerElement = soapRequest.getSoapHeader().addHeaderElement(new QName("", headerEntry.getKey(), "")); } headerElement.setText(headerEntry.getValue().toString()); } } }
assertEquals("bar", soapHeader.getAttributeValue(QNameUtils.parseQNameString("foo"))); soapHeader.examineHeaderElements(QNameUtils.parseQNameString("{http://test.auth.org}auth")); soapHeader.examineHeaderElements(QNameUtils.parseQNameString("{http://test.org}test"));