1. 程式人生 > >axis2使用教程、webservices自定義引數,webservices自定義返回值

axis2使用教程、webservices自定義引數,webservices自定義返回值

Java Axis2 1.6.2使用說明

下載axis

下載最新的axis2jar包以及配置檔案。下載地址:

貌似需要翻牆。我用的是火狐外掛翻牆的。絕體步驟你不懂得可以百度一下吧。

配置axis2

首先你的需要安裝好一個tomcat。版本這個用6、7都可以。至於5以下的我沒試過可否支援axis2。

首先配置和tomcat

Tomcat的配置步驟

這裡我不詳細說了,不知道的朋友可以百度一下,網上這種帖子多的是。

配置axis2

   將axis2-1.6.2-war.zip檔案解壓到相應的目錄,將目錄中的axis2.war檔案放到<Tomcat安裝目錄>\webapps目錄下,並啟動Tomcat。

   在瀏覽器位址列中輸入如下的URL:

   如果在瀏覽器中顯示出wellcome頁面,則表示Axis2安裝成功。

釋出webservices

編寫一段java程式碼,然後編譯成class檔案。將編譯後的class檔案放到<Tomcat安裝目錄>\webapps\axis2\WEB-INF\pojo目錄中(如果沒有pojo目錄,則建立該目錄)。

這樣就可以釋出webservices服務了。

比方說

public  class Hello{

public String hello(){

return "hello";

}  

}

將編譯後的class檔案放到<Tomcat安裝目錄>\webapps\axis2\WEB-INF\pojo目錄中。然後進入http://localhost:8080/axis2點選頁面的services 。然後就顯示出來webservices服務了。

配置axis2熱部署和熱釋出。避免每次釋出需要重啟tomcat。

開啟<Tomcat安裝目錄>\webapps\axis2\WEB-INF\conf\axis2.xml,找到如下的配置。把false改為true即可。如下:

<parameter name="hotdeployment">true</parameter>

<parameter name="hotupdate">true</parameter>

然後重新啟動一下tomcat。

注意:

1. POJO類不能使用package關鍵字宣告包。

2. 在瀏覽器中測試WebService時,如果WebService方法有引數,需要使用URL的請求引數來指定該WebService方法引數的值,請求引數名與方法引數名要一致。

3. 釋出WebService的pojo目錄只是預設的,如果想在其他的目錄釋出WebServices,可以開啟axis2.xml檔案,並在<axisconfig>元素中新增如下的子元素:

<deployer extension=".class" directory="mypojo" class="org.apache.axis2.deployment.POJODeployer"/>

上面的配置允許在<Tomcat安裝目錄>\webapps\axis2\WEB-INF\mypojo目錄中釋出WebService。

 使用axis2實現webservices自定義引數,webservices自定義返回值

對於配置axis2的過程不是很麻煩。可能很多人對於如何呼叫webservices比較疑惑。下面我將介紹給大家如何使用axis2使用自定義型別的引數、獲取自定義型別的返回值、獲取返回List<自定義泛型>型別的資料。

下面為我自己封裝的請求webservices的類核心程式碼

/**

   * 執行webservices方法

   *

   * @return List<HashMap<String,String>>型別的結果集

   * @throws AxisFault

   *            Axis異常

   */

  publicList<HashMap<String, Object>> invokeBlocking() throws AxisFault {

       List<HashMap<String,Object>> returns = new ArrayList<HashMap<String, Object>>();

       RPCServiceClient  serviceClient = new RPCServiceClient();

       Optionsoptions = serviceClient.getOptions();

       EndpointReference  targetEPR = new EndpointReference(url);

       options.setTo(targetEPR);

       QName    opAddEntry = new QName(targetNamespace, method);

       Object[]  so = serviceClient.invokeBlocking(opAddEntry, parameters,

                  newClass[] { returnType });

       if(so.length > 0) {

             if(so[0] instanceof Object[]) {

                  Object[]  elements = (Object[]) so[0];

                  for(Object o : elements) {

                        HashMap<String,Object> maps = new HashMap<String, Object>();

                        OMElementImpl  ome = (OMElementImpl) o;

                        maps.put(ome.getLocalName(),ome.getText());

                        while (ome.getNextOMSibling() != null) {

                              ome= (OMElementImpl) ome.getNextOMSibling();

                              maps.put(ome.getLocalName(),ome.getText());

                        }

                        returns.add(maps);

                  }

             }else {

                  Objectob = so[0];

                  if(ob instanceof OMElementImpl == false) {

                        HashMap<String,Object> maps = new HashMap<String, Object>();

                        maps.put("simple",ob);

                        returns.add(maps);

                  }else {

                        OMElementImpl  ome = (OMElementImpl) so[0];

                        HashMap<String,Object> maps = new HashMap<String, Object>();

                        maps.put(ome.getLocalName(),ome.getText());

                        returns.add(maps);

                  }

 

             }

             return  returns;

       }else {

             return  null;

       }

   }

下面是程式碼裡面提到的變數,以及說明

/**

   * url :webservices 連線地址不包含方法及引數

   *

   * 例如: http://127.0.0.1:8080/axis2/services/Hello

   */

  private String url;

  /**

   * method :呼叫webservices的方法名稱例如: getTime

   */

  private Stringmethod;

 

  /**

   * targetNamespace :webservices的targetNamespace名詞

   * 預設值為:http://ws.apache.org/axis2

   */

  private StringtargetNamespace = "http://ws.apache.org/axis2";

 

  /**

   * parameters :請求方法的引數

   *

   */

  private Object[]parameters;

 

  /**

   * returnType :方法返回值型別

   */

  @SuppressWarnings("rawtypes")

  private ClassreturnType;

 


程式碼裡用到的到均可以在axis2-bin包下找到。

axiom-api-1.2.13.jar
axiom-impl-1.2.13.jar
axis2-adb-1.6.2.jar
axis2-kernel-1.6.2.jar
axis2-metadata-1.6.2.jar
axis2-transport-http-1.6.2.jar
axis2-transport-local-1.6.2.jar
commons-codec-1.3.jar
commons-httpclient-3.1.jar
commons-logging-1.1.1.jar
htpcore-4.0.jar
mail-1.4.jar
neethi-3.0.2.jar
wsdl4j-1.6.2.jar
XmlSchema-1.4.7.jar

這些包一個不能多,多了也沒用。一個也不能少,少了就報錯。是我整理的1.6.2最新的jar包。

原始碼我也提供給大家。你們可以在我的csdn上下載。

原始碼包含:webservices程式碼和client端程式碼。裡面有詳細的註釋。可以借鑑學習使用axis2使用自定義型別的引數、獲取自定義型別的返回值、獲取返回List<自定義泛型>型別的資料。

Jar包和axis2的配置檔案,提供另外一個下載地址。無須積分即可下載。[由於csdn檔案大小限制,所以分開下載]

 本人web、android開發 、qq群255825960