Phil,

Please open a bug report, so that we can track down and fix this problem.
(http://ws.apache.org/axis/bugs.html)

-- dims

--- [EMAIL PROTECTED] wrote:
> Hi,
> 
> I've been able to return strings in SOAP attachments, but I haven't been successful 
> returning a
> byte array.  I wrote in previously about this problem because I was getting error 
> messages such
> as "javax.activation.UnsupportedDataTypeException: no object DCH for MIME type
> application/octet-stream".  It was suggested that I try running with the latest 
> build from CVS
> because Axis release 1.1 had a problem with byte arrays in attachments.  So I'm 
> running with the
> July 9 build.  With this build, I no longer get the UnsupportedDataTypeException 
> errors, but now
> I get no attachment in the response message.
> 
> Here's the simple example I used to get a string returned in an attachment.  Then a 
> few small
> changes to return a byte array.  I would appreciate it if someone could detect where 
> I'm going
> wrong with this approach.
> 
> Thanks!
> 
> . . . Phil
> 
> 
> ******
> ****** Client code ******
> ******
> 
> package us.pooch.soaptest.attachments;
> 
> import org.apache.axis.AxisFault;
> import org.apache.axis.client.Call;
> import org.apache.axis.client.Service;
> import org.apache.axis.encoding.XMLType;
> import org.apache.axis.encoding.ser.JAFDataHandlerDeserializerFactory;
> import org.apache.axis.encoding.ser.JAFDataHandlerSerializerFactory;
> import org.apache.axis.transport.http.HTTPConstants;
> import org.apache.axis.utils.Options;
> 
> import javax.activation.DataHandler;
> import javax.activation.FileDataSource;
> import javax.xml.namespace.QName;
> import javax.xml.rpc.ParameterMode;
> import javax.xml.soap.AttachmentPart;
> import javax.xml.soap.MessageFactory;
> import javax.xml.soap.SOAPBody;
> import javax.xml.soap.SOAPBodyElement;
> import javax.xml.soap.SOAPConnection;
> import javax.xml.soap.SOAPConnectionFactory;
> import javax.xml.soap.SOAPEnvelope;
> import javax.xml.soap.SOAPMessage;
> import javax.xml.soap.SOAPPart;
> import java.io.File;
> import java.net.URL;
> import java.util.Hashtable;
> import java.util.Iterator;
> import java.util.ListIterator;
> import java.util.Vector;
> 
> public class SOAPAttachmentMimeTypeDemoClient {
> 
>       public static void main(String args[]) {
>               try {
> 
>                       SOAPAttachmentMimeTypeDemoClient demoClient =
>                               new SOAPAttachmentMimeTypeDemoClient();
> 
>                       demoClient.demoGetString();
>                       demoClient.demoGetBytes();
>               } catch (Exception e) {
>                       System.err.println(e);
>                       e.printStackTrace();
>               }
>               System.exit(18);
>       }
> 
>       protected DataHandler runDemo(String functionName) throws Exception {
>               String endPointURLString =
>               
>
"http://localhost:8080/SOAPAttachmentMimeTypeDemoProjectWeb/services/SOAPAttachmentMimeTypeDemoService";;
> 
>               SOAPConnectionFactory soapConnectionFactory =
>                       javax.xml.soap.SOAPConnectionFactory.newInstance();
>               SOAPConnection soapConnection =
>                       soapConnectionFactory.createConnection();
> 
>               MessageFactory messageFactory = MessageFactory.newInstance();
>               SOAPMessage soapMessage = messageFactory.createMessage();
>               SOAPPart soapPart = soapMessage.getSOAPPart();
>               SOAPEnvelope requestEnvelope = soapPart.getEnvelope();
>               SOAPBody body = requestEnvelope.getBody();
>               SOAPBodyElement operation =
>                       body.addBodyElement(requestEnvelope.createName(functionName));
>               javax.xml.soap.SOAPMessage returnedSOAPMessage =
>                       soapConnection.call(soapMessage, endPointURLString);
>               Iterator iterator = returnedSOAPMessage.getAttachments();
>               if (!iterator.hasNext()) {
>                       //The wrong type of object that what was expected.
>                       System.out.println("Received problem response from server");
>                       throw new AxisFault(
>                               "",
>                               "Received problem response from server",
>                               null,
>                               null);
> 
>               }
> 
>               return  (DataHandler) ((AttachmentPart) 
> iterator.next()).getDataHandler();
>       }
> 
>       public void demoGetString() throws Exception {
> 
>               DataHandler rdh = runDemo("getString");
>               String returnedData = (String) rdh.getContent();
> 
>               if (!returnedData.equals("You got me!")) {
>                       System.err.println("Did not get the expected string.");
>                       throw new AxisFault("", "Did not get the expected string.", 
> null, null);
>               }
> 
>               System.out.println("getString() succeeded");
>       }
> 
>       public void demoGetBytes() throws Exception {
> 
>               DataHandler rdh = runDemo("getBytes");
>               byte[] returnedData = (byte[]) rdh.getContent();
>         byte[] expectedArray = new byte[] { 01, 02, 03, 04 };
> 
>               if (!returnedData.equals(expectedArray)) {
>                       System.err.println("Did not get the expected byte[].");
>                       throw new AxisFault("", "Did not get the expected byte[].", 
> null, null);
>               }
> 
>               System.out.println("getBytes() succeeded");
>       }
> }
> 
> 
> ******
> ****** Service code ******
> ******
> 
> package us.pooch.soaptest.attachments;
> 
> import javax.activation.DataHandler;
> 
> public class SOAPAttachmentMimeTypeDemoService {
> 
>     public DataHandler getString() {
>         
>         return new DataHandler("You got me!", "text/plain");
>     }
> 
>     public DataHandler getBytes() {
>         
>         byte[] arrayToReturn = new byte[] { 01, 02, 03, 04 };
>         return new DataHandler(arrayToReturn, "application/octet-stream");
>     }
> }
> 
> 
> ******
> ****** WSDD
> ******
> <deployment xmlns="http://xml.apache.org/axis/wsdd/";
> xmlns:java="http://xml.apache.org/axis/wsdd/providers/java";
> xmlns:ns1="SOAPAttachmentMimeTypeDemoService" >
>   <service name="SOAPAttachmentMimeTypeDemoService" provider="java:RPC" >
>     <parameter name="className"
> value="us.pooch.soaptest.attachments.SOAPAttachmentMimeTypeDemoService"/>
>     <parameter name="allowedMethods" value="getString getBytes"/>
>     <operation name="getString" returnQName="returnqname" 
> returnType="ns1:DataHandler" />
>     <operation name="getBytes" returnQName="returnqname" 
> returnType="ns1:DataHandler" />
> 
>  <typeMapping 
> deserializer="org.apache.axis.encoding.ser.JAFDataHandlerDeserializerFactory"
>    languageSpecificType="java:javax.activation.DataHandler" qname="ns1:DataHandler"
>     serializer="org.apache.axis.encoding.ser.JAFDataHandlerSerializerFactory" 
>     encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";
>      />
>   </service>
> 
> </deployment>
> 


=====
Davanum Srinivas - http://webservices.apache.org/~dims/

__________________________________
Do you Yahoo!?
SBC Yahoo! DSL - Now only $29.95 per month!
http://sbc.yahoo.com

Reply via email to