16 #include <QLatin1String>
18 #include <QXmlStreamWriter>
20 class KDSoapMessageAddressingPropertiesData :
public QSharedData
31 QVector<KDSoapMessageRelationship::Relationship> relationships;
39 : d(new KDSoapMessageAddressingPropertiesData)
56 return d->destination;
76 return d->sourceEndpoint;
81 return d->sourceEndpoint.address();
96 return d->replyEndpoint;
101 return d->replyEndpoint.address();
116 return d->faultEndpoint;
121 return d->faultEndpoint.address();
146 return d->relationships;
156 d->relationships.append(relationship);
161 return d->referenceParameters;
166 d->referenceParameters = values;
171 if (!oneReferenceParameter.
isNull()) {
172 d->referenceParameters.append(oneReferenceParameter);
183 d->metadata = metadataList;
195 return d->addressingNamespace;
217 prefix += QLatin1String(
"/role");
220 prefix += QLatin1String(
"/id");
223 qWarning(
"Anything but Anonymous or Unspecified has no meaning in ws-addressing 2004/08 and earlier");
234 return prefix + QLatin1String(
"/anonymous");
236 return prefix + QLatin1String(
"/none");
238 return prefix + QLatin1String(
"/reply");
240 return prefix + QLatin1String(
"/unspecified");
271 static void writeAddressField(QXmlStreamWriter &writer,
const QString &addressingNS,
const QString &address)
273 writer.writeStartElement(addressingNS, QLatin1String(
"Address"));
274 writer.writeCharacters(address);
275 writer.writeEndElement();
280 const QVariant valueToWrite = value.
value();
281 if (valueToWrite.canConvert(QVariant::String)) {
282 writer.writeCharacters(valueToWrite.toString());
284 qWarning(
"Warning: KDSoapMessageAddressingProperties call to writeKDSoapValueVariant could not write the given KDSoapValue "
285 "value because it could not be converted into a QString");
292 for (
const KDSoapValue &value : qAsConst(values)) {
293 const QString topLevelName = value.name();
294 writer.writeStartElement(addressingNS, topLevelName);
296 if (value.childValues().isEmpty()) {
302 writer.writeEndElement();
306 void KDSoapMessageAddressingProperties::writeMessageAddressingProperties(
KDSoapNamespacePrefixes &namespacePrefixes, QXmlStreamWriter &writer,
307 const QString &messageNamespace,
bool forceQualified)
const
309 Q_UNUSED(messageNamespace);
310 Q_UNUSED(forceQualified);
312 bool supportsNoneAddressing =
false;
313 switch (d->addressingNamespace) {
317 supportsNoneAddressing =
false;
320 supportsNoneAddressing =
true;
330 if (!d->destination.isEmpty()) {
331 writer.writeStartElement(addressingNS, QLatin1String(
"To"));
332 writer.writeCharacters(d->destination);
333 writer.writeEndElement();
336 if (!d->sourceEndpoint.isEmpty()) {
337 writer.writeStartElement(addressingNS, QLatin1String(
"From"));
339 writer.writeEndElement();
342 if (!d->replyEndpoint.isEmpty()) {
343 writer.writeStartElement(addressingNS, QLatin1String(
"ReplyTo"));
345 writer.writeEndElement();
348 if (!d->faultEndpoint.isEmpty()) {
349 writer.writeStartElement(addressingNS, QLatin1String(
"FaultTo"));
351 writer.writeEndElement();
354 if (!d->action.isEmpty()) {
355 writer.writeStartElement(addressingNS, QLatin1String(
"Action"));
356 writer.writeCharacters(d->action);
357 writer.writeEndElement();
360 if (!d->messageID.isEmpty()) {
361 writer.writeStartElement(addressingNS, QLatin1String(
"MessageID"));
362 writer.writeCharacters(d->messageID);
363 writer.writeEndElement();
367 if (relationship.uri.isEmpty()) {
371 writer.writeStartElement(addressingNS, QLatin1String(
"RelatesTo"));
373 if (!relationship.relationshipType.isEmpty()) {
374 writer.writeAttribute(QLatin1String(
"RelationshipType"), relationship.relationshipType);
377 writer.writeCharacters(relationship.uri);
378 writer.writeEndElement();
381 if (!d->referenceParameters.isEmpty()) {
382 writer.writeStartElement(addressingNS, QLatin1String(
"ReferenceParameters"));
384 writer.writeEndElement();
387 if (!d->metadata.isEmpty()) {
388 writer.writeStartElement(addressingNS, QLatin1String(
"Metadata"));
390 writer.writeEndElement();
394 void KDSoapMessageAddressingProperties::readMessageAddressingProperty(
const KDSoapValue &value)
398 if (value.
name() == QLatin1String(
"Action")) {
399 d->action = value.
value().toString();
400 }
else if (value.
name() == QLatin1String(
"MessageID")) {
401 d->messageID = value.
value().toString();
402 }
else if (value.
name() == QLatin1String(
"To")) {
403 d->destination = value.
value().toString();
404 }
else if (value.
name() == QLatin1String(
"From")) {
405 d->sourceEndpoint.setAddress(value.
childValues().
child(QLatin1String(
"Address")).value().toString());
406 }
else if (value.
name() == QLatin1String(
"ReplyTo")) {
407 d->replyEndpoint.setAddress(value.
childValues().
child(QLatin1String(
"Address")).value().toString());
408 }
else if (value.
name() == QLatin1String(
"RelatesTo")) {
410 relationship.
uri = (value.
value().toString());
414 if (attr.name() == QLatin1String(
"RelationshipType")) {
418 d->relationships.append(relationship);
419 }
else if (value.
name() == QLatin1String(
"FaultTo")) {
420 d->faultEndpoint.setAddress(value.
childValues().
child(QLatin1String(
"Address")).value().toString());
421 }
else if (value.
name() == QLatin1String(
"ReferenceParameters")) {
423 }
else if (value.
name() == QLatin1String(
"Metadata")) {
static void writeKDSoapValueVariant(QXmlStreamWriter &writer, const KDSoapValue &value)
static void writeKDSoapValueListHierarchy(KDSoapNamespacePrefixes &namespacePrefixes, QXmlStreamWriter &writer, const QString &addressingNS, const KDSoapValueList &values)
QDebug operator<<(QDebug dbg, const KDSoapMessageAddressingProperties &msg)
static void writeAddressField(QXmlStreamWriter &writer, const QString &addressingNS, const QString &address)
void addMetadata(const KDSoapValue &metadata)
void addReferenceParameter(const KDSoapValue &oneReferenceParameter)
void addRelationship(const KDSoapMessageRelationship::Relationship &relationship)
KDSoapEndpointReference faultEndpoint() const
QVector< KDSoapMessageRelationship::Relationship > relationships() const
KDSoapValueList metadata() const
void setSourceEndpoint(const KDSoapEndpointReference &sourceEndpoint)
void setReplyEndpoint(const KDSoapEndpointReference &replyEndpoint)
KDSoapMessageAddressingProperties()
void setReplyEndpointAddress(const QString &replyEndpoint)
void setAddressingNamespace(KDSoapAddressingNamespace addressingNamespace)
KDSoapMessageAddressingProperties & operator=(const KDSoapMessageAddressingProperties &other)
QString faultEndpointAddress() const
KDSoapAddressingNamespace addressingNamespace() const
void setFaultEndpoint(const KDSoapEndpointReference &faultEndpoint)
void setSourceEndpointAddress(const QString &sourceEndpoint)
void setMetadata(const KDSoapValueList &metadataList)
void setReferenceParameters(const KDSoapValueList &values)
KDSoapAddressingPredefinedAddress
KDSoapAddressingNamespace
~KDSoapMessageAddressingProperties()
void setDestination(const QString &destination)
QString messageID() const
void setMessageID(const QString &id)
QString replyEndpointAddress() const
KDSoapEndpointReference sourceEndpoint() const
void setAction(const QString &action)
void setFaultEndpointAddress(const QString &faultEndpoint)
QString destination() const
QString sourceEndpointAddress() const
static QString predefinedAddressToString(KDSoapAddressingPredefinedAddress address, KDSoapAddressingNamespace addressingNamespace=Addressing200508)
KDSoapEndpointReference replyEndpoint() const
static bool isWSAddressingNamespace(const QString &namespaceUri)
static QString addressingNamespaceToString(KDSoapAddressingNamespace addressingNamespace)
void setRelationships(const QVector< KDSoapMessageRelationship::Relationship > &relationships)
KDSoapValueList referenceParameters() const
static QString soapMessageAddressing200303()
static QString soapMessageAddressing200408()
static QString soapMessageAddressing()
static QString soapMessageAddressing200403()
QList< KDSoapValue > & attributes()
KDSoapValue child(const QString &name) const
KDSoapValueList & childValues() const