隨筆-72  評論-20  文章-0  trackbacks-1
          在Axis2_1.2版本中提供了傳遞Java對象的功能(注:只有1.1/1.2版本提供,更早的Axis2版本沒有此功能)。此項功能稱為傳輸POJO(a Plain Old Java Object)
           
          1.引入一個簡單的POJO- The Weather POJO
          Weather.java
          package sample.pojo.data;
           
          public class Weather {
                 float temperature;
                 String forecast;
                 boolean rain;
                 float howMuchRain;
           
                 public void setTemperature(float temp) {
                        temperature = temp;
                 }
           
                 public float getTemperature() {
                        return temperature;
                 }
           
                 public void setForecast(String fore) {
                        forecast = fore;
                 }
           
                 public String getForecast() {
                        return forecast;
                 }
           
                 public void setRain(boolean r) {
                        rain = r;
                 }
           
                 public boolean getRain() {
                        return rain;
                 }
           
                 public void setHowMuchRain(float howMuch) {
                        howMuchRain = howMuch;
                 }
           
                 public float getHowMuchRain() {
                        return howMuchRain;
                 }
          }
          Note that it's all just straight POJOs with field items and getter and setter methods for each field.
           
          2.基于此POJO的service
          WeatherService.java
          package sample.pojo.service;
           
          import sample.pojo.data.Weather;
           
          public class WeatherService{
              Weather weather;
             
              public void setWeather(Weather weather){
                  this.weather = weather;
              }
           
              public Weather getWeather(){
                  return this.weather;
              }
          }
           
          3.相應的services.xml
          <service name="WeatherService" scope="application">
              <description>Weather POJO Service</description>
              <messageReceivers>
                  <messageReceiver
                      mep="http://www.w3.org/2004/08/wsdl/in-only"
              class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>
                  <messageReceiver
                      mep="http://www.w3.org/2004/08/wsdl/in-out"
              class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
              </messageReceivers>
              <parameter name="ServiceClass">
                  sample.pojo.service.WeatherService
              </parameter>
          </service>
           
          4.打包與部署
          將文件組織成:
          - WeatherService
             - META-INF
               - services.xml
             - sample
               - pojo
                 - data
                   - Weather.class
                 - service
                   - WeatherService.class
          將其打包為WeatherService.aar,并部署在Tomcat上(詳見 基于Tomcat5.0和Axis2開發Web Service應用實例 )。
           
          5.測試
          WeatherRPCClient.java
          package sample.pojo.rpcclient;
           
          import javax.xml.namespace.QName;
          import org.apache.axis2.AxisFault;
          import org.apache.axis2.addressing.EndpointReference;
          import org.apache.axis2.client.Options;
          import org.apache.axis2.rpc.client.RPCServiceClient;
          import sample.pojo.data.Weather;
           
          public class WeatherRPCClient {
                 public static void main(String[] args1) throws AxisFault {
                        RPCServiceClient serviceClient = new RPCServiceClient();
                        Options options = serviceClient.getOptions();
                        EndpointReference targetEPR = new EndpointReference(
                                      "http://localhost:8080/axis2/services/WeatherService");
                        options.setTo(targetEPR);
           
                        // Setting the weather
                        QName opSetWeather = new QName("http://service.pojo.sample/xsd",
                                      "setWeather");
                        Weather w = new Weather();
                        w.setTemperature((float) 39.3);
                        w.setForecast("Cloudy with showers");
                        w.setRain(true);
                        w.setHowMuchRain((float) 4.5);
           
                        Object[] opSetWeatherArgs = new Object[] { w };
                        serviceClient.invokeRobust(opSetWeather, opSetWeatherArgs);
                        serviceClient.invokeRobust(opSetWeather, opSetWeatherArgs);
           
                        // Getting the weather
                        QName opGetWeather = new QName("http://service.pojo.sample/xsd",
                                      "getWeather");
           
                        Object[] opGetWeatherArgs = new Object[] {};
                        Class[] returnTypes = new Class[] { Weather.class };
                        Object[] response = serviceClient.invokeBlocking(opGetWeather,
                                      opGetWeatherArgs, returnTypes);
           
                        Weather result = (Weather) response[0];
                        if (result == null) {
                               System.out.println("Weather didn't initialize!");
                               return;
                        }
           
                        // Displaying the result
                        System.out.println("Temperature               : "
                                      + result.getTemperature());
                        System.out.println("Forecast                  : "
                                      + result.getForecast());
                        System.out.println("Rain                      : " + result.getRain());
                        System.out.println("How much rain (in inches) : "
                                      + result.getHowMuchRain());
           
                 }
          }
           
          6.結果
          Temperature               : 39.3
          Forecast                  : Cloudy with showers
          Rain                     : true
          How much rain (in inches)    : 4.5
           

          posted on 2007-08-19 05:07 前方的路 閱讀(2542) 評論(4)  編輯  收藏 所屬分類: Java技術

          評論:
          # re: 使用Axis2傳遞簡單Java對象(POJO)[未登錄] 2008-04-24 23:04 | x
          serviceClient.invokeRobust(opSetWeather, opSetWeatherArgs);
          serviceClient.invokeRobust(opSetWeather, opSetWeatherArgs);
          為什么要重復?  回復  更多評論
            
          # re: 使用Axis2傳遞簡單Java對象(POJO) 2008-08-01 10:12 | zhugw
          serviceClient.invokeRobust(opSetWeather, opSetWeatherArgs);
          serviceClient.invokeRobust(opSetWeather, opSetWeatherArgs);
          這兩行不需要  回復  更多評論
            
          # re: 使用Axis2傳遞簡單Java對象(POJO) 2008-08-27 21:19 | gxl
          你好,我想請教一下。
          為什么 我在eclipse里 寫客戶端的代碼的時候,import org.apache.axis2.rpc.client.RPCServiceClient總是提示找不到包呢,我該到哪里導入呢?
          import javax.xml.namespace.QName;
          import org.apache.axis2.AxisFault;
          import org.apache.axis2.addressing.EndpointReference;
          import org.apache.axis2.client.Options這幾個都可以找到的。  回復  更多評論
            
          # re: 使用Axis2傳遞簡單Java對象(POJO) 2011-01-08 15:19 | 路邊帥小子
          在你的axis2文件的bin目錄下呀
            回復  更多評論
            
          主站蜘蛛池模板: 五华县| 揭西县| 郴州市| 阳西县| 泾川县| 安阳县| 灵山县| 安西县| 凤凰县| 沙雅县| 鲁甸县| 安新县| 宣汉县| 建宁县| 北票市| 邯郸市| 腾冲县| 农安县| 娱乐| 肃北| 孙吴县| 石屏县| 土默特左旗| 聊城市| 靖边县| 广水市| 太白县| 进贤县| 芷江| 南雄市| 武宣县| 离岛区| 和平区| 彰武县| 明水县| 开原市| 保德县| 朝阳县| 静乐县| 九龙城区| 鲁甸县|