我有时需要通过Web服务发送基元列表,例如作为运行存储过程的参数。在Java中基本上我有List。这不适用于CXF。我最终做了List,其中SimpleDataItem是附加代码。这是一个好主意,还是有更好的方法?
我基本上执行的功能我希望如下:
ResultSet executeStoredProc(String procName, Object... args) throws SQLException;
现在SimpleDataItem看起来像这样:
public class SimpleDataItem {
private String s;
private Long l;
private Integer i;
private BigDecimal d;
private Boolean b;
private Long t;
private byte[] ba;
public SimpleDataItem() {
}
public SimpleDataItem(Object o) {
doSetObject(o);
}
public void doSetObject(Object o) {
if (o==null) {
return;
}
if (o instanceof String ) {
s=(String)o;
return;
}
if (o instanceof Long ) {
l=(Long)o;
return;
}
if (o instanceof Integer ) {
i=(Integer)o;
return;
}
if (o instanceof BigDecimal) {
d=(BigDecimal)o;
return ;
}
if (o instanceof Boolean) {
b=(Boolean)o;
return ;
}
if (o instanceof Timestamp) {
t=((Timestamp)o).getTime();
return;
}
if (o instanceof byte[]) {
ba=(byte[])o;
}
}
public Object doGetObject() {
if (s!=null) {
return s;
}
if (l!=null) {
return l;
}
if (i!=null) {
return i;
}
if (d!=null) {
return d;
}
if (b!=null) {
return b;
}
if (t!=null) {
return new Timestamp(t);
}
if (ba!=null) {
return ba;
}
return null;
}
/**
* @return the ba
*/
public byte[] getBa() {
return ba;
}
/**
* @param ba the ba to set
*/
public void setBa(byte[] ba) {
this.ba = ba;
}
public String getS() {
return s;
}
public void setS(String s) {
this.s = s;
}
public Long getL() {
return l;
}
public void setL(Long l) {
this.l = l;
}
public Integer getI() {
return i;
}
public void setI(Integer i) {
this.i = i;
}
public BigDecimal getD() {
return d;
}
public void setD(BigDecimal d) {
this.d = d;
}
public Boolean getB() {
return b;
}
public void setB(Boolean b) {
this.b = b;
}
public Long getT() {
return t;
}
public void setT(Long t) {
this.t = t;
}
public String toString() {
Object o=doGetObject();
if (o!=null) {
return o.toString();
}
return null;
}
}
这是个好主意吗?是否有更好的方法?
答案 0 :(得分:1)
这不是CXF问题,而是Web服务问题。您正在尝试发送多态数据结构。因此,您需要一个使用可能类型的XML Schema联合的模式。