分享java帶來的快樂

          我喜歡java新東西

          在spring中利用axis工具配置webservice成功案例

          第一步:確認你用到的spring bean存在并且有效 比如 inviteService
          第二步:創建要發布的服務方法

          /**
           *
           */
          package com.chinamobile.survey.webservice;

          import java.util.List;

          import org.springframework.remoting.jaxrpc.ServletEndpointSupport;

          import com.chinamobile.survey.entity.vo.ExamPlanContainer;
          import com.chinamobile.survey.invite.business.IInviteService;

          /**
           * @author jianqiang.jiang
           *
           */
          public class InviteEndPoint extends ServletEndpointSupport implements
            IInviteService {
           // 將真實的業務bean包裝成WebService

           private IInviteService inviteService;

           // 該方法由Spring調用,將目標業務bean注入。

           protected void onInit() {
            this.inviteService = (IInviteService) getWebApplicationContext()
              .getBean("inviteService");
           }

           // 將業務bean的業務方法暴露成WebService
           public int getAllowAnswerExamPlanCount(long userId) throws Exception {
            return inviteService.getAllowAnswerExamPlanCount(userId);
           }

           public ExamPlanContainer getAllowAnswerExamPlanContainer(long userId, long offset, long maxRow)
             throws Exception {
            return inviteService.getAllowAnswerExamPlanContainer(userId, offset, maxRow);
           }

           }
          注意里面的 ServletEndpointSupport 和對bean的引用

          第三步.編輯兩個文件
            1.web.xml中
            增加
            <!--  定義AxisServlet-->
           <servlet>
            <servlet-name>AxisServlet</servlet-name>
            <servlet-class>
             org.apache.axis.transport.http.AxisServlet
            </servlet-class>
           </servlet>
           <!--  映射AxisServlet,使用通配符-->
           <servlet-mapping>
            <servlet-name>AxisServlet</servlet-name>
            <url-pattern>/services/*</url-pattern>
           </servlet-mapping>
              2.生成server-config.wsdd,放在WEB-INF下
           

          <deployment xmlns="http://xml.apache.org/axis/wsdd/"
           xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
           <handler name="URLMapper"
            type="java:org.apache.axis.handlers.http.URLMapper" />
           <service name="ExamService" provider="java:RPC">
            <parameter name="className"
             value="com.chinamobile.survey.webservice.InviteEndPoint" />
            <parameter name="allowedMethods"
             value="getAllowAnswerExamPlanCount,getAllowAnswerExamPlanContainer" />
            <parameter name="allowedRoles" value="user1,user2" />
           </service>
           <transport name="http">
            <requestFlow>
             <handler type="URLMapper" />
            </requestFlow>
           </transport>
           <beanMapping qname="myNS:ExamPlanContainer"
            xmlns:myNS="urn:BeanService"
            languageSpecificType="java:com.chinamobile.survey.entity.vo.ExamPlanContainer" />
           <beanMapping qname="myNS:WsExamPlan" xmlns:myNS="urn:BeanService"
            languageSpecificType="java:com.chinamobile.survey.entity.vo.WsExamPlan" />

          </deployment>

          注意其中的 返回類型注冊,

          第四步.
          生成客戶端測試代碼:

          package com.chinamobile.survey.webservice;

          import java.util.Iterator;
          import java.util.List;

          import javax.xml.namespace.QName;
          import javax.xml.rpc.ParameterMode;

          import org.apache.axis.client.Call;
          import org.apache.axis.client.Service;
          import org.apache.axis.encoding.XMLType;
          import org.apache.axis.encoding.ser.BeanDeserializerFactory;
          import org.apache.axis.encoding.ser.BeanSerializerFactory;

          import com.chinamobile.survey.entity.vo.ExamPlanContainer;
          import com.chinamobile.survey.entity.vo.WsExamPlan;

          public class ArchiveClient {

           public static void main(String args[]) throws Exception {

            try {
             String endpoint = "http://localhost:8080/exam/services/ExamService";
             Service service = new Service();
             Call call = (Call) service.createCall();

             QName searchresultqn = new QName("urn:BeanService",
               "ExamPlanContainer");
             Class searchresultcls = ExamPlanContainer.class;
             call
               .registerTypeMapping(searchresultcls, searchresultqn,
                 new BeanSerializerFactory(searchresultcls,
                   searchresultqn),
                 new BeanDeserializerFactory(searchresultcls,
                   searchresultqn));
             QName wsExamPlanQN = new QName("urn:BeanService", "WsExamPlan");
             Class wsepcls = WsExamPlan.class;
             call.registerTypeMapping(wsepcls, wsExamPlanQN,
               new BeanSerializerFactory(wsepcls, wsExamPlanQN),
               new BeanDeserializerFactory(wsepcls, wsExamPlanQN));

             call.setTargetEndpointAddress(new java.net.URL(endpoint));
             call.setOperationName(new QName("ExamService",
               "getAllowAnswerExamPlanContainer"));

             call.addParameter("userId", XMLType.XSD_LONG, ParameterMode.IN);
             call.addParameter("offset", XMLType.XSD_LONG, ParameterMode.IN);
             call.addParameter("maxRow", XMLType.XSD_LONG, ParameterMode.IN);

             call.setReturnType(searchresultqn);
             ExamPlanContainer result = (ExamPlanContainer) call
               .invoke(new Object[] { new Long(1), new Long(0),
                 new Long(1000) });
             if (result != null) {
              List list = result.getExamPlanList();
              for (Iterator iter = list.iterator(); iter.hasNext();) {
               WsExamPlan wsExamPlan = (WsExamPlan) iter.next();
               System.out.println(wsExamPlan.getName());

              }

             }

            } catch (javax.xml.rpc.ServiceException e) {
             e.printStackTrace();
            } catch (java.net.MalformedURLException e) {
             e.printStackTrace();
            } catch (java.rmi.RemoteException e) {
             e.printStackTrace();
            }
           }

           public static void testCount() {
            try {
             String endpoint = "http://localhost:8080/exam/services/ExamService";
             Service service = new Service();
             Call call = (Call) service.createCall();

             call.setTargetEndpointAddress(new java.net.URL(endpoint));
             call.setOperationName(new QName("ExamService",
               "getAllowAnswerExamPlanCount"));

             call.addParameter("userId", XMLType.XSD_LONG, ParameterMode.IN);
             call.setReturnType(XMLType.XSD_INT);
             Integer result = (Integer) call
               .invoke(new Object[] { new Long(1) });
             System.out.println(result);
            } catch (javax.xml.rpc.ServiceException e) {
             e.printStackTrace();
            } catch (java.net.MalformedURLException e) {
             e.printStackTrace();
            } catch (java.rmi.RemoteException e) {
             e.printStackTrace();
            }
           }
          }

          第五步:get方式訪問測試
           http://localhost:8080/exam/services/ExamService?method=getAllowAnswerExamPlanContainer&paramter0=1&paramter1=1&paramter2=1

             

          posted on 2009-02-24 00:32 強強 閱讀(1082) 評論(0)  編輯  收藏 所屬分類: Java

          主站蜘蛛池模板: 洮南市| 济源市| 望都县| 嘉祥县| 周口市| 射洪县| 永清县| 十堰市| 平舆县| 安远县| 林西县| 安义县| 五寨县| 和林格尔县| 绥中县| 南投县| 甘孜县| 陈巴尔虎旗| 靖江市| 囊谦县| 嘉兴市| 青海省| 长泰县| 湄潭县| 睢宁县| 什邡市| 页游| 阳原县| 盐亭县| 临夏县| 富蕴县| 奈曼旗| 临猗县| 项城市| 乐平市| 芜湖县| 抚顺市| 乐亭县| 牟定县| 新宁县| 公主岭市|