Hi Guys,

I'm trying to implement file attachment program using DIME in Axis.
I have found sample web page(Japanese) about DIME and I tried to it,
http://www.atmarkit.co.jp/fdotnet/special/wse04/wse04_04.html

But Follow message appeared, I can not success to implements.
Maybe Client program is wrong, But I can not find where is wrong.
Please help me.

Koichi.

[My Environment]
Tomcat4.1.27
AXIS1.1
WindowsXP

[Error Message]
AxisFault
 faultCode: Server.userException
 faultSubcode:
 faultString: No such operation 'PutData'
 faultActor:
 faultNode:
 faultDetail:
 {http://xml.apache.org/axis/}stackTrace: AxisFault
 faultCode: Server.userException
 faultSubcode:
 faultString: No such operation 'PutData'
 faultActor:
 faultNode:
 faultDetail:

No such operation 'PutData'
 at
org.apache.axis.message.SOAPFaultBuilder.createFault(SOAPFaultBuilder.java:2
60)
 at
org.apache.axis.message.SOAPFaultBuilder.endElement(SOAPFaultBuilder.java:16
9)
 at
org.apache.axis.encoding.DeserializationContextImpl.endElement(Deserializati
onContextImpl.java:1015)
 at org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1573)
 at org.apache.crimson.parser.Parser2.content(Parser2.java:1824)
 at org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1552)
 at org.apache.crimson.parser.Parser2.content(Parser2.java:1824)
 at org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1552)
 at org.apache.crimson.parser.Parser2.parseInternal(Parser2.java:534)
 at org.apache.crimson.parser.Parser2.parse(Parser2.java:318)
 at org.apache.crimson.parser.XMLReaderImpl.parse(XMLReaderImpl.java:442)
 at javax.xml.parsers.SAXParser.parse(SAXParser.java:345)
 at
org.apache.axis.encoding.DeserializationContextImpl.parse(DeserializationCon
textImpl.java:242)
 at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:538)
 at org.apache.axis.Message.getSOAPEnvelope(Message.java:376)
 at org.apache.axis.client.Call.invokeEngine(Call.java:2583)
 at org.apache.axis.client.Call.invoke(Call.java:2553)
 at org.apache.axis.client.Call.invoke(Call.java:2248)
 at org.apache.axis.client.Call.invoke(Call.java:2171)
 at org.apache.axis.client.Call.invoke(Call.java:1691)
 at DIME.AxisDIMEClient.main(AxisDIMEClient.java:63)


No such operation 'PutData'
 at
org.apache.axis.message.SOAPFaultBuilder.createFault(SOAPFaultBuilder.java:2
60)
 at
org.apache.axis.message.SOAPFaultBuilder.endElement(SOAPFaultBuilder.java:16
9)
 at
org.apache.axis.encoding.DeserializationContextImpl.endElement(Deserializati
onContextImpl.java:1015)
 at org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1573)
 at org.apache.crimson.parser.Parser2.content(Parser2.java:1824)
 at org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1552)
 at org.apache.crimson.parser.Parser2.content(Parser2.java:1824)
 at org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1552)
 at org.apache.crimson.parser.Parser2.parseInternal(Parser2.java:534)
 at org.apache.crimson.parser.Parser2.parse(Parser2.java:318)
 at org.apache.crimson.parser.XMLReaderImpl.parse(XMLReaderImpl.java:442)
 at javax.xml.parsers.SAXParser.parse(SAXParser.java:345)
 at
org.apache.axis.encoding.DeserializationContextImpl.parse(DeserializationCon
textImpl.java:242)
 at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:538)
 at org.apache.axis.Message.getSOAPEnvelope(Message.java:376)
 at org.apache.axis.client.Call.invokeEngine(Call.java:2583)
 at org.apache.axis.client.Call.invoke(Call.java:2553)
 at org.apache.axis.client.Call.invoke(Call.java:2248)
 at org.apache.axis.client.Call.invoke(Call.java:2171)
 at org.apache.axis.client.Call.invoke(Call.java:1691)
 at DIME.AxisDIMEClient.main(AxisDIMEClient.java:63)
Exception in thread "main"


[Server Side]
package DIME;
import java.io.InputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.xml.soap.SOAPException;

import org.apache.axis.Message;
import org.apache.axis.MessageContext;
import org.apache.axis.attachments.Attachments;
import org.apache.axis.attachments.AttachmentPart;

public class AxisDIME {
  public String PutData(String originalName) throws SOAPException {
 try {
   MessageContext ctx = MessageContext.getCurrentContext();
   Message msg = ctx.getRequestMessage();
   AttachmentPart part
    = (AttachmentPart)msg.getAttachments().next();

   FileOutputStream fs = new FileOutputStream(
    "C:\\TEMP\\"
    + originalName);
   part.getDataHandler().writeTo(fs);
   fs.close();

   return "OK!";
 } catch (IOException ioex) {
   ioex.printStackTrace();
   throw new SOAPException("error", ioex);
 }
  }
}

[Client Side
package DIME;

import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Shell;

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.utils.Options;
import org.apache.axis.encoding.ser.JAFDataHandlerSerializerFactory;
import org.apache.axis.encoding.ser.JAFDataHandlerDeserializerFactory;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.xml.rpc.ParameterMode;
import javax.xml.namespace.QName;
import java.net.URL;


public class AxisDIMEClient {
  public static void main(String[] args) throws Exception {
 FileDialog dlg = new FileDialog(new Shell(), SWT.OPEN);
 String fileName = dlg.open();

 if (fileName != null) {
   DataHandler dhSource
    = new DataHandler(new FileDataSource(fileName));
   Service service = new Service();

   Call call = (Call)service.createCall();
   call.setTargetEndpointAddress(
     new URL("http://localhost/axis/services/AxisDIME"));
   call.setOperationStyle("wrapped");
   call.setOperationName(
    new QName("http://localhost", "PutData"));
   call.setReturnQName(
    new QName("http://localhost", "PutDataResult"));
   call.setReturnType(
    new QName("http://www.w3.org/2001/XMLSchema", "string"),
    String.class);
   call.setUseSOAPAction(true);
   call.setSOAPActionURI("http://localhost/axis/services/PutData");
   call.setEncodingStyle(null);
   call.setScopedProperty(
    org.apache.axis.client.Call.SEND_TYPE_ATTR,
    Boolean.FALSE);
   call.setScopedProperty(
    org.apache.axis.AxisEngine.PROP_DOMULTIREFS,
    Boolean.FALSE);

   QName att = new QName("urn:DIME.AxisDIME", "DataHandler");
   call.registerTypeMapping(dhSource.getClass(),
    att, JAFDataHandlerSerializerFactory.class,
    JAFDataHandlerDeserializerFactory.class);
   call.addParameter(
    new QName("urn:DIME.AxisDIME", "originalName"),
    new QName("http://www.w3.org/2001/XMLSchema", "string"),
    String.class, ParameterMode.IN);
   call.addParameter("data", att, ParameterMode.IN);
   call.setProperty(Call.ATTACHMENT_ENCAPSULATION_FORMAT,
    Call.ATTACHMENT_ENCAPSULATION_FORMAT_DIME);

   Object ret = call.invoke(new Object[]
    { new java.io.File(fileName).getName(), dhSource } );
 }
  }
}

[WSDD]
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
            xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service name="AxisDIME" provider="java:RPC">
  <parameter name="className" value="AxisDIME"/>
  <parameter name="allowedMethods" value="*"/>
</service>
</deployment>

Reply via email to