问题描述
小弟做一个webservice接口,涉及到文件的传输。用ECLIPSE生成了客户端,然后在项目里面调用接口我的代码大致是:try{DataHandlerdatahandler=newDataHandler(newFileDataSource("D:\test.xlsx"));ChannelWebServiceProxychannel=newChannelWebServiceProxy();channel.setEndpoint(endpoint);ChannelWebServiceSoapBindingStubstub=(ChannelWebServiceSoapBindingStub)channel.getChannelWebService();//附件AttachFileattachFile=newAttachFile();attachFile.setDataHander(datahandler);attachFile.setFileName("D:\test.xlsx");//调用接口PartnerContractSynRequestcontRequest=newPartnerContractSynRequest(attachFile,"test","1","TEST_001","2013-12-12","123","2013-12-12","admin","2013-12-12","2013-12-12");PartnerContractSynResponsecontResponse=stub.partnerContractSyn(contRequest);if(contResponse.getResult().equals("0"))message="success";elsemessage=contResponse.getMessage();}catch(Exceptione){System.out.println(e);message="接口异常,请联系管理员";}System.out.println(message);调用这个接口的时候,每次都反馈一个异常:java.io.NotSerializableException:javax.activation.DataHandler。。这个异常是对方系统反馈回来的。但我自己建了一个测试服务,用类似的方式传文件是可以的。因此,有些怀疑是不是对方系统自己的错误。麻烦大家帮我看看。
解决方案
解决方案二:
序列化和反序列化的问题,对方调用你的接口,但对象输出流的对象所对应的类还没有实现Serializable接口口,反序列化失败异常,楼主检查下自已的接口里面的实体bean看有没有都实现Serializable接口。
解决方案三:
引用1楼a_liujian的回复:
序列化和反序列化的问题,对方调用你的接口,但对象输出流的对象所对应的类还没有实现Serializable接口口,反序列化失败异常,楼主检查下自已的接口里面的实体bean看有没有都实现Serializable接口。
您好。你指的是服务端的问题吧。我调用客户端代码是不是不需要对datahandler做序列化操作呢?
解决方案四:
看样子应该是版本不对啊。
解决方案五:
webservice接口只能传字符串类型的,你传个对象当然会报错。attachFile你可以把文件的所在的FTP地址传过去,之后接口那边从FTP上下载文件。
解决方案六:
你要是把AttachFile这个类序列化一下,接口那边反序列化一下估计也能得到这个对象。没用过,你可以试试。