soapmessageimpl.java
来自「开源的axis2框架的源码。用于开发WEBSERVER」· Java 代码 · 共 482 行 · 第 1/2 页
JAVA
482 行
/*
* 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.OMOutputFormat;
import org.apache.axiom.soap.impl.dom.soap11.SOAP11Factory;
import org.apache.axiom.soap.impl.dom.soap12.SOAP12Factory;
import org.apache.axis2.transport.http.HTTPConstants;
import javax.xml.soap.AttachmentPart;
import javax.xml.soap.MimeHeader;
import javax.xml.soap.MimeHeaders;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPHeader;
import javax.xml.soap.SOAPMessage;
import javax.xml.soap.SOAPPart;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Map;
public class SOAPMessageImpl extends SOAPMessage {
private SOAPPart soapPart;
private Collection attachmentParts = new ArrayList();
private MimeHeadersEx mimeHeaders;
private Map props = new Hashtable();
private boolean saveRequired;
public SOAPMessageImpl(SOAPEnvelopeImpl soapEnvelope) {
String contentType = null;
if (mimeHeaders != null) {
String contentTypes[] = mimeHeaders.getHeader(HTTPConstants.CONTENT_TYPE);
contentType = (contentTypes != null) ? contentTypes[0] : null;
} else {
this.mimeHeaders = new MimeHeadersEx();
if (soapEnvelope.getOMFactory() instanceof SOAP11Factory) {
contentType = HTTPConstants.MEDIA_TYPE_TEXT_XML;
this.mimeHeaders.addHeader("content-type", contentType);
} else if (soapEnvelope.getOMFactory() instanceof SOAP12Factory) {
contentType = HTTPConstants.MEDIA_TYPE_APPLICATION_SOAP_XML;
this.mimeHeaders.addHeader("content-type", contentType);
}
}
setCharsetEncoding(contentType);
soapPart = new SOAPPartImpl(this, soapEnvelope);
}
public SOAPMessageImpl(InputStream inputstream, javax.xml.soap.MimeHeaders mimeHeaders)
throws SOAPException {
String contentType = null;
String tmpContentType = "";
if (mimeHeaders != null) {
String contentTypes[] = mimeHeaders.getHeader(HTTPConstants.CONTENT_TYPE);
if (contentTypes != null && contentTypes.length > 0) {
tmpContentType = contentTypes[0];
//tmpContentType can be like 'application/soap+xml; charset=UTF-8;'
//Only the first part is important
if (tmpContentType.indexOf(";") > -1) {
contentType = tmpContentType.substring(0, tmpContentType.indexOf(";"));
} else {
contentType = tmpContentType;
}
}
}
//Setting the whole content-type string to CharsetEncoding.
//Is this correct?
setCharsetEncoding(tmpContentType);
if (contentType != null) {
soapPart = new SOAPPartImpl(this, inputstream, mimeHeaders);
} else {
soapPart = new SOAPPartImpl(this, inputstream);
}
this.mimeHeaders = (mimeHeaders == null) ?
new MimeHeadersEx() :
new MimeHeadersEx(mimeHeaders);
}
/**
* Retrieves a description of this <CODE>SOAPMessage</CODE> object's content.
*
* @return a <CODE>String</CODE> describing the content of this message or <CODE>null</CODE> if
* no description has been set
* @see #setContentDescription(String) setContentDescription(java.lang.String)
*/
public String getContentDescription() {
String values[] = mimeHeaders.getHeader(HTTPConstants.HEADER_CONTENT_DESCRIPTION);
if (values != null && values.length > 0) {
return values[0];
}
return null;
}
/**
* Sets the description of this <CODE>SOAPMessage</CODE> object's content with the given
* description.
*
* @param description a <CODE>String</CODE> describing the content of this message
* @see #getContentDescription() getContentDescription()
*/
public void setContentDescription(String description) {
mimeHeaders.setHeader(HTTPConstants.HEADER_CONTENT_DESCRIPTION, description);
}
/**
* Gets the SOAP part of this <CODE>SOAPMessage</CODE> object.
* <p/>
* <p/>
* <P>If a <CODE>SOAPMessage</CODE> object contains one or more attachments, the SOAP Part must
* be the first MIME body part in the message.</P>
*
* @return the <CODE>SOAPPart</CODE> object for this <CODE> SOAPMessage</CODE> object
*/
public SOAPPart getSOAPPart() {
return soapPart;
}
/**
* Removes all <CODE>AttachmentPart</CODE> objects that have been added to this
* <CODE>SOAPMessage</CODE> object.
* <p/>
* <P>This method does not touch the SOAP part.</P>
*/
public void removeAllAttachments() {
attachmentParts.clear();
}
/**
* Gets a count of the number of attachments in this message. This count does not include the
* SOAP part.
*
* @return the number of <CODE>AttachmentPart</CODE> objects that are part of this
* <CODE>SOAPMessage</CODE> object
*/
public int countAttachments() {
return attachmentParts.size();
}
/**
* Retrieves all the <CODE>AttachmentPart</CODE> objects that are part of this
* <CODE>SOAPMessage</CODE> object.
*
* @return an iterator over all the attachments in this message
*/
public Iterator getAttachments() {
return attachmentParts.iterator();
}
/**
* Retrieves all the AttachmentPart objects that have header entries that match the specified
* headers. Note that a returned attachment could have headers in addition to those specified.
*
* @param headers a {@link javax.xml.soap.MimeHeaders} object containing the MIME headers for
* which to search
* @return an iterator over all attachments({@link javax.xml.soap.AttachmentPart}) that have a
* header that matches one of the given headers
*/
public Iterator getAttachments(javax.xml.soap.MimeHeaders headers) {
Collection matchingAttachmentParts = new ArrayList();
Iterator iterator = getAttachments();
{
AttachmentPartImpl part;
while (iterator.hasNext()) {
part = (AttachmentPartImpl)iterator.next();
if (part.matches(headers)) {
matchingAttachmentParts.add(part);
}
}
}
return matchingAttachmentParts.iterator();
}
/**
* Adds the given <CODE>AttachmentPart</CODE> object to this <CODE>SOAPMessage</CODE> object. An
* <CODE> AttachmentPart</CODE> object must be created before it can be added to a message.
*
* @param attachmentPart an <CODE> AttachmentPart</CODE> object that is to become part of this
* <CODE>SOAPMessage</CODE> object
* @throws IllegalArgumentException
*
*/
public void addAttachmentPart(AttachmentPart attachmentPart) {
if (attachmentPart != null) {
attachmentParts.add(attachmentPart);
mimeHeaders.setHeader(HTTPConstants.CONTENT_TYPE, "multipart/related");
}
}
/**
* Creates a new empty <CODE>AttachmentPart</CODE> object. Note that the method
* <CODE>addAttachmentPart</CODE> must be called with this new <CODE>AttachmentPart</CODE>
* object as the parameter in order for it to become an attachment to this
* <CODE>SOAPMessage</CODE> object.
*
* @return a new <CODE>AttachmentPart</CODE> object that can be populated and added to this
* <CODE>SOAPMessage</CODE> object
*/
public AttachmentPart createAttachmentPart() {
return new AttachmentPartImpl();
}
/**
* Returns all the transport-specific MIME headers for this <CODE>SOAPMessage</CODE> object in a
* transport-independent fashion.
*
* @return a <CODE>MimeHeaders</CODE> object containing the <CODE>MimeHeader</CODE> objects
*/
public javax.xml.soap.MimeHeaders getMimeHeaders() {
return mimeHeaders;
}
/**
* Updates this <CODE>SOAPMessage</CODE> object with all the changes that have been made to it.
* This method is called automatically when a message is sent or written to by the methods
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?