您的当前位置:首页webservice传递自定义类报Noserializerfoundforclass

webservice传递自定义类报Noserializerfoundforclass

2022-06-01 来源:乌哈旅游
webservice传递⾃定义类报Noserializerfoundforclass

Web Services,⽤Axis不能传递⽤户⾃定义对象。报错如下:.....

已解决,下⾯是关联代码:

Model类 BookDetail.java:

package com.box.model;

import java.util.Date;

//订货明细

public class BookDetail implements java.io.Serializable {private static final long serialVersionUID = 1L;private Long id;

private String ProductCode; // 药品编码(医院)private String ProductName; // 品名private String ModelName; // 剂型private String MedicalSpec; // 规格private String SalerName; // 产地private String SpecUnit; // 单位private double Price; // 进价

private int RequestQty; // 请求采购数量private Date CreateDate; // 创建⽇期

private String GhsCode; // 供货商识别号(医院)private String GHS; // 供货商名称private String StockCode; // 医院库房编号private String Stock; // 医院库房名称private String Memo; // 备注

private String HisIdentifierCode; // 医院端记录唯⼀标识private String NbOrderID; // 医院端记录唯⼀标识private String UUID;

//⽣成get/set}

服务端:

/it3/WEB-INF/src/com/ws/NbDataService.java

/**

* 根据UUID发送订单信息,医药平台⽣成订单ID(唯⼀识别)返回

*

* @param infos* 订单信息

* @return 成功:返回BookInfo的ID,失败返回:\"ERROR \"+原因

* 输⼊订货Id可以通过getLastBookId获取,订货明细可以通过getBookDetail获取*/

public String sendBookInfos(String uuid, List infos) {UUID id = UUID.randomUUID();

SimpleDateFormat sdf = new SimpleDateFormat(\"yyyyMMddHHmmss\");String orderID = sdf.format(new Date()) + id.toString();for (int i = 0; i < infos.size(); i++) {infos.get(i).setNbOrderID(orderID);infos.get(i).setUUID(uuid);}

nbJkDAO.insertOrderInfo(infos);return orderID;}

Web Service 配置⽂件 /it3/WEB-INF/server-config.wsdd

很关键:

//

客户端:

package com.ws;

import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import java.util.List;import java.util.UUID;

//webService测试

import javax.xml.namespace.QName;

import org.apache.axis.client.Call;import org.apache.axis.client.Service;

import org.apache.axis.encoding.ser.BeanDeserializerFactory;import org.apache.axis.encoding.ser.BeanSerializerFactory;

import com.box.model.BookDetail;

public class Test {

public static void main(String[] args) {sendRecv();}

public static String sendRecv() {

BookDetail bookDetail = new BookDetail();

List sb = new ArrayList();UUID id = UUID.randomUUID();bookDetail.setNbOrderID(\"99s\");bookDetail.setUUID(id.toString());bookDetail.setProductCode(\"22s\");bookDetail.setProductName(\"3s\");bookDetail.setModelName(\"4s\");bookDetail.setMedicalSpec(\"5s\");bookDetail.setSalerName(\"6s\");bookDetail.setSpecUnit(\"7s\");bookDetail.setPrice(8.0);bookDetail.setRequestQty(9);

bookDetail.setCreateDate(new Date());bookDetail.setGhsCode(\"10s\");bookDetail.setGHS(\"11s\");bookDetail.setStockCode(\"12s\");bookDetail.setStock(\"13s\");bookDetail.setMemo(\"14s\");

bookDetail.setHisIdentifierCode(\"15s\");

sb.add(bookDetail);

return sendRecv(\"123456\} //

private static String sendRecv(String arg0, List sb) {String ret = \"\";try {

String endPoint = \"http://127.0.0.1:8080/ws/services/NbData\";Service service = new Service();Call call = (Call) service.createCall();

QName qn = new QName(\"urn:BookDetailManager\call.registerTypeMapping(BookDetail.class, qn,new BeanSerializerFactory(BookDetail.class, qn),new BeanDeserializerFactory(BookDetail.class, qn));call.setTargetEndpointAddress(endPoint);

call.setOperationName(new QName(\"http://main.service.local.wondersgroup.com/\

call.addParameter(\"arg0\// 参数名

org.apache.axis.encoding.XMLType.XSD_STRING, // 参数类型:Stringjavax.xml.rpc.ParameterMode.IN);// 参数模式:'IN' or 'OUT'

call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);// 返回值类型:StringString result = (String) call.invoke(new Object[] { arg0, sb });// new Object[] { arg0, arg1 }System.out.println(\"result is :\" + result);return result;

} catch (Exception e) {e.printStackTrace();}return \"\";} }

关键:

QName qn = new QName(\"urn:BookDetailManager\);

注意service/beanMapping的定义。languageSpecificType中定义使⽤那个类, qname定义类的名称。

call.registerTypeMapping(BookDetail.class, qn,new BeanSerializerFactory(BookDetail.class, qn),new BeanDeserializerFactory(BookDetail.class, qn));

在Axis客户端,注册⾃定义对象的序列化/反序列化器。

最后附上wsdl部分供参考:

-

-

希望后⾯的朋友,少⾛弯路,少掉⼀些头发。

因篇幅问题不能全部显示,请点此查看更多更全内容