I am been doing a service program that sends an
attachment. I used the DataHandler for the attachment param.
But now I have done my own class and de/serializers
for this class. I did this because I need extra attributes, apart of
href, in my attachment element and Axis cannot do it, as far I
know.
The client serializes correctly but in the server I
get:
No such operation "SendAttachment"
I only modified the skeleton in the param
description to put my class:
new org.apache.axis.description.ParameterDesc(new
javax.xml.namespace.QName("", "Content"),
org.apache.axis.description.ParameterDesc.IN, new
javax.xml.namespace.QName("urn:myAttachment", "Attach_attr"),
myAttachment.Attach_attr.class, false, false),
and besides I modified the my param method
interface to use the new class.
I don't know how the skeleton works, so I don´t
know what I have done incorrectly.
Please, if you know how to do it or you have
experience with deserializers, let me know.
below my class and deserializer:
//MY CLASS
package myAttachment;
class Attach_attr {
public String at1; public String at2; public javax.activation.DataHandler attachment; public Attach_attr(String at1, String at2, javax.activation.DataHandler attachment) { //copia de los argumentos this.at1 = at1; this.at2 = at2; this.attachment = attachment; } } ////DESERIALIZER
package myAttachment;
import
org.apache.axis.encoding.DeserializationContext;
import org.apache.axis.encoding.Deserializer; import org.apache.axis.encoding.DeserializerImpl; import org.apache.axis.encoding.FieldTarget; import org.apache.axis.Constants; import org.apache.axis.message.SOAPHandler; import org.apache.axis.attachments.AttachmentPart; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import javax.xml.namespace.QName;
import java.util.Hashtable; public class Attach_attr_Deser extends
DeserializerImpl
{ public Attach_attr_Deser() { } /** DESERIALIZER STUFF - event handlers */ /**
* This method is invoked when an element start tag is encountered. * @param namespace is the namespace of the element * @param localName is the name of the element * @param prefix is the element's prefix * @param attributes are the attributes on the element...used to get the type * @param context is the DeserializationContext */ public void StartElement(String namespace, String localName, String prefix, Attributes attributes, DeserializationContext context) throws SAXException { String at1 = attributes.getValue("","att1"); String at2 = attributes.getValue("","att2"); String cid = attributes.getValue("","href"); try { AttachmentPart ap = (AttachmentPart)context.getMessageContext().getCurrentMessage().getAttachmentsImpl().getAttachmentByReference(cid); value = new Attach_attr(at1,at2,ap.getDataHandler()); } catch (Exception e) { throw new SAXException("Error mydeserializer"+e);} } } |