2 * Licensed to the University Corporation for Advanced Internet
3 * Development, Inc. (UCAID) under one or more contributor license
4 * agreements. See the NOTICE file distributed with this work for
5 * additional information regarding copyright ownership.
7 * UCAID licenses this file to you under the Apache License,
8 * Version 2.0 (the "License"); you may not use this file except
9 * in compliance with the License. You may obtain a copy of the
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing,
15 * software distributed under the License is distributed on an
16 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
17 * either express or implied. See the License for the specific
18 * language governing permissions and limitations under the License.
24 * Implementation classes for SOAP 1.1 schema.
28 #include "AbstractAttributeExtensibleXMLObject.h"
29 #include "AbstractComplexElement.h"
30 #include "AbstractSimpleElement.h"
31 #include "exceptions.h"
32 #include "io/AbstractXMLObjectMarshaller.h"
33 #include "io/AbstractXMLObjectUnmarshaller.h"
34 #include "soap/SOAP.h"
35 #include "util/XMLHelper.h"
37 #include <xercesc/util/XMLUniDefs.hpp>
39 using namespace soap11;
40 using namespace xmltooling;
41 using namespace xercesc;
43 using xmlconstants::SOAP11ENV_NS;
44 using xmlconstants::SOAP11ENV_PREFIX;
46 #if defined (_MSC_VER)
47 #pragma warning( push )
48 #pragma warning( disable : 4250 4251 )
53 DECL_XMLOBJECTIMPL_SIMPLE(XMLTOOL_DLLLOCAL,Faultstring);
54 DECL_XMLOBJECTIMPL_SIMPLE(XMLTOOL_DLLLOCAL,Faultactor);
56 class XMLTOOL_DLLLOCAL FaultcodeImpl : public virtual Faultcode,
57 public AbstractSimpleElement,
58 public AbstractDOMCachingXMLObject,
59 public AbstractXMLObjectMarshaller,
60 public AbstractXMLObjectUnmarshaller
62 mutable xmltooling::QName* m_qname;
64 virtual ~FaultcodeImpl() {
68 FaultcodeImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType)
69 : AbstractXMLObject(nsURI, localName, prefix, schemaType), m_qname(nullptr) {
72 FaultcodeImpl(const FaultcodeImpl& src)
73 : AbstractXMLObject(src), AbstractSimpleElement(src), AbstractDOMCachingXMLObject(src), m_qname(nullptr) {
74 setCode(src.getCode());
77 const xmltooling::QName* getCode() const {
78 if (!m_qname && getDOM() && getDOM()->getTextContent()) {
79 m_qname = XMLHelper::getNodeValueAsQName(getDOM());
84 void setCode(const xmltooling::QName* qname) {
85 m_qname=prepareForAssignment(m_qname,qname);
87 auto_ptr_XMLCh temp(m_qname->toString().c_str());
88 setTextContent(temp.get());
91 setTextContent(nullptr);
95 IMPL_XMLOBJECT_CLONE(Faultcode);
98 class XMLTOOL_DLLLOCAL DetailImpl : public virtual Detail,
99 public AbstractAttributeExtensibleXMLObject,
100 public AbstractComplexElement,
101 public AbstractDOMCachingXMLObject,
102 public AbstractXMLObjectMarshaller,
103 public AbstractXMLObjectUnmarshaller
106 virtual ~DetailImpl() {}
108 DetailImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType)
109 : AbstractXMLObject(nsURI, localName, prefix, schemaType) {
112 DetailImpl(const DetailImpl& src)
113 : AbstractXMLObject(src),
114 AbstractAttributeExtensibleXMLObject(src),
115 AbstractComplexElement(src),
116 AbstractDOMCachingXMLObject(src) {
117 VectorOf(XMLObject) v=getUnknownXMLObjects();
118 for (vector<XMLObject*>::const_iterator i=src.m_UnknownXMLObjects.begin(); i!=src.m_UnknownXMLObjects.end(); ++i)
119 v.push_back((*i)->clone());
122 IMPL_XMLOBJECT_CLONE(Detail);
123 IMPL_XMLOBJECT_CHILDREN(UnknownXMLObject, m_children.end());
126 void marshallAttributes(DOMElement* domElement) const {
127 marshallExtensionAttributes(domElement);
130 void processChildElement(XMLObject* childXMLObject, const DOMElement* root) {
131 getUnknownXMLObjects().push_back(childXMLObject);
134 void processAttribute(const DOMAttr* attribute) {
135 unmarshallExtensionAttribute(attribute);
139 class XMLTOOL_DLLLOCAL FaultImpl : public virtual Fault,
140 public AbstractComplexElement,
141 public AbstractDOMCachingXMLObject,
142 public AbstractXMLObjectMarshaller,
143 public AbstractXMLObjectUnmarshaller
147 m_Faultstring=nullptr;
148 m_Faultactor=nullptr;
150 m_children.push_back(nullptr);
151 m_children.push_back(nullptr);
152 m_children.push_back(nullptr);
153 m_children.push_back(nullptr);
154 m_pos_Faultcode=m_children.begin();
155 m_pos_Faultstring=m_pos_Faultcode;
157 m_pos_Faultactor=m_pos_Faultstring;
159 m_pos_Detail=m_pos_Faultactor;
168 virtual ~FaultImpl() {}
170 FaultImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType)
171 : AbstractXMLObject(nsURI, localName, prefix, schemaType) {
175 FaultImpl(const FaultImpl& src)
176 : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) {
178 if (src.getFaultcode())
179 setFaultcode(src.getFaultcode()->cloneFaultcode());
180 if (src.getFaultstring())
181 setFaultstring(src.getFaultstring()->cloneFaultstring());
182 if (src.getFaultactor())
183 setFaultactor(src.getFaultactor()->cloneFaultactor());
185 setDetail(src.getDetail()->cloneDetail());
188 IMPL_XMLOBJECT_CLONE(Fault);
189 IMPL_TYPED_CHILD(Faultcode);
190 IMPL_TYPED_CHILD(Faultstring);
191 IMPL_TYPED_CHILD(Faultactor);
192 IMPL_TYPED_CHILD(Detail);
195 void processChildElement(XMLObject* childXMLObject, const DOMElement* root) {
196 PROC_TYPED_CHILD(Faultcode,nullptr,false);
197 PROC_TYPED_CHILD(Faultstring,nullptr,false);
198 PROC_TYPED_CHILD(Faultactor,nullptr,false);
199 PROC_TYPED_CHILD(Detail,nullptr,false);
200 AbstractXMLObjectUnmarshaller::processChildElement(childXMLObject,root);
204 class XMLTOOL_DLLLOCAL BodyImpl : public virtual Body,
205 public AbstractAttributeExtensibleXMLObject,
206 public AbstractComplexElement,
207 public AbstractDOMCachingXMLObject,
208 public AbstractXMLObjectMarshaller,
209 public AbstractXMLObjectUnmarshaller
212 virtual ~BodyImpl() {
215 BodyImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType)
216 : AbstractXMLObject(nsURI, localName, prefix, schemaType) {
219 BodyImpl(const BodyImpl& src)
220 : AbstractXMLObject(src),
221 AbstractAttributeExtensibleXMLObject(src),
222 AbstractComplexElement(src),
223 AbstractDOMCachingXMLObject(src) {
224 VectorOf(XMLObject) v=getUnknownXMLObjects();
225 for (vector<XMLObject*>::const_iterator i=src.m_UnknownXMLObjects.begin(); i!=src.m_UnknownXMLObjects.end(); ++i)
226 v.push_back((*i)->clone());
229 IMPL_XMLOBJECT_CLONE(Body);
230 IMPL_XMLOBJECT_CHILDREN(UnknownXMLObject, m_children.end());
233 void marshallAttributes(DOMElement* domElement) const {
234 marshallExtensionAttributes(domElement);
237 void processChildElement(XMLObject* childXMLObject, const DOMElement* root) {
238 getUnknownXMLObjects().push_back(childXMLObject);
241 void processAttribute(const DOMAttr* attribute) {
242 unmarshallExtensionAttribute(attribute);
246 class XMLTOOL_DLLLOCAL HeaderImpl : public virtual Header,
247 public AbstractAttributeExtensibleXMLObject,
248 public AbstractComplexElement,
249 public AbstractDOMCachingXMLObject,
250 public AbstractXMLObjectMarshaller,
251 public AbstractXMLObjectUnmarshaller
254 virtual ~HeaderImpl() {
257 HeaderImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType)
258 : AbstractXMLObject(nsURI, localName, prefix, schemaType) {
261 HeaderImpl(const HeaderImpl& src)
262 : AbstractXMLObject(src),
263 AbstractAttributeExtensibleXMLObject(src),
264 AbstractComplexElement(src),
265 AbstractDOMCachingXMLObject(src) {
266 VectorOf(XMLObject) v=getUnknownXMLObjects();
267 for (vector<XMLObject*>::const_iterator i=src.m_UnknownXMLObjects.begin(); i!=src.m_UnknownXMLObjects.end(); ++i)
268 v.push_back((*i)->clone());
271 IMPL_XMLOBJECT_CLONE(Header);
272 IMPL_XMLOBJECT_CHILDREN(UnknownXMLObject, m_children.end());
275 void marshallAttributes(DOMElement* domElement) const {
276 marshallExtensionAttributes(domElement);
279 void processChildElement(XMLObject* childXMLObject, const DOMElement* root) {
280 getUnknownXMLObjects().push_back(childXMLObject);
283 void processAttribute(const DOMAttr* attribute) {
284 unmarshallExtensionAttribute(attribute);
288 class XMLTOOL_DLLLOCAL EnvelopeImpl : public virtual Envelope,
289 public AbstractAttributeExtensibleXMLObject,
290 public AbstractComplexElement,
291 public AbstractDOMCachingXMLObject,
292 public AbstractXMLObjectMarshaller,
293 public AbstractXMLObjectUnmarshaller
298 m_children.push_back(nullptr);
299 m_children.push_back(nullptr);
300 m_pos_Header=m_children.begin();
301 m_pos_Body=m_pos_Header;
305 virtual ~EnvelopeImpl() {}
307 EnvelopeImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType)
308 : AbstractXMLObject(nsURI, localName, prefix, schemaType) {
312 EnvelopeImpl(const EnvelopeImpl& src)
313 : AbstractXMLObject(src), AbstractAttributeExtensibleXMLObject(src),
314 AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) {
317 setHeader(src.getHeader()->cloneHeader());
319 setBody(src.getBody()->cloneBody());
322 IMPL_TYPED_CHILD(Header);
323 IMPL_TYPED_CHILD(Body);
324 IMPL_XMLOBJECT_CLONE(Envelope);
327 void marshallAttributes(DOMElement* domElement) const {
328 marshallExtensionAttributes(domElement);
331 void processChildElement(XMLObject* childXMLObject, const DOMElement* root) {
332 PROC_TYPED_CHILD(Header,SOAP11ENV_NS,false);
333 PROC_TYPED_CHILD(Body,SOAP11ENV_NS,false);
334 AbstractXMLObjectUnmarshaller::processChildElement(childXMLObject,root);
337 void processAttribute(const DOMAttr* attribute) {
338 unmarshallExtensionAttribute(attribute);
343 #if defined (_MSC_VER)
344 #pragma warning( pop )
347 // Builder Implementations
349 IMPL_XMLOBJECTBUILDER(Body);
350 IMPL_XMLOBJECTBUILDER(Detail);
351 IMPL_XMLOBJECTBUILDER(Envelope);
352 IMPL_XMLOBJECTBUILDER(Fault);
353 IMPL_XMLOBJECTBUILDER(Faultactor);
354 IMPL_XMLOBJECTBUILDER(Faultcode);
355 IMPL_XMLOBJECTBUILDER(Faultstring);
356 IMPL_XMLOBJECTBUILDER(Header);
360 const XMLCh Body::LOCAL_NAME[] = UNICODE_LITERAL_4(B,o,d,y);
361 const XMLCh Body::TYPE_NAME[] = UNICODE_LITERAL_4(B,o,d,y);
362 const XMLCh Body::ENCODINGSTYLE_ATTRIB_NAME[] = UNICODE_LITERAL_13(e,n,c,o,d,i,n,g,S,t,y,l,e);
363 const XMLCh Detail::LOCAL_NAME[] = UNICODE_LITERAL_6(d,e,t,a,i,l);
364 const XMLCh Detail::TYPE_NAME[] = UNICODE_LITERAL_6(d,e,t,a,i,l);
365 const XMLCh Envelope::LOCAL_NAME[] = UNICODE_LITERAL_8(E,n,v,e,l,o,p,e);
366 const XMLCh Envelope::TYPE_NAME[] = UNICODE_LITERAL_8(E,n,v,e,l,o,p,e);
367 const XMLCh Fault::LOCAL_NAME[] = UNICODE_LITERAL_5(F,a,u,l,t);
368 const XMLCh Fault::TYPE_NAME[] = UNICODE_LITERAL_5(F,a,u,l,t);
369 const XMLCh Faultactor::LOCAL_NAME[] = UNICODE_LITERAL_10(f,a,u,l,t,a,c,t,o,r);
370 const XMLCh Faultcode::LOCAL_NAME[] = UNICODE_LITERAL_9(f,a,u,l,t,c,o,d,e);
371 const XMLCh Faultstring::LOCAL_NAME[] = UNICODE_LITERAL_11(f,a,u,l,t,s,t,r,i,n,g);
372 const XMLCh Header::LOCAL_NAME[] = UNICODE_LITERAL_6(H,e,a,d,e,r);
373 const XMLCh Header::TYPE_NAME[] = UNICODE_LITERAL_6(H,e,a,d,e,r);
374 const XMLCh Header::ACTOR_ATTRIB_NAME[] = UNICODE_LITERAL_5(a,c,t,o,r);
375 const XMLCh Header::MUSTUNDERSTAND_ATTRIB_NAME[] = UNICODE_LITERAL_14(m,u,s,t,U,n,d,e,r,s,t,a,n,d);
377 static const XMLCh _CLIENT[] = UNICODE_LITERAL_6(C,l,i,e,n,t);
378 static const XMLCh _SERVER[] = UNICODE_LITERAL_6(S,e,r,v,e,r);
379 static const XMLCh _MUSTUNDERSTAND[] = UNICODE_LITERAL_14(M,u,s,t,U,n,d,e,r,s,t,a,n,d);
380 static const XMLCh _VERSIONMISMATCH[] = UNICODE_LITERAL_15(V,e,r,s,i,o,n,M,i,s,m,a,t,c,h);
382 xmltooling::QName Faultcode::CLIENT(SOAP11ENV_NS,_CLIENT,SOAP11ENV_PREFIX);
383 xmltooling::QName Faultcode::SERVER(SOAP11ENV_NS,_SERVER,SOAP11ENV_PREFIX);
384 xmltooling::QName Faultcode::MUSTUNDERSTAND(SOAP11ENV_NS,_MUSTUNDERSTAND,SOAP11ENV_PREFIX);
385 xmltooling::QName Faultcode::VERSIONMISMATCH(SOAP11ENV_NS,_VERSIONMISMATCH,SOAP11ENV_PREFIX);