2012-03-11 4 views
0

Мне иногда нужно отправить список примитивов через веб-службу, например, в качестве параметров для запуска хранимой процедуры. В Java в основном у меня есть List. Это не работает с CXF. Я закончил работу с List, где SimpleDataItem - это вложенный код. Это хорошая идея, или есть ли лучшие апробации?Обертывание примитивов для CXF

Я в основном выполняет функцию, что я хотел бы выглядеть следующим образом:

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

Возможный дубликат [JAXB - Unmarshalling полиморфные объекты] (http://stackoverflow.com/questions/5491982/jaxb-unmarshalling-polymorphic-objects) – bmargulies

+0

@AndresOlarte: Возможно, вам лучше начать с того, что у вас есть в качестве входных данных и какова ваша цель. Сообщество сообщит вам об этом решении. –

ответ

1

Это не проблема CXF, это проблема веб-службы. Вы пытаетесь отправить полиморфную структуру данных. Таким образом, вам нужна схема, которая использует объединение XML Schema возможных типов.

См. JAXB - Unmarshalling polymorphic objects.

+0

Ну, похоже, это объясняет, почему мой подход не сработает. благодаря –

Смежные вопросы