一开始另外一个项目上面有现成的XML转对象的方法(xmlString2Object),把jar和类都引用到项目上发现死活都解析不了,研究了一天;后来果断放弃去网上找寻另外的方法.网上说的比较多的可能是利用XStream在java对象和XML之间相互转换,试了试感觉用的不是很爽就没用了。后面用的是JAXB来解决的。
package com.founder.ec.web.model;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
import com.founder.ec.base.bo.BaseBO;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "ResultList")
@XmlType(propOrder = { "ReturnDetail"})
public class ResultList extends BaseBO {
/**
*
*/
private static final long serialVersionUID = 1L;
private List<ReturnDetail> ReturnDetail;
public List<ReturnDetail> getReturnDetail() {
return ReturnDetail;
}
public void setReturnDetail(List<ReturnDetail> returnDetail) {
ReturnDetail = returnDetail;
}
}
package com.founder.ec.web.model;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
import com.founder.ec.base.bo.BaseBO;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "ReturnDetail")
@XmlType(propOrder = { "logistic_name", "logistic_no", "goods_no", "goods_amount", "opt_time", "user_id", "tui_or_huan", "refused_remark", "order_state" })
public class ReturnDetail extends BaseBO {
/**
*
*/
private static final long serialVersionUID = 1L;
private String logistic_name;
private String logistic_no;
private String goods_no;
private String goods_amount;
private String opt_time;
private String user_id;
private String tui_or_huan;
private String refused_remark;
private String order_state;
public String getLogistic_name() {
return logistic_name;
}
public void setLogistic_name(String logistic_name) {
this.logistic_name = logistic_name;
}
public String getLogistic_no() {
return logistic_no;
}
public void setLogistic_no(String logistic_no) {
this.logistic_no = logistic_no;
}
public String getGoods_no() {
return goods_no;
}
public void setGoods_no(String goods_no) {
this.goods_no = goods_no;
}
public String getGoods_amount() {
return goods_amount;
}
public void setGoods_amount(String goods_amount) {
this.goods_amount = goods_amount;
}
public String getOpt_time() {
return opt_time;
}
public void setOpt_time(String opt_time) {
this.opt_time = opt_time;
}
public String getUser_id() {
return user_id;
}
public void setUser_id(String user_id) {
this.user_id = user_id;
}
public String getTui_or_huan() {
return tui_or_huan;
}
public void setTui_or_huan(String tui_or_huan) {
this.tui_or_huan = tui_or_huan;
}
public String getRefused_remark() {
return refused_remark;
}
public void setRefused_remark(String refused_remark) {
this.refused_remark = refused_remark;
}
public String getOrder_state() {
return order_state;
}
public void setOrder_state(String order_state) {
this.order_state = order_state;
}
}
public static void main(String[] args) throws Exception { String xml = "<?xml version='1.0' encoding='utf-8'?><ResultList><ReturnDetail><logistic_name>物流公司名称(顺风)</logistic_name><logistic_no>物流号(421234646)</logistic_no><goods_no>商品编码(11202)</goods_no><goods_amount>商品数量(1)</goods_amount><opt_time>操作时间(2013-06-21 15:00:12)</opt_time><user_id>操作人(2288)</user_id><tui_or_huan>退换货类型(1)</tui_or_huan><refused_remark>拒收原因(已损坏)</refused_remark><order_state>(commit)</order_state></ReturnDetail><ReturnDetail><logistic_name></logistic_name><logistic_no></logistic_no><goods_no>11202</goods_no><goods_amount>1</goods_amount><opt_time>2013-06-21 15:00:12</opt_time> <user_id>2288</user_id><tui_or_huan>1</tui_or_huan><refused_remark>1</refused_remark><order_state>commit</order_state></ReturnDetail></ResultList>"; JAXBContext context = JAXBContext.newInstance(ResultList.class); Unmarshaller marchaller = context.createUnmarshaller(); ResultList p2 = (ResultList) marchaller.unmarshal(new StringReader(xml)); System.out.println("Country:" + p2.getReturnDetail().size() + "==" + p2.getReturnDetail().get(0).getLogistic_name()); // StringWriter sw = new StringWriter(); // Marshaller marchal = context.createMarshaller(); // marchal.marshal(p2, sw); // String xmlResult = sw.toString(); // System.out.println(xmlResult); } public static String webServiceXfire() throws MalformedURLException, Exception { String result = ""; String url = "http://192.168.2.105:100/ec-dec/services/EC_WS?wsdl"; String methodName = "getOrderReturnTui"; Object[] rslts = { "" }; try { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String start = sdf.format(new Date()) + " 00:00:00"; String end = sdf.format(new Date()) + " 23:59:00"; Client client = new Client(new URL(url)); Object[] objs = new Object[] { null, null, null }; rslts = client.invoke(methodName, objs); if (rslts != null & rslts.length > 0) { result = (String) rslts[0]; } } catch (MalformedURLException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } System.out.println("===========" + result); return result; // Client client = new Client(new URL("http://192.168.2.105:100/ec-dec/services/EC_WS?wsdl")); // Object[] results = client.invoke("getOrderReturnTui", new Object[] { null,null, "101302" }); // System.out.println(results[0]); // return results[0].toString(); }
第一次调用webService 才知道分call和xfire,而且调用的方法也完全不相同,这样写有问题的是如果webservice接口那边某个属性换了(如goods_no换成goods_id),这边就不能执行,也跟着换