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;
328 if (d->action.isEmpty()) {
334 if (!d->destination.isEmpty()) {
335 writer.writeStartElement(addressingNS, QLatin1String(
"To"));
336 writer.writeCharacters(d->destination);
337 writer.writeEndElement();
340 if (!d->sourceEndpoint.isEmpty()) {
341 writer.writeStartElement(addressingNS, QLatin1String(
"From"));
343 writer.writeEndElement();
346 if (!d->replyEndpoint.isEmpty()) {
347 writer.writeStartElement(addressingNS, QLatin1String(
"ReplyTo"));
349 writer.writeEndElement();
352 if (!d->faultEndpoint.isEmpty()) {
353 writer.writeStartElement(addressingNS, QLatin1String(
"FaultTo"));
355 writer.writeEndElement();
358 if (!d->action.isEmpty()) {
359 writer.writeStartElement(addressingNS, QLatin1String(
"Action"));
360 writer.writeCharacters(d->action);
361 writer.writeEndElement();
364 if (!d->messageID.isEmpty()) {
365 writer.writeStartElement(addressingNS, QLatin1String(
"MessageID"));
366 writer.writeCharacters(d->messageID);
367 writer.writeEndElement();
371 if (relationship.uri.isEmpty()) {
375 writer.writeStartElement(addressingNS, QLatin1String(
"RelatesTo"));
377 if (!relationship.relationshipType.isEmpty()) {
378 writer.writeAttribute(QLatin1String(
"RelationshipType"), relationship.relationshipType);
381 writer.writeCharacters(relationship.uri);
382 writer.writeEndElement();
385 if (!d->referenceParameters.isEmpty()) {
386 writer.writeStartElement(addressingNS, QLatin1String(
"ReferenceParameters"));
388 writer.writeEndElement();
391 if (!d->metadata.isEmpty()) {
392 writer.writeStartElement(addressingNS, QLatin1String(
"Metadata"));
394 writer.writeEndElement();
398 void KDSoapMessageAddressingProperties::readMessageAddressingProperty(
const KDSoapValue &value)
402 if (value.
name() == QLatin1String(
"Action")) {
403 d->action = value.
value().toString();
404 }
else if (value.
name() == QLatin1String(
"MessageID")) {
405 d->messageID = value.
value().toString();
406 }
else if (value.
name() == QLatin1String(
"To")) {
407 d->destination = value.
value().toString();
408 }
else if (value.
name() == QLatin1String(
"From")) {
409 d->sourceEndpoint.setAddress(value.
childValues().
child(QLatin1String(
"Address")).value().toString());
410 }
else if (value.
name() == QLatin1String(
"ReplyTo")) {
411 d->replyEndpoint.setAddress(value.
childValues().
child(QLatin1String(
"Address")).value().toString());
412 }
else if (value.
name() == QLatin1String(
"RelatesTo")) {
414 relationship.
uri = (value.
value().toString());
418 if (attr.name() == QLatin1String(
"RelationshipType")) {
422 d->relationships.append(relationship);
423 }
else if (value.
name() == QLatin1String(
"FaultTo")) {
424 d->faultEndpoint.setAddress(value.
childValues().
child(QLatin1String(
"Address")).value().toString());
425 }
else if (value.
name() == QLatin1String(
"ReferenceParameters")) {
427 }
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