示例#1
0
  public SOAPElement addChildElement(SOAPElement element) throws SOAPException {

    // check if Element falls in SOAP 1.1 or 1.2 namespace.
    String elementURI = element.getElementName().getURI();
    String localName = element.getLocalName();

    if ((SOAPConstants.URI_NS_SOAP_ENVELOPE).equals(elementURI)
        || (SOAPConstants.URI_NS_SOAP_1_2_ENVELOPE).equals(elementURI)) {

      if ("Envelope".equalsIgnoreCase(localName)
          || "Header".equalsIgnoreCase(localName)
          || "Body".equalsIgnoreCase(localName)) {
        log.severe("SAAJ0103.impl.cannot.add.fragements");
        throw new SOAPExceptionImpl(
            "Cannot add fragments which contain elements " + "which are in the SOAP namespace");
      }

      if ("Fault".equalsIgnoreCase(localName) && !"Body".equalsIgnoreCase(this.getLocalName())) {
        log.severe("SAAJ0154.impl.adding.fault.to.nonbody");
        throw new SOAPExceptionImpl("Cannot add a SOAPFault as a child of " + this.getLocalName());
      }

      if ("Detail".equalsIgnoreCase(localName) && !"Fault".equalsIgnoreCase(this.getLocalName())) {
        log.severe("SAAJ0155.impl.adding.detail.nonfault");
        throw new SOAPExceptionImpl("Cannot add a Detail as a child of " + this.getLocalName());
      }

      if ("Fault".equalsIgnoreCase(localName)) {
        // if body is not empty throw an exception
        if (!elementURI.equals(this.getElementName().getURI())) {
          log.severe("SAAJ0158.impl.version.mismatch.fault");
          throw new SOAPExceptionImpl(
              "SOAP Version mismatch encountered when trying to add SOAPFault to SOAPBody");
        }
        Iterator it = this.getChildElements();
        if (it.hasNext()) {
          log.severe("SAAJ0156.impl.adding.fault.error");
          throw new SOAPExceptionImpl("Cannot add SOAPFault as a child of a non-Empty SOAPBody");
        }
      }
    }

    // preserve the encodingStyle attr as it may get lost in the import
    String encodingStyle = element.getEncodingStyle();

    ElementImpl importedElement = (ElementImpl) importElement(element);
    addNode(importedElement);

    if (encodingStyle != null) importedElement.setEncodingStyle(encodingStyle);

    return convertToSoapElement(importedElement);
  }
示例#2
0
  protected void addNode(org.w3c.dom.Node newElement) throws SOAPException {
    insertBefore(newElement, null);

    if (getOwnerDocument() instanceof DocumentFragment) return;

    if (newElement instanceof ElementImpl) {
      ElementImpl element = (ElementImpl) newElement;
      QName elementName = element.getElementQName();
      if (!"".equals(elementName.getNamespaceURI())) {
        element.ensureNamespaceIsDeclared(elementName.getPrefix(), elementName.getNamespaceURI());
      }
    }
  }
示例#3
0
 public void setParentElement(SOAPElement element) throws SOAPException {
   if (!(element instanceof SOAPBody)) {
     log.severe("SAAJ0101.impl.parent.of.body.elem.mustbe.body");
     throw new SOAPException("Parent of a SOAPBodyElement has to be a SOAPBody");
   }
   super.setParentElement(element);
 }
示例#4
0
  protected static SOAPElement replaceElementWithSOAPElement(Element element, ElementImpl copy) {

    Iterator eachAttribute = getAllAttributesFrom(element);
    while (eachAttribute.hasNext()) {
      Name name = (Name) eachAttribute.next();
      copy.addAttributeBare(name, getAttributeValueFrom(element, name));
    }

    Iterator eachChild = getChildElementsFrom(element);
    while (eachChild.hasNext()) {
      Node nextChild = (Node) eachChild.next();
      copy.insertBefore(nextChild, null);
    }

    Node parent = element.getParentNode();
    if (parent != null) {
      parent.replaceChild(copy, element);
    } // XXX else throw an exception?

    return copy;
  }