Author: gdaniels Date: Tue Mar 6 22:57:21 2007 New Revision: 515477 URL: http://svn.apache.org/viewvc?view=rev&rev=515477 Log: A few small changes.
* Store away the namespace when building the SOAP envelope in StAXSOAPModelBuilder - this will help to clean up identifySOAPVersion() among other things. * Stop doing case-insensitive comparisons when parsing SOAP - XML is case sensitive. * Clean up SOAPEnvelopeImpl.getHeader() a little, since <soapenv:Header> will always be the first element inside the envelope if it's present. I ran the Axiom tests and the Axis2 build successfully, but am not 100% confident that the new axiom jars made it over to my m2 repository... if there are any problems I'll be up in about 6-7 hours. Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/soap/impl/builder/StAXSOAPModelBuilder.java webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/SOAPEnvelopeImpl.java Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/soap/impl/builder/StAXSOAPModelBuilder.java URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/soap/impl/builder/StAXSOAPModelBuilder.java?view=diff&rev=515477&r1=515476&r2=515477 ============================================================================== --- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/soap/impl/builder/StAXSOAPModelBuilder.java (original) +++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/soap/impl/builder/StAXSOAPModelBuilder.java Tue Mar 6 22:57:21 2007 @@ -50,6 +50,7 @@ */ private SOAPEnvelope envelope; private OMNamespace envelopeNamespace; + private String namespaceURI; private SOAPFactory soapFactory; @@ -230,14 +231,14 @@ // Now I've found a SOAP Envelope, now create SOAPDocument and SOAPEnvelope here. - if (!elementName.equalsIgnoreCase(SOAPConstants.SOAPENVELOPE_LOCAL_NAME)) { + if (!elementName.equals(SOAPConstants.SOAPENVELOPE_LOCAL_NAME)) { throw new SOAPProcessingException("First Element must contain the local name, " - + SOAPConstants.SOAPENVELOPE_LOCAL_NAME, SOAPConstants.FAULT_CODE_VERSION_MISMATCH); + + SOAPConstants.SOAPENVELOPE_LOCAL_NAME, SOAPConstants.FAULT_CODE_SENDER); } // determine SOAP version and from that determine a proper factory here. if (soapFactory == null) { - String namespaceURI = this.parser.getNamespaceURI(); + namespaceURI = this.parser.getNamespaceURI(); if (SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI.equals(namespaceURI)) { soapFactory = OMAbstractFactory.getSOAP12Factory(); if(isDebugEnabled) { @@ -252,6 +253,8 @@ throw new SOAPProcessingException("Only SOAP 1.1 or SOAP 1.2 messages are supported in the" + " system", SOAPConstants.FAULT_CODE_VERSION_MISMATCH); } + } else { + namespaceURI = soapFactory.getSoapVersionURI(); } // create a SOAPMessage to hold the SOAP envelope and assign the SOAP envelope in that. @@ -268,6 +271,15 @@ processAttributes(element); } else if (elementLevel == 2) { + // Must be in the right namespace regardless + String elementNS = parser.getNamespaceURI(); + + if (!(namespaceURI.equals(elementNS))) { + if (!bodyPresent || !SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI.equals(namespaceURI)) { + throw new SOAPProcessingException("Disallowed element found inside Envelope : {" + + elementNS + "}" + elementName); + } + } // this is either a header or a body if (elementName.equals(SOAPConstants.HEADER_LOCAL_NAME)) { @@ -304,7 +316,7 @@ } } else if ((elementLevel == 3) && - parent.getLocalName().equalsIgnoreCase(SOAPConstants.HEADER_LOCAL_NAME)) { + parent.getLocalName().equals(SOAPConstants.HEADER_LOCAL_NAME)) { // this is a headerblock try { @@ -318,8 +330,8 @@ processAttributes(element); } else if ((elementLevel == 3) && - parent.getLocalName().equalsIgnoreCase(SOAPConstants.BODY_LOCAL_NAME) && - elementName.equalsIgnoreCase(SOAPConstants.BODY_FAULT_LOCAL_NAME)) { + parent.getLocalName().equals(SOAPConstants.BODY_LOCAL_NAME) && + elementName.equals(SOAPConstants.BODY_FAULT_LOCAL_NAME)) { // this is a headerblock element = soapFactory.createSOAPFault((SOAPBody) parent, this); Modified: webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/SOAPEnvelopeImpl.java URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/SOAPEnvelopeImpl.java?view=diff&rev=515477&r1=515476&r2=515477 ============================================================================== --- webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/SOAPEnvelopeImpl.java (original) +++ webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/SOAPEnvelopeImpl.java Tue Mar 6 22:57:21 2007 @@ -77,15 +77,21 @@ * @throws OMException */ public SOAPHeader getHeader() throws OMException { - SOAPHeader header = - (SOAPHeader) getFirstChildWithName( - HEADER_QNAME); - if (builder == null && header == null) { - inferFactory(); - header = ((SOAPFactory) factory).createSOAPHeader(this); - addChild(header); + // Header must be the first child + OMElement header = getFirstElement(); + if (header == null) { + if (builder == null) { + inferFactory(); + header = ((SOAPFactory) factory).createSOAPHeader(this); + addChild(header); + } else { + return null; + } + } else if (!(header instanceof SOAPHeader)) { + return null; } - return header; + + return (SOAPHeader)header; } private void inferFactory() { --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]