104 lines
3.6 KiB
Java
104 lines
3.6 KiB
Java
|
SaajUtils
|
||
|
|
||
|
|
||
|
|
||
|
package com.ack.webservices.saaj;
|
||
|
|
||
|
import java.io.ByteArrayInputStream;
|
||
|
import java.net.MalformedURLException;
|
||
|
import java.net.URL;
|
||
|
import java.util.Enumeration;
|
||
|
import java.util.Iterator;
|
||
|
import java.util.StringTokenizer;
|
||
|
import javax.activation.DataHandler;
|
||
|
import javax.servlet.http.HttpServletRequest;
|
||
|
import javax.servlet.http.HttpServletResponse;
|
||
|
import javax.xml.soap.AttachmentPart;
|
||
|
import javax.xml.soap.MimeHeader;
|
||
|
import javax.xml.soap.MimeHeaders;
|
||
|
import javax.xml.soap.SOAPException;
|
||
|
import javax.xml.soap.SOAPMessage;
|
||
|
|
||
|
public class SaajUtils {
|
||
|
|
||
|
/**
|
||
|
* extract the MIME header information from within the HTTP Request
|
||
|
* @param req the http request
|
||
|
* @return MimeHeaders as defined within the SAAJ API
|
||
|
*/
|
||
|
public static MimeHeaders getHeaders( HttpServletRequest req ) {
|
||
|
Enumeration enum = req.getHeaderNames();
|
||
|
MimeHeaders headers = new MimeHeaders();
|
||
|
|
||
|
while( enum.hasMoreElements() ) {
|
||
|
String headerName = (String) enum.nextElement();
|
||
|
String headerValue = req.getHeader( headerName );
|
||
|
|
||
|
StringTokenizer values = new StringTokenizer( headerValue, "," );
|
||
|
while( values.hasMoreTokens() ) {
|
||
|
headers.addHeader( headerName, values.nextToken().trim() );
|
||
|
}
|
||
|
}
|
||
|
return headers;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* stuff the MIME headers into the HTTP response
|
||
|
* @param headers the SAAJ MIME headers
|
||
|
* @param res the Http servlet response
|
||
|
*/
|
||
|
public static void putHeaders( MimeHeaders headers, HttpServletResponse res ) {
|
||
|
for( Iterator it = headers.getAllHeaders(); it.hasNext(); ) {
|
||
|
MimeHeader header = (MimeHeader) it.next();
|
||
|
String[] values = headers.getHeader( header.getName() );
|
||
|
if( values.length == 1 ) {
|
||
|
res.setHeader( header.getName(), header.getValue() );
|
||
|
}
|
||
|
else {
|
||
|
StringBuffer concat = new StringBuffer();
|
||
|
for( int i = 0; i < values.length; i++ ) {
|
||
|
if( i != 0 ) {
|
||
|
concat.append( ',' );
|
||
|
}
|
||
|
concat.append( values[i] );
|
||
|
}
|
||
|
res.setHeader( header.getName(), concat.toString() );
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public static void attachBytes( SOAPMessage soapMessage, byte[] theBytes, String contentType )
|
||
|
throws SOAPException {
|
||
|
AttachmentPart attachment = soapMessage.createAttachmentPart();
|
||
|
attachment.setContent( new ByteArrayInputStream( theBytes ), contentType );
|
||
|
soapMessage.addAttachmentPart( attachment );
|
||
|
}
|
||
|
|
||
|
public static void attachUrlContents( SOAPMessage soapMessage, String urlLocation, String contentType )
|
||
|
throws SOAPException, MalformedURLException {
|
||
|
URL url = new URL( urlLocation );
|
||
|
AttachmentPart attachment = soapMessage.createAttachmentPart( new DataHandler( url ) );
|
||
|
attachment.setContentType( contentType );
|
||
|
soapMessage.addAttachmentPart( attachment );
|
||
|
}
|
||
|
|
||
|
public static String getAttachmentReport( SOAPMessage soapMessage ) throws SOAPException {
|
||
|
int numOfAttachments = soapMessage.countAttachments();
|
||
|
Iterator attachments = soapMessage.getAttachments();
|
||
|
|
||
|
StringBuffer buf = new StringBuffer( "Number of attachments: " );
|
||
|
buf.append( numOfAttachments );
|
||
|
|
||
|
while( attachments.hasNext() ) {
|
||
|
buf.append( "\n--------------------------------------------\n" );
|
||
|
AttachmentPart attachment = (AttachmentPart) attachments.next();
|
||
|
buf.append( "\nContent Location: " + attachment.getContentLocation() );
|
||
|
buf.append( "\nContent Id: " + attachment.getContentId() );
|
||
|
buf.append( "\nContent Size: " + attachment.getSize() );
|
||
|
buf.append( "\nContent Type: " + attachment.getContentType() );
|
||
|
}
|
||
|
|
||
|
return buf.toString();
|
||
|
}
|
||
|
}
|