網域查詢: www.
返回首頁
當前位置: 首頁 > 站長學院 > 網站編程 > JSP教程 >

關于SOAP反序列化的一點認識,正好解釋了問題所在

時間:2010-02-17 04:48來源: 作者: 點擊:
看了一段關于反序列化的代碼,原來在從xml代碼到java代碼的時候,有一個重新構造的過程,Apache Soap用的是org.apache.soap.encoding.soapenc.BeanSerializer來完成這個工作的.一個java 類是被看作一個be
  看了一段關于反序列化的代碼,原來在從xml代碼到java代碼的時候,有一個重新構造的過程,Apache Soap用的是org.apache.soap.encoding.soapenc.BeanSerializer來完成這個工作的.一個java 類是被看作一個bean來處理,重新構造時需要調用set方法,如果沒有set方法,或者為private的時候,那麼就等于構造了一個空的對象,所以造成了在客戶端為空的現象.其實從服務端返回的不為空,只是本地重新構造時出了問題.下面的代碼沒有用apache默認得反序列化類,而是自己實現的,沒有用到set.

public Bean unmarshall(String inScopeEncStyle, QName elementType,
  Node src, XMLJavaMappingRegistry xjmr, SOAPContext ctx)
  throws IllegalArgumentException
  {
    Element root = (Element)src;
    Element tempEl = DOMUtils.getFirstChildElement(root);
    samples.addressbook2.Phone target;

    try
    {
      target =
        (samples.addressbook2.Phone)samples.addressbook2.Phone.class.newInstance
        ();
    }
    catch (Exception e)
    {
      throw new IllegalArgumentException("Problem instantiating bean: "
        + e.getMessage());
    }

    while (tempEl != null)
    {
      Bean paramBean = xjmr.unmarshall(inScopeEncStyle,
      RPCConstants.Q_ELEM_PARAMETER,
      tempEl, ctx);
      Parameter param = (Parameter)paramBean.value;
      String tagName = tempEl.getTagName();


      if (tagName.equals("areaCode"))
      {
        target.areaCode_Elem = ((Integer)param.getValue()).intValue();
      }

      if (tagName.equals("exchange"))
      {
        target.exchange_Elem = (java.lang.String)param.getValue();
      }

      if (tagName.equals("number"))
      {
        target.number_Elem = (java.lang.String)param.getValue();
      }


      tempEl = DOMUtils.getNextSiblingElement(tempEl);
    }

    return new Bean(samples.addressbook2.Phone.class, target);
  }
頂一下
(0)
0%
踩一下
(0)
0%
------分隔線----------------------------
最新評論 查看所有評論
發表評論 查看所有評論
請自覺遵守互聯網相關的政策法規,嚴禁發佈色情、暴力、反動的言論。
評價:
表情:
用戶名: 密碼: 驗證碼:
推薦內容