Have you tried sending your binary data as atrtachments? As I understand, the way you 
are doing it, the binary data is encoded as a part of the SOPA message which causes 
problems when large binary data is invloved. Here is whatI did on my service side to 
put the attachements in the response -

      org.apache.axis.MessageContext messageContext =  
org.apache.axis.MessageContext.getCurrentContext();
      org.apache.axis.Message responseMessage = messageContext.getResponseMessage();
      responseMessage.addAttachmentPart(new AttachmentPart(dh));
      responseMessage.addAttachmentPart(new AttachmentPart(dh1));

Here is what I did on my client side to receive the attachments -

          String returnValue = (String) call.invoke(array);
          System.out.println("The return value is -> "+returnValue);
          org.apache.axis.MessageContext messageContext = call.getMessageContext();
          org.apache.axis.Message returnedMessage =  
messageContext.getResponseMessage();
          System.out.println("Number of attachments is -> 
"+returnedMessage.countAttachments());
          returnedMessage.getAttachments()

Hope this helps.

Thanks
Srinivas




-----Original Message-----
From: William Barber [mailto:[EMAIL PROTECTED] 
Sent: Wednesday, November 05, 2003 1:25 PM
To: [EMAIL PROTECTED]
Subject: Sending Array of DataHandlers to SOAP Service ??


Hi All,

I'm having trouble getting the WSDD stanzas correct to send
an ARRAY of DataHandlers (DataHandler[]) to an Axis service.

I have been successfully using the SAAJ (SOAPConnection) API
to send/receive SINGLE attachments as DataHandlers for some time now. (working WSDD 
shown below)

I create a SOAPConnectionn, SOAPMessage, etc., populate
the SOAPMessage, and call

   soapConnection.call(soapMessage, mEndPointURLString);

The service method signature is:

public DataHandler convert(DataHandler dh,
                          String host,
                          String port,
                          String user )
                          throws IOException {

This all works fine to send a SINGLE attachment parameter,
with the wsdd line of:

   <parameter name="dh" type="ns1:DataHandler"/> (highlighted below)

for the DataHandler parameter.

The only relevant difference (besides different method and parameter names) with my 
new client/service is that I'm packing 6 attachments into the request msg instead of 
1. The other parameters are still just Strings.

For this one, the service signature takes an array of DataHandlers:

public DataHandler submit(DataHandler[] dh,
                          String host,
                          String port,
                          String user )
                          throws IOException {

I see various WSDD examples on the internet for array types, some with special 
<typeMapping> stanzas for the array (eg. ArrayOfString)

Obviously I'm missing something here re: SOAP array handling for special types such as 
DataHandler[].

Can someone take a look at the wsdd at the end of this email and tell me if you see 
something obviously wrong and how to fix it?

Any help would be appreciated.
Thanks! Bill

----------------------------------------------------------
Working single-attachment wsdd file:
------------------------------------

<deployment xmlns="http://xml.apache.org/axis/wsdd/";
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java";
xmlns:ns1="urn:OpenBabelConverter" >
  <service name="urn:OpenBabelConverter" provider="java:RPC">
    <requestFlow>
      <handler type="soapmonitor"/>
    </requestFlow>
    <responseFlow>
      <handler type="soapmonitor"/>
    </responseFlow>
    <parameter name="className" value="OpenBabelConverter"/>
    <parameter name="allowedMethods" value="convert"/>

    <operation name="convert" returnQName="returnqname" returnType="ns1:DataHandler">
        <parameter name="dh" type="ns1:DataHandler"/>
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        <parameter name="inputType" type="xsd:string"/>
        <parameter name="outputType" type="xsd:string"/>
        <parameter name="optionalInfo" type="xsd:string"/>
    </operation>

    <typeMapping
      qname="ns1:String"
      languageSpecificType="java:java.lang.String"
      serializer="org.apache.axis.encoding.ser.SimpleSerializerFactory"
      deserializer="org.apache.axis.encoding.ser.SimpleDeserializerFactory"
      encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";
    />

    <typeMapping
      qname="ns1:DataHandler"
      languageSpecificType="java:javax.activation.DataHandler"
      serializer="org.apache.axis.encoding.ser.JAFDataHandlerSerializerFactory"

deserializer="org.apache.axis.encoding.ser.JAFDataHandlerDeserializerFactory"
      encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";
    />

  </service>

</deployment>
----------------------------------------------------------
Working single-attachment request msg:
--------------------------------------

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";
xmlns:xsd="http://www.w3.org/2001/XMLSchema";
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
<soapenv:Body>
<convert xmlns="">
<source href="cid:820536EEF82AD266E196CAAC90582347"/>
<inputType>mol2</inputType>
<outputType>pov</outputType>
<optionalInfo>d x2</optionalInfo>
</convert>
</soapenv:Body>
</soapenv:Envelope>

----------------------------------------------------------
And the working single-attachment response msg:
-----------------------------------------------

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";
xmlns:xsd="http://www.w3.org/2001/XMLSchema";
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
 <soapenv:Body>
  <convertResponse soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";>
   <returnqname href="cid:4DCBA1D13196BD1A92746826534370F9";
xmlns:ns1="urn:OpenBabelConverter"/>
  </convertResponse>
 </soapenv:Body>
</soapenv:Envelope>

---------------------------------------------------------
NON-working multiple-attachment request msg: (from SOAPMonitor)
--------------------------------------------

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";
xmlns:xsd="http://www.w3.org/2001/XMLSchema";
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
 <soapenv:Body>
  <submit xmlns="">
   <source href="cid:753AD2AD7AF12659A4EF712062409F9A"/>
   <source href="cid:E37E6B289947DB4EA29C34176964D48C"/>
   <source href="cid:EE2E038F7FBCD68A106D26FC670BDA2C"/>
   <source href="cid:5B74D00F60FA13E92E2BA55423BC3B41"/>
   <source href="cid:A96144BC5BC1E8442E41D0A8C3D270AD"/>
   <source href="cid:EB87CD4C903AE21C29707966FDEDA9D5"/>
   <host>localhost</host>
   <port>8080</port>
   <user>wbarber</user>
  </submit>
 </soapenv:Body>
</soapenv:Envelope>

---------------------------------------------------------
No response msg sent...
-----------------------

---------------------------------------------------------
NON-working multiple-attachment wsdd file:
--------------------------------------------
<deployment xmlns="http://xml.apache.org/axis/wsdd/";
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java";
xmlns:ns1="urn:RIOTConverter" >
  <service name="urn:RIOTConverter" provider="java:RPC">
    <requestFlow>
      <handler type="soapmonitor"/>
    </requestFlow>
    <responseFlow>
      <handler type="soapmonitor"/>
    </responseFlow>

    <parameter name="className" value="RIOTConverter"/>
    <parameter name="allowedMethods" value="submit"/>

    <operation name="submit" returnQName="returnqname" returnType="ns1:DataHandler">
      <parameter name="dh" type="ns1:ArrayOfDataHandler"/>
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      <parameter name="host" type="xsd:string"/>
      <parameter name="port" type="xsd:string"/>
      <parameter name="user" type="xsd:string"/>
    </operation>

    <typeMapping
      xmlns:ns1="http://soapinterop.org/xsd";
      qname="ns1:ArrayOfDataHandler"
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      type="java:javax.activation.DataHandler[]"
      serializer="org.apache.axis.encoding.ser.ArraySerializerFactory"
      deserializer="org.apache.axis.encoding.ser.ArrayDeserializerFactory"
      encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";
    />

    <typeMapping
      qname="ns1:String"
      languageSpecificType="java:java.lang.String"
      serializer="org.apache.axis.encoding.ser.SimpleSerializerFactory"
      deserializer="org.apache.axis.encoding.ser.SimpleDeserializerFactory"
      encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";
    />

    <typeMapping
      qname="ns1:DataHandler"
      languageSpecificType="java:javax.activation.DataHandler"
      serializer="org.apache.axis.encoding.ser.JAFDataHandlerSerializerFactory"

deserializer="org.apache.axis.encoding.ser.JAFDataHandlerDeserializerFactory"
      encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";
    />

  </service>

</deployment>

Bill Barber
Scientific Software Group (CCN-12)
Los Alamos National Laboratory
505-667-8616

Reply via email to