📄 message.java
字号:
if(mAttachments!=null) mAttachments.setRootPart(mSOAPPart); headers = (mimeHeaders == null) ? new MimeHeaders() : new MimeHeaders(mimeHeaders); } /** * Get this message's SOAPPart. * <p> * Eventually, this should be generalized beyond just SOAP, * but it's hard to know how to do that without necessitating * a lot of casts in client code. Refactoring keeps getting * easier anyhow. * * @return the soap part of this message */ public javax.xml.soap.SOAPPart getSOAPPart() { return mSOAPPart; } // fixme: do we realy need this? Can client code not just call // getSOAPPart().getAsString() or is there some future optimization that // could be hooked in here? /** * Get a string representation of this message's SOAPPart. * * @return the soap part of this message as a <code>String</code> * @throws org.apache.axis.AxisFault if the stringification failed */ public String getSOAPPartAsString() throws org.apache.axis.AxisFault { return mSOAPPart.getAsString(); } // fixme: do we realy need this? Can client code not just call // getSOAPPart().getAsBytes() or is there some future optimization that // could be hooked in here? /** * Get a byte array representation of this message's SOAPPart. * * @return the soap part of this message as a <code>byte[]</code> * @throws org.apache.axis.AxisFault if creating the byte[] failed */ public byte[] getSOAPPartAsBytes() throws org.apache.axis.AxisFault { return mSOAPPart.getAsBytes(); } /** * Get this message's SOAPPart as a SOAPEnvelope. * * @return a SOAPEnvelope containing this message's SOAPPart * @throws AxisFault if this failed */ public SOAPEnvelope getSOAPEnvelope() throws AxisFault { return mSOAPPart.getAsSOAPEnvelope(); } /** * Get the Attachments of this Message. * <p> * If this returns null, then NO ATTACHMENT SUPPORT EXISTS in this * configuration of Axis, and no attachment operations may be * performed. * * @return the <code>Attachments</code> if attachments are supported, null * otherwise */ public Attachments getAttachmentsImpl() { return mAttachments; } /** * Get the content type of the attachments. * * @param sc provides the default content type * @return a <code>String</code> giving the content type of the * attachment * @throws AxisFault if there was an error deducing the content type from * this message */ public String getContentType(SOAPConstants sc) throws AxisFault { boolean soap12 = false; if(sc != null) { if(sc == SOAPConstants.SOAP12_CONSTANTS) { soap12 = true; } } else { // Support of SOAP 1.2 HTTP binding SOAPEnvelope envelope = getSOAPEnvelope(); if (envelope != null) { if (envelope.getSOAPConstants() == SOAPConstants.SOAP12_CONSTANTS) { soap12 = true; } } } String encoding = XMLUtils.getEncoding(this, msgContext);; String ret = sc.getContentType() + "; charset=" + encoding.toLowerCase(); // Support of SOAP 1.2 HTTP binding if (soap12) { ret = HTTPConstants.HEADER_ACCEPT_APPL_SOAP +"; charset=" + encoding; } if (getSendType() != Attachments.SEND_TYPE_NONE && mAttachments != null && 0 != mAttachments.getAttachmentCount()) { ret = mAttachments.getContentType(); } return ret; } private int getSendType() { int sendType = Attachments.SEND_TYPE_NOTSET; if ((msgContext != null) && (msgContext.getService() != null)) { sendType = msgContext.getService().getSendType(); } return sendType; } //This will have to give way someday to HTTP Chunking but for now kludge. /** * Get the content length, including both soap and any attachments. * * @return the total length of this message in bytes * @throws org.apache.axis.AxisFault if there was a problem that prevented * the length being calculated */ public long getContentLength() throws org.apache.axis.AxisFault { long ret = mSOAPPart.getContentLength(); if (mAttachments != null && 0 < mAttachments.getAttachmentCount()) { ret = mAttachments.getContentLength(); } return ret; } /** * Writes this <CODE>SOAPMessage</CODE> object to the given * output stream. The externalization format is as defined by * the SOAP 1.1 with Attachments specification. * * <P>If there are no attachments, just an XML stream is * written out. For those messages that have attachments, * <CODE>writeTo</CODE> writes a MIME-encoded byte stream.</P> * @param os the <CODE>OutputStream</CODE> * object to which this <CODE>SOAPMessage</CODE> object will * be written * @throws SOAPException if there was a problem in * externalizing this SOAP message * @throws IOException if an I/O error * occurs */ public void writeTo(java.io.OutputStream os) throws SOAPException, IOException { //Do it the old fashion way. if (getSendType() == Attachments.SEND_TYPE_NONE || mAttachments == null || 0 == mAttachments.getAttachmentCount()) { try { String charEncoding = XMLUtils.getEncoding(this, msgContext);; mSOAPPart.setEncoding(charEncoding); mSOAPPart.writeTo(os); } catch (java.io.IOException e) { log.error(Messages.getMessage("javaIOException00"), e); } } else { try { mAttachments.writeContentToStream(os); } catch (java.lang.Exception e) { log.error(Messages.getMessage("exception00"), e); } } } private java.util.Hashtable mProps = new java.util.Hashtable(); public SOAPBody getSOAPBody() throws SOAPException { return mSOAPPart.getEnvelope().getBody(); } public SOAPHeader getSOAPHeader() throws SOAPException { return mSOAPPart.getEnvelope().getHeader(); } public void setProperty(String property, Object value) throws SOAPException { mProps.put(property, value); } public Object getProperty(String property) throws SOAPException { return mProps.get(property); } /** * 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(java.lang.String) setContentDescription(java.lang.String) */ public String getContentDescription() { String values[] = headers.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) { headers.setHeader(HTTPConstants.HEADER_CONTENT_DESCRIPTION, description); } /** * 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 <CODE>ProviderConnection.send</CODE>, <CODE> * SOAPConnection.call</CODE>, or <CODE> * SOAPMessage.writeTo</CODE>. However, if changes are made to * a message that was received or to one that has already been * sent, the method <CODE>saveChanges</CODE> needs to be * called explicitly in order to save the changes. The method * <CODE>saveChanges</CODE> also generates any changes that * can be read back (for example, a MessageId in profiles that * support a message id). All MIME headers in a message that * is created for sending purposes are guaranteed to have * valid values only after <CODE>saveChanges</CODE> has been * called. * * <P>In addition, this method marks the point at which the * data from all constituent <CODE>AttachmentPart</CODE> * objects are pulled into the message.</P> * @throws SOAPException if there * was a problem saving changes to this message. */ public void saveChanges() throws SOAPException { headers.removeHeader("Content-Length"); if (mAttachments != null && 0 < mAttachments.getAttachmentCount()) { try { headers.setHeader("Content-Type",mAttachments.getContentType()); } catch (AxisFault af){ log.error(Messages.getMessage("exception00"), af); } } saveRequired = false; try { /* Fix for Bug 16418 - Start from scratch */ mSOAPPart.saveChanges(); } catch (AxisFault axisFault) { log.error(Messages.getMessage("exception00"), axisFault); } } /** * Indicates whether this <CODE>SOAPMessage</CODE> object * has had the method <CODE>saveChanges</CODE> called on * it. * @return <CODE>true</CODE> if <CODE>saveChanges</CODE> has * been called on this message at least once; <CODE> * false</CODE> otherwise. */ public boolean saveRequired() { return saveRequired; } /** * 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 headers; } /** * Removes all <CODE>AttachmentPart</CODE> objects that have * been added to this <CODE>SOAPMessage</CODE> object. * * <P>This method does not touch the SOAP part.</P> */ public void removeAllAttachments(){ mAttachments.removeAllAttachments(); } /** * 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 mAttachments == null ? 0 : mAttachments.getAttachmentCount(); } /** * 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(){ try { if (mAttachments != null && 0 != mAttachments.getAttachmentCount()) { return mAttachments.getAttachments().iterator(); } } catch (AxisFault af){ log.error(Messages.getMessage("exception00"), af); } return Collections.EMPTY_LIST.iterator(); } /** * Retrieves all the <CODE>AttachmentPart</CODE> 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 <CODE>MimeHeaders</CODE> * object containing the MIME headers for which to * search * @return an iterator over all attachments that have a header * that matches one of the given headers */ public Iterator getAttachments(javax.xml.soap.MimeHeaders headers){ return mAttachments.getAttachments(headers); } /** * 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 java.lang.IllegalArgumentException */ public void addAttachmentPart(AttachmentPart attachmentpart){ try { mAttachments.addAttachmentPart((org.apache.axis.Part)attachmentpart); } catch (AxisFault af){ log.error(Messages.getMessage("exception00"), af); } } /** * 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() { if (!isAttachmentSupportEnabled(getMessageContext())) { throw new RuntimeException(Messages.getMessage("noAttachments")); } try { return (AttachmentPart) mAttachments.createAttachmentPart(); } catch (AxisFault af){ log.error(Messages.getMessage("exception00"), af); } return null; } /** * Dispose of attachments. */ public void dispose() { if(mAttachments!=null) { mAttachments.dispose(); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -