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 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 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 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部分供参考: - - 希望后⾯的朋友,少⾛弯路,少掉⼀些头发。 因篇幅问题不能全部显示,请点此查看更多更全内容