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