00001 #ifndef __ARC_WSA_H__
00002 #define __ARC_WSA_H__
00003
00004 #include <arc/XMLNode.h>
00005 #include <arc/message/SOAPEnvelope.h>
00006
00007
00008
00009
00010 namespace Arc {
00011
00012 #define WSA_NAMESPACE "http://www.w3.org/2005/08/addressing"
00013
00015
00018 class WSAEndpointReference {
00019 protected:
00020 XMLNode epr_;
00021 public:
00023 WSAEndpointReference(XMLNode epr);
00025 WSAEndpointReference(const WSAEndpointReference& wsa);
00027 WSAEndpointReference(const std::string& address);
00029 WSAEndpointReference(void);
00031 ~WSAEndpointReference(void);
00033 std::string Address(void) const;
00035 bool hasAddress(void) const;
00037 void Address(const std::string& uri);
00039 WSAEndpointReference& operator=(const std::string& address);
00043 XMLNode ReferenceParameters(void);
00047 XMLNode MetaData(void);
00049 operator XMLNode(void);
00050 };
00051
00053
00056 class WSAHeader {
00057 protected:
00058 XMLNode header_;
00059 bool header_allocated_;
00060
00061
00062
00063
00064 public:
00066 WSAHeader(SOAPEnvelope& soap);
00068 WSAHeader(const std::string& action);
00069 ~WSAHeader(void);
00071 std::string To(void) const;
00073 bool hasTo(void) const;
00075 void To(const std::string& uri);
00078 WSAEndpointReference From(void);
00081 WSAEndpointReference ReplyTo(void);
00084 WSAEndpointReference FaultTo(void);
00086 std::string Action(void) const;
00088 bool hasAction(void) const;
00090 void Action(const std::string& uri);
00092 std::string MessageID(void) const;
00094 bool hasMessageID(void) const;
00096 void MessageID(const std::string& uri);
00098 std::string RelatesTo(void) const;
00100 bool hasRelatesTo(void) const;
00102 void RelatesTo(const std::string& uri);
00104 std::string RelationshipType(void) const;
00106 bool hasRelationshipType(void) const;
00108 void RelationshipType(const std::string& uri);
00110 XMLNode ReferenceParameter(int n);
00112 XMLNode ReferenceParameter(const std::string& name);
00115 XMLNode NewReferenceParameter(const std::string& name);
00117 operator XMLNode(void);
00119 static bool Check(SOAPEnvelope& soap);
00120 };
00121
00123 typedef enum {
00124 WSAFaultNone,
00125 WSAFaultUnknown,
00126 WSAFaultInvalidAddressingHeader,
00127 WSAFaultInvalidAddress,
00128 WSAFaultInvalidEPR,
00129 WSAFaultInvalidCardinality,
00130 WSAFaultMissingAddressInEPR,
00131 WSAFaultDuplicateMessageID,
00132 WSAFaultActionMismatch,
00133 WSAFaultOnlyAnonymousAddressSupported,
00134 WSAFaultOnlyNonAnonymousAddressSupported,
00135 WSAFaultMessageAddressingHeaderRequired,
00136 WSAFaultDestinationUnreachable,
00137 WSAFaultActionNotSupported,
00138 WSAFaultEndpointUnavailable
00139 } WSAFault;
00140
00142
00143 void WSAFaultAssign(SOAPEnvelope& mesage,WSAFault fid);
00145
00146 WSAFault WSAFaultExtract(SOAPEnvelope& message);
00147
00148 }
00149
00150 #endif