Uploaded image for project: 'Axis'
  1. Axis
  2. AXIS-1609

No option available to map all MIME type to javax.activation.DataHandler as required by JAX-RPC 1.1 specification.

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Open
    • Major
    • Resolution: Unresolved
    • 1.2 Beta
    • None
    • WSDL processing
    • None
    • Axis 09/23/2004

    Description

      My use case is to use SwA and doing streaming from end to end. The type of attachment is not known. So as suggested by many documents I use the mime type: "application/octet-stream". Wsdl2Java utility use org.apache.axis.attachments.OctetStream to represent the data. It's a class specific to Axis which is one of my concern.

      Take a look a the class:
      public class OctetStream {
      private byte[] bytes = null;

      public OctetStream() {
      }

      public OctetStream(byte[] bytes)

      { this.bytes = bytes; }

      public byte[] getBytes() { return this.bytes; }

      public void setBytes(byte[] bytes) { this.bytes = bytes; }

      }

      It doesn't support streaming! It's probably the reason why people will use attachment instead of the most compatible way: "xsd:base64Binary".

      As a third issues:

      The JAX-RPC 1.1 specification said:

      7.5 Mapping between MIME types and Java types
      The following table specifies the standard Java mapping for a subset of the MIME types.
      The Java to WSDL/XML and WSDL/XML to Java mapping for the MIME types is
      required to conform to the above mapping. This mapping is reflected in the mapped Java
      method signatures and WSDL description. A WSDL/XML to Java mapping tool is
      required to provide an option to map the above set of MIME types to the
      javax.activation.DataHandler class. The DataHandler class provides methods to
      get access to the stream representation of the data for a MIME type.
      A Java to WSDL mapping tool is required to provide a facility for specifying metadata
      related to the above mapping between Java and MIME types. This metadata identifies
      whether a Java type is mapped to a MIME type (using the WSDL MIME binding) or is
      mapped to an XML schema type (based on the section 4.2, "XML to Java Type
      Mapping"). For example, a java.lang.String can be mapped to either an xsd:string
      or MIME type text/plain. The mapping metadata identifies a specific mapping.
      If a MIME type is mapped to the javax.activation.DataHandler, the getContent
      method of the DataHandler class must return instance of the corresponding Java type
      for a specific MIME content type.
      A JAX-RPC implementation is required to support the above MIME types (as specified
      in the TABLE 7-1) and provide implementation of the required
      javax.activation.DataContentHandler classes.
      ...
      A JAX-RPC implementation is not required to support MIME types beyond that
      specified in the above table. These additional MIME types may be mapped and
      supported using the javax.activation.DataHandler class and Java Activation
      Framework.
      TABLE 7-1 Mapping of MIME Types
      MIME Type Java Type
      image/gif java.awt.Image
      image/jpeg java.awt.Image
      text/plain java.lang.String
      multipart/* javax.mail.internet.MimeMultipart
      text/xml or application/xml javax.xml.transform.Source

      Here the approch of another stack:

      From: https://jax-rpc.dev.java.net/whitepaper/1.1.2/attachments-howto.html

      JAXRPC specification uses the JavaBeans Activation Framework to support various MIME content types. The DataHandler class provides a consistent interface to the data represented in various MIME types. A DataHandler class uses the DataContentHandler interface to convert between a stream and specific Java object based on the MIME type. JAXRPC uses SAAJ, which provides DataContentHandlers for the MIME types supported by JAXRPC. If the MIME type is not one of the JAXRPC supported MIME types, then the user has to register corresponding DataContentHandlers. Here "text/plain" and "text/xml" are both JAXRPC supported MIME types and is taken care of automatically. A DataHandler can be instantiated using the constructor DataHandler(Object obj, String mime_type). The method DataHandler.getContentType returns the MIME type of the encapsulatd data and DataHandler.getContent method retruns a Java object based on the MIME type of the encapsulated data. If you do not want the MIME types to map to coresponding Java types, you can use wscompile with -datahandleronly option to map all MIME types to DataHandler.

      Attachments

        1. AXIS-1609-simpler-diff.txt
          10 kB
          sebastien tardif
        2. diff.txt
          11 kB
          Sébastien Tardif
        3. docHarbor.wsdl
          15 kB
          sebastien tardif

        Activity

          People

            Unassigned Unassigned
            stardif Sébastien Tardif
            Votes:
            1 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated: