soapelementimpl.java
来自「开源的axis2框架的源码。用于开发WEBSERVER」· Java 代码 · 共 852 行 · 第 1/3 页
JAVA
852 行
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF 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
*
* 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.
*/
package org.apache.axis2.saaj;
import org.apache.axiom.om.OMAttribute;
import org.apache.axiom.om.OMContainer;
import org.apache.axiom.om.OMException;
import org.apache.axiom.om.OMNamespace;
import org.apache.axiom.om.OMNode;
import org.apache.axiom.om.impl.OMNamespaceImpl;
import org.apache.axiom.om.impl.dom.DocumentImpl;
import org.apache.axiom.om.impl.dom.ElementImpl;
import org.apache.axiom.om.impl.dom.NodeImpl;
import org.apache.axiom.om.impl.dom.TextImpl;
import org.apache.axiom.soap.SOAP11Constants;
import org.apache.axiom.soap.SOAP12Constants;
import org.apache.axiom.soap.impl.dom.soap11.SOAP11Factory;
import org.apache.axiom.soap.impl.dom.soap12.SOAP12Factory;
import org.w3c.dom.Attr;
import org.w3c.dom.DOMException;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.Text;
import javax.xml.namespace.QName;
import javax.xml.soap.Detail;
import javax.xml.soap.Name;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPConstants;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPFault;
import javax.xml.soap.SOAPFaultElement;
import javax.xml.soap.SOAPHeader;
import javax.xml.stream.XMLStreamException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class SOAPElementImpl extends NodeImplEx implements SOAPElement {
/**
* Using a delegate because we can't extend from org.apache.axiom.om.impl.dom.ElementImpl since
* this class must extend SNodeImpl
*/
protected ElementImpl element;
private String encodingStyle;
public SOAPElementImpl(ElementImpl element) {
super(element.getOMFactory());
this.element = element;
}
/* (non-Javadoc)
* @see org.apache.axiom.om.OMNode#discard()
*/
public void discard() throws OMException {
element.discard();
}
/* (non-Javadoc)
*/
public void internalSerialize(javax.xml.stream.XMLStreamWriter writer)
throws XMLStreamException {
element.internalSerialize(writer);
}
/* (non-Javadoc)
* @see org.apache.axiom.om.OMNode#serializeAndConsume(org.apache.axiom.om.impl.OMOutputImpl)
*/
public void internalSerializeAndConsume(javax.xml.stream.XMLStreamWriter writer)
throws XMLStreamException {
element.internalSerializeAndConsume(writer);
}
/**
* Adds an attribute with the specified name and value to this <code>SOAPElement</code> object.
* <p/>
*
* @param name a <code>Name</code> object with the name of the attribute
* @param value a <code>String</code> giving the value of the attribute
* @return the <code>SOAPElement</code> object into which the attribute was inserted
* @throws SOAPException if there is an error in creating the Attribute
*/
public SOAPElement addAttribute(Name name, String value) throws SOAPException {
if (name.getURI() == null || name.getURI().trim().length() == 0) {
element.setAttribute(name.getLocalName(), value);
} else {
element.setAttributeNS(name.getURI(), name.getPrefix() + ":" + name.getLocalName(),
value);
}
return this;
}
/* (non-Javadoc)
* @see javax.xml.soap.SOAPElement#addChildElement(javax.xml.soap.Name)
*/
public SOAPElement addChildElement(Name name) throws SOAPException {
String prefix = name.getPrefix();
return addChildElement(name.getLocalName(), "".equals(prefix) ? null : prefix,
name.getURI());
}
/* (non-Javadoc)
* @see javax.xml.soap.SOAPElement#addChildElement(javax.xml.soap.SOAPElement)
*/
public SOAPElement addChildElement(SOAPElement soapElement) throws SOAPException {
String namespaceURI = soapElement.getNamespaceURI();
String prefix = soapElement.getPrefix();
String localName = soapElement.getLocalName();
SOAPElementImpl childEle;
if (namespaceURI == null || namespaceURI.trim().length() == 0) {
childEle = new SOAPElementImpl((ElementImpl)getOwnerDocument().createElement(localName));
} else {
element.declareNamespace(namespaceURI, prefix);
childEle =
new SOAPElementImpl((ElementImpl)getOwnerDocument().createElementNS(namespaceURI,
localName));
}
for (Iterator iter = soapElement.getAllAttributes(); iter.hasNext();) {
Name name = (Name)iter.next();
childEle.addAttribute(name, soapElement.getAttributeValue(name));
}
for (Iterator iter = soapElement.getChildElements(); iter.hasNext();) {
Object o = iter.next();
if (o instanceof Text) {
childEle.addTextNode(((Text)o).getData());
} else {
childEle.addChildElement((SOAPElement)o);
}
}
childEle.element.setUserData(SAAJ_NODE, childEle, null);
if (namespaceURI != null && namespaceURI.trim().length() > 0) {
childEle.element.setNamespace(childEle.element.declareNamespace(namespaceURI, prefix));
}
element.appendChild(childEle.element);
((NodeImpl)childEle.element.getParentNode()).setUserData(SAAJ_NODE, this, null);
childEle.setParentElement(this);
return childEle;
}
public String getLocalName() {
return element.getLocalName();
}
public String getNamespaceURI() {
return element.getNamespaceURI();
}
/*
* Overidden in ElementImpl and AttrImpl.
*/
public String getPrefix() {
return element.getPrefix();
}
/* (non-Javadoc)
* @see javax.xml.soap.SOAPElement#addChildElement(java.lang.String, java.lang.String, java.lang.String)
*/
public SOAPElement addChildElement(String localName, String prefix, String uri)
throws SOAPException {
OMNamespace omNamespace = element.declareNamespace(uri, prefix);
return addChildElement(localName, omNamespace.getPrefix());
}
/* (non-Javadoc)
* @see javax.xml.soap.SOAPElement#addChildElement(java.lang.String, java.lang.String)
*/
public SOAPElement addChildElement(String localName, String prefix) throws SOAPException {
String namespaceURI = getNamespaceURI(prefix);
if (namespaceURI == null) {
throw new SOAPException("Namespace not declared for the give prefix: " + prefix);
}
SOAPElementImpl childEle =
new SOAPElementImpl((ElementImpl)getOwnerDocument().
createElementNS(namespaceURI, prefix + ":" + localName));
childEle.element.setUserData(SAAJ_NODE, childEle, null);
childEle.element.setNamespace(childEle.element.declareNamespace(namespaceURI, prefix));
element.appendChild(childEle.element);
((NodeImpl)childEle.element.getParentNode()).setUserData(SAAJ_NODE, this, null);
childEle.setParentElement(this);
return childEle;
}
/* (non-Javadoc)
* @see javax.xml.soap.SOAPElement#addChildElement(java.lang.String)
*/
public SOAPElement addChildElement(String localName) throws SOAPException {
SOAPElementImpl childEle =
new SOAPElementImpl((ElementImpl)getOwnerDocument().createElement(localName));
childEle.element.setUserData(SAAJ_NODE, childEle, null);
element.appendChild(childEle.element);
((NodeImpl)childEle.element.getParentNode()).setUserData(SAAJ_NODE, this, null);
childEle.setParentElement(this);
return childEle;
}
/* (non-Javadoc)
* @see javax.xml.soap.SOAPElement#addNamespaceDeclaration(java.lang.String, java.lang.String)
*/
public SOAPElement addNamespaceDeclaration(String prefix, String uri) throws SOAPException {
element.declareNamespace(uri, prefix);
return this;
}
/**
* Creates a new <code>Text</code> object initialized with the given <code>String</code> and
* adds it to this <code>SOAPElement</code> object.
*
* @param text a <code>String</code> object with the textual content to be added
* @return the <code>SOAPElement</code> object into which the new <code>Text</code> object was
* inserted
* @throws SOAPException if there is an error in creating the new <code>Text</code> object
*/
public SOAPElement addTextNode(String text) throws SOAPException {
//OmElement.setText() will remove all the other text nodes that it contains
//Therefore create a text node and add it
//TODO: May need to address the situation where the prev sibling of the textnode itself is a textnode
Text textNode = getOwnerDocument().createTextNode(text);
NodeImpl node = ((NodeImpl)element.appendChild(textNode));
TextImplEx saajTextNode = new TextImplEx(text, this);
node.setUserData(SAAJ_NODE, saajTextNode, null);
return this;
}
/**
* Returns an iterator over all of the attribute names in this <CODE>SOAPElement</CODE> object.
* The iterator can be used to get the attribute names, which can then be passed to the method
* <CODE>getAttributeValue</CODE> to retrieve the value of each attribute.
*
* @return an iterator over the names of the attributes
*/
public Iterator getAllAttributes() {
final Iterator attribIter = element.getAllAttributes();
Collection attribName = new ArrayList();
Attr attr;
while (attribIter.hasNext()) {
attr = (Attr)attribIter.next();
PrefixedQName qname;
if (attr.getNamespaceURI() == null || attr.getNamespaceURI().trim().length() == 0) {
qname = new PrefixedQName(attr.getNamespaceURI(),
attr.getName(),
attr.getPrefix());
} else {
qname = new PrefixedQName(attr.getNamespaceURI(),
attr.getLocalName(),
attr.getPrefix());
}
attribName.add(qname);
}
return attribName.iterator();
}
/* (non-Javadoc)
* @see javax.xml.soap.SOAPElement#getAttributeValue(javax.xml.soap.Name)
*/
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?