views:

206

answers:

2

I am maintaining an application that has classes (written in 2005) that extend javax.xml.messaging.JAXMServlet. While upgrading to a new app server that implements the latest J2EE standards, I discovered that JAXMServlet was removed in JWSDP 2.0 (Java Web Services Developer Pack), according to this question (and apparently JWSDP itself has been deprecated too). The code it relies on has not significantly changed since it was written, and is part of a large-ish existing production system where this code is already tested and debugged, so I am reluctant to rewrite the classes from scratch due to the regression testing impact.

Is there an 'easy' substitution for this class? Although Google has a lot of examples of using this code (dated from around 2003-2004), it is surprisingly mute about replacing it. Thanks.

+1  A: 

Why replace it? Why not find the relevant libraries and use them?

http://java.sun.com/webservices/downloads/previous/webservicespack.jsp

Will Hartung
A: 

To answer my own question, found some replacement code at http://www.java.happycodings.com/Java%5fUtil%5fPackage/code23.html:

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<String> en = req.getHeaderNames();
      MimeHeaders headers = new MimeHeaders();

      while( en.hasMoreElements() ) {
        String headerName = (String) en.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<MimeHeader> it = headers.getAllHeaders(); it.hasNext(); ) {
          MimeHeader header = 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<AttachmentPart> attachments = soapMessage.getAttachments();

      StringBuffer buf = new StringBuffer( "Number of attachments: " );
      buf.append( numOfAttachments );

      while( attachments.hasNext() ) {
        buf.append( "\n--------------------------------------------\n" );
        AttachmentPart attachment = 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();
    }
}
Ed Griebel