这是我的部署文件,请大家看下我错在哪里??
<?xml version="1.0" encoding="UTF-8"?>
<deployment name="defaultClientConfig"
    xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"
    xmlns:handler="http://xml.apache.org/axis/wsdd/providers/handler"
    xmlns="http://xml.apache.org/axis/wsdd/">
    <service name="urn:xmlToDB" provider="java:RPC">
        <namespace>http://localhost:8083/axis/services/xmlToDB</namespace>
        <parameter name="className" value="com.borland.samples.xml.XMLDBMS.XMLDBMS_Test"/>
        <parameter name="allowedMethods" value="xmlToDB"/>
        <typeMapping
        xmlns:ns="http://localhost:8083/axis/services/xmlToDB"
        qname="ns:File"
        type="java:java.io.File"
        serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
        deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
        encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
      />
      </service>
</deployment>这是客户断程序:
package com.borland.samples.xml.XMLDBMS;import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import javax.xml.namespace.QName;
import java.io.File;
import org.apache.axis.encoding.ser.JAFDataHandlerDeserializerFactory;
import org.apache.axis.encoding.ser.JAFDataHandlerSerializerFactory;
import javax.xml.rpc.ServiceFactory;
public class Client {
  public Client() {
  }  public static void main(String[] args) {
    try {
      String endPoint = "http://localhost:8083/axis/services/xmlToDB";
      Service service = new Service();
      Call call = (Call) service.createCall();
      call.setTargetEndpointAddress(new java.net.URL(endPoint));
      call.setOperationName(new QName("urn:xmlToDB", "xmlToDB"));
      File source = new File("D:/jczhouWork/XMLDBMSBeans/InputFile.xml");
      QName qnameAttachment = new QName("urn:xmlToDB", "ns:File");
      call.registerTypeMapping(source.getClass(), //Add serializer for attachment.
                               qnameAttachment,
                               JAFDataHandlerSerializerFactory.class,
                               JAFDataHandlerDeserializerFactory.class);      call.invoke(new Object[] {source});
    }
    catch (Exception ex) {
      ex.printStackTrace();
    }
  }
}
出错主要信息是CLASSCASTEXCEPTION

解决方案 »

  1.   

    出错信息是:
    2005-6-21 16:22:38 org.apache.axis.attachments.AttachmentsImpl getAttachmentCount警告: Exception:AxisFault faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException faultSubcode:  faultString: java.lang.ClassCastException faultActor:  faultNode:  faultDetail:  {http://xml.apache.org/axis/}stackTrace:java.lang.ClassCastException at org.apache.axis.encoding.ser.JAFDataHandlerSerializer.serialize(JAFDataHandlerSerializer.java:55) at org.apache.axis.encoding.SerializationContextImpl.serializeActual(SerializationContextImpl.java:1249) at org.apache.axis.encoding.SerializationContextImpl.serialize(SerializationContextImpl.java:779) at org.apache.axis.encoding.SerializationContextImpl.outputMultiRefs(SerializationContextImpl.java:850) at org.apache.axis.message.SOAPBody.outputImpl(SOAPBody.java:145) at org.apache.axis.message.SOAPEnvelope.outputImpl(SOAPEnvelope.java:484) at org.apache.axis.message.MessageElement.output(MessageElement.java:899) at org.apache.axis.SOAPPart.writeTo(SOAPPart.java:298) at org.apache.axis.SOAPPart.writeTo(SOAPPart.java:272) at org.apache.axis.SOAPPart.saveChanges(SOAPPart.java:483) at org.apache.axis.attachments.AttachmentsImpl.getAttachmentCount(AttachmentsImpl.java:519) at org.apache.axis.Message.getContentType(Message.java:475) at org.apache.axis.transport.http.HTTPSender.writeToSocket(HTTPSender.java:293) at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:88) at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32) at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118) at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83) at org.apache.axis.client.AxisClient.invoke(AxisClient.java:147) at org.apache.axis.client.Call.invokeEngine(Call.java:2735) at org.apache.axis.client.Call.invoke(Call.java:2718) at org.apache.axis.client.Call.invoke(Call.java:2394) at org.apache.axis.client.Call.invoke(Call.java:2317) at org.apache.axis.client.Call.invoke(Call.java:1774) at com.borland.samples.xml.XMLDBMS.Client.main(Client.java:28) {http://xml.apache.org/axis/}hostname:zhhrsoft-meteorjava.lang.ClassCastException at org.apache.axis.AxisFault.makeFault(AxisFault.java:101) at org.apache.axis.SOAPPart.writeTo(SOAPPart.java:300) at org.apache.axis.SOAPPart.writeTo(SOAPPart.java:272) at org.apache.axis.SOAPPart.saveChanges(SOAPPart.java:483) at org.apache.axis.attachments.AttachmentsImpl.getAttachmentCount(AttachmentsImpl.java:519) at org.apache.axis.Message.getContentType(Message.java:475) at org.apache.axis.transport.http.HTTPSender.writeToSocket(HTTPSender.java:293) at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:88) at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32) at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118) at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83) at org.apache.axis.client.AxisClient.invoke(AxisClient.java:147) at org.apache.axis.client.Call.invokeEngine(Call.java:2735) at org.apache.axis.client.Call.invoke(Call.java:2718) at org.apache.axis.client.Call.invoke(Call.java:2394) at org.apache.axis.client.Call.invoke(Call.java:2317) at org.apache.axis.client.Call.invoke(Call.java:1774) at com.borland.samples.xml.XMLDBMS.Client.main(Client.java:28)Caused by: java.lang.ClassCastException at org.apache.axis.encoding.ser.JAFDataHandlerSerializer.serialize(JAFDataHandlerSerializer.java:55) at org.apache.axis.encoding.SerializationContextImpl.serializeActual(SerializationContextImpl.java:1249) at org.apache.axis.encoding.SerializationContextImpl.serialize(SerializationContextImpl.java:779) at org.apache.axis.encoding.SerializationContextImpl.outputMultiRefs(SerializationContextImpl.java:850) at org.apache.axis.message.SOAPBody.outputImpl(SOAPBody.java:145) at org.apache.axis.message.SOAPEnvelope.outputImpl(SOAPEnvelope.java:484) at org.apache.axis.message.MessageElement.output(MessageElement.java:899) at org.apache.axis.SOAPPart.writeTo(SOAPPart.java:298) ... 16 more
      

  2.   

    我本人没有直接将文件作为webservice提供给外部,只是提供过字节数组,如果你的文件不大的话,可以考虑一下。就是先将文件内容读成byte[]数组,然后提供给外部。这样客户端不需要做特殊处理,只需要将接收到的数据装换成byte[]数组就可以了。没有任何的特殊性。
      

  3.   

    File并不是一个可以序列化的类,你必须将这个File的内容全部读入到字节数组中然后再将这个字节数组作为WebService的调用参数如果这个文件太大,上述方法则不可行,也就说明你可能需要分开几组调用以减少字节数组大小等(这个需要你自己控制,并不存在直接的方法可用)
      

  4.   

    我是要将客户端文件(很小)作为参数传递到Service的方法。参数类型是:File。我怎么将File序列化。
    谢谢您!bison_java
      

  5.   

    谢谢ChDw(米)!
    可是我看了很多例子,其中有序列化自己写的类,然后再声明typeMapping!
      

  6.   

    看看
    http://ws.apache.org/axis/java/user-guide.html#XMLJavaDataMappingInAxis里面都说了