X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=xmltooling%2Fsoap%2Fimpl%2FSOAPImpl.cpp;h=b4d619d4db27c2662cad62176865fbfc7b6749a8;hb=81b488b2790e7bdeb2f43560b1d4a7d22c3dfdf5;hp=305255d1226acde88e0dea3b6f8f9801e6420d72;hpb=1f87cef41f9948492e13d3d9dc1495652606c441;p=shibboleth%2Fcpp-xmltooling.git diff --git a/xmltooling/soap/impl/SOAPImpl.cpp b/xmltooling/soap/impl/SOAPImpl.cpp index 305255d..b4d619d 100644 --- a/xmltooling/soap/impl/SOAPImpl.cpp +++ b/xmltooling/soap/impl/SOAPImpl.cpp @@ -1,23 +1,27 @@ -/* - * Copyright 2001-2006 Internet2 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at +/** + * Licensed to the University Corporation for Advanced Internet + * Development, Inc. (UCAID) under one or more contributor license + * agreements. See the NOTICE file distributed with this work for + * additional information regarding copyright ownership. + * + * UCAID licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the + * License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific + * language governing permissions and limitations under the License. */ /** * SOAPImpl.cpp * - * Implementation classes for SOAP schema + * Implementation classes for SOAP 1.1 schema. */ #include "internal.h" @@ -34,8 +38,10 @@ using namespace soap11; using namespace xmltooling; +using namespace xercesc; using namespace std; using xmlconstants::SOAP11ENV_NS; +using xmlconstants::SOAP11ENV_PREFIX; #if defined (_MSC_VER) #pragma warning( push ) @@ -53,33 +59,37 @@ namespace { public AbstractXMLObjectMarshaller, public AbstractXMLObjectUnmarshaller { - QName* m_qname; + mutable xmltooling::QName* m_qname; public: virtual ~FaultcodeImpl() { delete m_qname; } - FaultcodeImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) - : AbstractXMLObject(nsURI, localName, prefix, schemaType), m_qname(NULL) { + FaultcodeImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) + : AbstractXMLObject(nsURI, localName, prefix, schemaType), m_qname(nullptr) { } FaultcodeImpl(const FaultcodeImpl& src) - : AbstractXMLObject(src), AbstractSimpleElement(src), AbstractDOMCachingXMLObject(src), m_qname(NULL) { + : AbstractXMLObject(src), AbstractSimpleElement(src), AbstractDOMCachingXMLObject(src), m_qname(nullptr) { setCode(src.getCode()); } - const QName* getCode() const { + const xmltooling::QName* getCode() const { + if (!m_qname && getDOM() && getDOM()->getTextContent()) { + m_qname = XMLHelper::getNodeValueAsQName(getDOM()); + } return m_qname; } - void setCode(const QName* qname) { + void setCode(const xmltooling::QName* qname) { m_qname=prepareForAssignment(m_qname,qname); if (m_qname) { auto_ptr_XMLCh temp(m_qname->toString().c_str()); setTextContent(temp.get()); } - else - setTextContent(NULL); + else { + setTextContent(nullptr); + } } IMPL_XMLOBJECT_CLONE(Faultcode); @@ -95,7 +105,7 @@ namespace { public: virtual ~DetailImpl() {} - DetailImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + DetailImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) { } @@ -133,14 +143,14 @@ namespace { public AbstractXMLObjectUnmarshaller { void init() { - m_Faultcode=NULL; - m_Faultstring=NULL; - m_Faultactor=NULL; - m_Detail=NULL; - m_children.push_back(NULL); - m_children.push_back(NULL); - m_children.push_back(NULL); - m_children.push_back(NULL); + m_Faultcode=nullptr; + m_Faultstring=nullptr; + m_Faultactor=nullptr; + m_Detail=nullptr; + m_children.push_back(nullptr); + m_children.push_back(nullptr); + m_children.push_back(nullptr); + m_children.push_back(nullptr); m_pos_Faultcode=m_children.begin(); m_pos_Faultstring=m_pos_Faultcode; ++m_pos_Faultstring; @@ -157,7 +167,7 @@ namespace { public: virtual ~FaultImpl() {} - FaultImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + FaultImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) { init(); } @@ -183,10 +193,10 @@ namespace { protected: void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { - PROC_TYPED_CHILD(Faultcode,SOAP11ENV_NS,false); - PROC_TYPED_CHILD(Faultstring,SOAP11ENV_NS,false); - PROC_TYPED_CHILD(Faultactor,SOAP11ENV_NS,false); - PROC_TYPED_CHILD(Detail,SOAP11ENV_NS,false); + PROC_TYPED_CHILD(Faultcode,nullptr,false); + PROC_TYPED_CHILD(Faultstring,nullptr,false); + PROC_TYPED_CHILD(Faultactor,nullptr,false); + PROC_TYPED_CHILD(Detail,nullptr,false); AbstractXMLObjectUnmarshaller::processChildElement(childXMLObject,root); } }; @@ -198,17 +208,12 @@ namespace { public AbstractXMLObjectMarshaller, public AbstractXMLObjectUnmarshaller { - void init() { - m_EncodingStyle=NULL; - } public: virtual ~BodyImpl() { - XMLString::release(&m_EncodingStyle); } - BodyImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + BodyImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) { - init(); } BodyImpl(const BodyImpl& src) @@ -216,30 +221,16 @@ namespace { AbstractAttributeExtensibleXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { - init(); - setEncodingStyle(src.getEncodingStyle()); VectorOf(XMLObject) v=getUnknownXMLObjects(); for (vector::const_iterator i=src.m_UnknownXMLObjects.begin(); i!=src.m_UnknownXMLObjects.end(); ++i) v.push_back((*i)->clone()); } IMPL_XMLOBJECT_CLONE(Body); - IMPL_STRING_ATTRIB(EncodingStyle); IMPL_XMLOBJECT_CHILDREN(UnknownXMLObject, m_children.end()); - void setAttribute(QName& qualifiedName, const XMLCh* value) { - if (qualifiedName.hasNamespaceURI() && XMLString::equals(qualifiedName.getNamespaceURI(),SOAP11ENV_NS)) { - if (XMLString::equals(qualifiedName.getLocalPart(),ENCODINGSTYLE_ATTRIB_NAME)) { - setEncodingStyle(value); - return; - } - } - AbstractAttributeExtensibleXMLObject::setAttribute(qualifiedName, value); - } - protected: void marshallAttributes(DOMElement* domElement) const { - MARSHALL_STRING_ATTRIB(EncodingStyle,ENCODINGSTYLE,SOAP11ENV_NS); marshallExtensionAttributes(domElement); } @@ -259,18 +250,12 @@ namespace { public AbstractXMLObjectMarshaller, public AbstractXMLObjectUnmarshaller { - void init() { - m_Actor=NULL; - m_MustUnderstand=xmlconstants::XML_BOOL_NULL; - } public: virtual ~HeaderImpl() { - XMLString::release(&m_Actor); } - HeaderImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + HeaderImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) { - init(); } HeaderImpl(const HeaderImpl& src) @@ -278,37 +263,16 @@ namespace { AbstractAttributeExtensibleXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { - init(); - setActor(src.getActor()); - MustUnderstand(m_MustUnderstand); VectorOf(XMLObject) v=getUnknownXMLObjects(); for (vector::const_iterator i=src.m_UnknownXMLObjects.begin(); i!=src.m_UnknownXMLObjects.end(); ++i) v.push_back((*i)->clone()); } IMPL_XMLOBJECT_CLONE(Header); - IMPL_STRING_ATTRIB(Actor); - IMPL_BOOLEAN_ATTRIB(MustUnderstand); IMPL_XMLOBJECT_CHILDREN(UnknownXMLObject, m_children.end()); - void setAttribute(QName& qualifiedName, const XMLCh* value) { - if (qualifiedName.hasNamespaceURI() && XMLString::equals(qualifiedName.getNamespaceURI(),SOAP11ENV_NS)) { - if (XMLString::equals(qualifiedName.getLocalPart(),MUSTUNDERSTAND_ATTRIB_NAME)) { - setMustUnderstand(value); - return; - } - else if (XMLString::equals(qualifiedName.getLocalPart(),ACTOR_ATTRIB_NAME)) { - setActor(value); - return; - } - } - AbstractAttributeExtensibleXMLObject::setAttribute(qualifiedName, value); - } - protected: void marshallAttributes(DOMElement* domElement) const { - MARSHALL_STRING_ATTRIB(Actor,ACTOR,SOAP11ENV_NS); - MARSHALL_BOOLEAN_ATTRIB(MustUnderstand,MUSTUNDERSTAND,SOAP11ENV_NS); marshallExtensionAttributes(domElement); } @@ -329,10 +293,10 @@ namespace { public AbstractXMLObjectUnmarshaller { void init() { - m_Header=NULL; - m_Body=NULL; - m_children.push_back(NULL); - m_children.push_back(NULL); + m_Header=nullptr; + m_Body=nullptr; + m_children.push_back(nullptr); + m_children.push_back(nullptr); m_pos_Header=m_children.begin(); m_pos_Body=m_pos_Header; ++m_pos_Body; @@ -340,7 +304,7 @@ namespace { public: virtual ~EnvelopeImpl() {} - EnvelopeImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + EnvelopeImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) { init(); } @@ -402,10 +366,20 @@ const XMLCh Envelope::LOCAL_NAME[] = UNICODE_LITERAL_8(E,n,v, const XMLCh Envelope::TYPE_NAME[] = UNICODE_LITERAL_8(E,n,v,e,l,o,p,e); const XMLCh Fault::LOCAL_NAME[] = UNICODE_LITERAL_5(F,a,u,l,t); const XMLCh Fault::TYPE_NAME[] = UNICODE_LITERAL_5(F,a,u,l,t); -const XMLCh Faultactor::LOCAL_NAME[] = UNICODE_LITERAL_10(F,a,u,l,t,a,c,t,o,r); -const XMLCh Faultcode::LOCAL_NAME[] = UNICODE_LITERAL_9(F,a,u,l,t,c,o,d,e); -const XMLCh Faultstring::LOCAL_NAME[] = UNICODE_LITERAL_11(F,a,u,l,t,s,t,r,i,n,g); +const XMLCh Faultactor::LOCAL_NAME[] = UNICODE_LITERAL_10(f,a,u,l,t,a,c,t,o,r); +const XMLCh Faultcode::LOCAL_NAME[] = UNICODE_LITERAL_9(f,a,u,l,t,c,o,d,e); +const XMLCh Faultstring::LOCAL_NAME[] = UNICODE_LITERAL_11(f,a,u,l,t,s,t,r,i,n,g); const XMLCh Header::LOCAL_NAME[] = UNICODE_LITERAL_6(H,e,a,d,e,r); const XMLCh Header::TYPE_NAME[] = UNICODE_LITERAL_6(H,e,a,d,e,r); const XMLCh Header::ACTOR_ATTRIB_NAME[] = UNICODE_LITERAL_5(a,c,t,o,r); const XMLCh Header::MUSTUNDERSTAND_ATTRIB_NAME[] = UNICODE_LITERAL_14(m,u,s,t,U,n,d,e,r,s,t,a,n,d); + +static const XMLCh _CLIENT[] = UNICODE_LITERAL_6(C,l,i,e,n,t); +static const XMLCh _SERVER[] = UNICODE_LITERAL_6(S,e,r,v,e,r); +static const XMLCh _MUSTUNDERSTAND[] = UNICODE_LITERAL_14(M,u,s,t,U,n,d,e,r,s,t,a,n,d); +static const XMLCh _VERSIONMISMATCH[] = UNICODE_LITERAL_15(V,e,r,s,i,o,n,M,i,s,m,a,t,c,h); + +xmltooling::QName Faultcode::CLIENT(SOAP11ENV_NS,_CLIENT,SOAP11ENV_PREFIX); +xmltooling::QName Faultcode::SERVER(SOAP11ENV_NS,_SERVER,SOAP11ENV_PREFIX); +xmltooling::QName Faultcode::MUSTUNDERSTAND(SOAP11ENV_NS,_MUSTUNDERSTAND,SOAP11ENV_PREFIX); +xmltooling::QName Faultcode::VERSIONMISMATCH(SOAP11ENV_NS,_VERSIONMISMATCH,SOAP11ENV_PREFIX);