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>