java開發axis 1.4 的webserver客戶端和服務端

開發環境:
eclipse 3.7+jdk 1.7+tomcat6.0+axis1.4(axis1.4包可以再http://ws.apache.org/axis下載) 解壓axis-bin-1_4.zip這個包可以看到webapps目錄和lib目錄,把webapp目錄下的axis文件夾考到tomcat的webapps目錄下,之後拷貝activation.jar、mail.jar、tools.jar到%TOMCAT_HOME%\webapps\axis\WEB-INF\lib目錄下。啓動tomcat,訪問http://localhost:8080/axis/happyaxis.jsp如果訪問成功,恭喜你!基本的配置你已經做完了。現在來說一下最關鍵的Webservice的發佈。AXIS提供了兩種發佈方式,一種是即時發佈(Instant Deployment),另外一種是定製發佈(CustomDeployment)。即時發佈提供了一種非常簡單的webservice的發佈方式,但是其中限制太多,因此在實際的開發中定製發佈纔是首選。

1.即時發佈jws

即時發佈就是將Java源代碼文件(.java文件)拷貝到%TOMCAT_HOME%/webapps/zxis目錄下:示例如下

   TyjcComm09BO.java

  publicclass TyjcComm09BO{

     publicString getWgtByHeatNoS(String compId, String brand,

              String groupName, String partCode){

         return“HeatNoS”;

     }

     publicString getTy04Cm01S(String compId, String brand, String groupName,

              String partCode, String heatNo) {

         return“Cm01S”;

     }

}

把TyjcComm09BO.java文件的後綴改成.jws放到%TOMCAT_HOME%\webapps\axis目錄下(也就是工程發佈的目錄),啓動tomcat(或工程的服務)訪問http://localhost:8080/axis/ TyjcComm09BO.jws,如果看到Click to see the WSDL,這個超鏈接就說名發佈成功(用SOAP ui測試服務端業務邏輯是否都正確),然後編寫客戶端

客戶端代碼如下:

java 代碼

packagecom.chnic.test;

importjava.net.URL;

importjavax.xml.namespace.QName;

importorg.apache.axis.client.Call;

importorg.apache.axis.client.Service;

public class Test {

public static voidmain(String[] args) throws Exception{

StringtargetEendPoint = "http://localhost:8080/axis/ TyjcComm09BO.jws"; (這個地址就是發佈的地址)

Service service =new Service();

Call call = (Call)service.createCall();

call.setOperationName(newQName(targetEendPoint, "getWgtByHeatNoS ")); (第二個參數是方法,後面省略第二個方法,是一樣的)

call.setTargetEndpointAddress(newURL(targetEendPoint));

String result =(String) call.invoke(new Object[]{“compId”,” compId”,” groupName”,” partCode” }); //條件

System.out.println(result);

}

}

2.定製發佈 Custom Deployment - Introducing WSDD

 

比起即時發佈定製發佈更加煩瑣也更復雜,但是換來的卻是更大的靈活性,因此在實際項目中定製發佈還是不二的選擇。定製發佈需要你自己編寫一個WSDD

代碼如下:

服務端:

  第一步,寫好接口和實現類

接口:@WebServiceSOAPBinding(style=SOAPBinding.Style.RPC)不可少

/**

 * Iwebservice.java

 *

 * This file was auto-generated from WSDL

 * by the Apache Axis 1.4 Apr 22, 2006(06:55:48 PDT) WSDL2Java emitter.

 */

packagecom.wisco.ty.webservice;

importjavax.jws.WebMethod;

importjavax.jws.WebService;

importjavax.jws.soap.SOAPBinding;

/**

 * 服務端接口

 * @file Iwebservice.java

 * @author 姓名

 * @date 2014-11-19下午1:51:39

 * @version 1.0

 */

@WebService

@SOAPBinding(style= SOAPBinding.Style.RPC)

public interfaceIwebservice extends java.rmi.Remote {

    @WebMethod java.lang.String getWgtByHeatNoS(java.lang.Stringarg0, java.lang.String arg1, java.lang.String arg2, java.lang.String arg3)throws java.rmi.RemoteException;

    @WebMethod java.lang.StringgetTy04Cm01S(java.lang.String arg0, java.lang.String arg1, java.lang.Stringarg2, java.lang.String arg3, java.lang.String arg4) throwsjava.rmi.RemoteException;

}

實現類:@WebService(endpointInterface ="http://localhost/rcsm.war/services/tyWebservice")不可缺,在客戶端要用到

packagecom.wisco.ty.webservice;

importjava.util.ArrayList;

importjava.util.List;

importjava.util.Map;

importjavax.annotation.Resource;

import javax.jws.WebService;

importorg.m6.SpringHolder;

importorg.m6.base.BaseBO;

importorg.springframework.stereotype.Component;

importcom.alibaba.fastjson.JSON;

importcom.bstek.dorado.utils.StringHelper;

importcom.wisco.ty.comm.TyjcComm09BO;

importcom.wisco.ty.webservice.Iwebservice;

 

/**

 * 服務端的業務邏輯

 * @file TyjcComm09BO.java

 * @date 2014-11-13上午9:31:59

 * @version 1.0

 */

@WebService(endpointInterface="http://localhost/rcsm.war/services/tyWebservice")

public classIwebserviceImp implements Iwebservice {

         public final static String CLASS_VERSION= "$Id: IwebserviceImp.java,v 1.0 2014-10-30,下午03:27:21  $";

        

         /* (non-Javadoc)

          * @seecom.wisco.ty.webservice.Iwebservice#getWgtByHeatNoS(java.lang.String,java.lang.String, java.lang.String, java.lang.String)

          */

         public String getWgtByHeatNoS(StringcompId, String brand,

                            String groupName,String partCode) {

                   TyjcComm09BOtyjcComm09BO=(TyjcComm09BO)SpringHolder.getApplicationContext().getBean("tyjcComm09BO");

                   String result =tyjcComm09BO.getWgtByHeatNoS(compId, brand, groupName,

                                     partCode);

                   return result;

         }

 

         /* (non-Javadoc)

          * @seecom.wisco.ty.webservice.Iwebservice#getTy04Cm01S(java.lang.String,java.lang.String, java.lang.String, java.lang.String, java.lang.String)

          */

         public String getTy04Cm01S(StringcompId, String brand, String groupName,

                            String partCode,String heatNo) {

                   TyjcComm09BOtyjcComm09BO=(TyjcComm09BO)SpringHolder.getApplicationContext().getBean("tyjcComm09BO");

                   String result =tyjcComm09BO.getTy04Cm01S(compId, brand, groupName,

                                     partCode,heatNo);

                  returnresult;

         }

業務(可以寫在實現類中,但是這裏因爲用到公司平臺的hibernatespring,所以另外調用方法)

 package com.wisco.ty.comm;

importjava.util.ArrayList;

importjava.util.List;

importjava.util.Map;

importjavax.jws.WebService;

importorg.m6.base.BaseBO;

importorg.springframework.stereotype.Component;

importcom.alibaba.fastjson.JSON;

importcom.bstek.dorado.utils.StringHelper;

import com.wisco.ty.webservice.Iwebservice;

/**

 * 服務端具體業務邏輯

 * @file TyjcComm09BO.java

 * @date 2014-11-13上午9:31:59

 * @version 1.0

 */

@Component("tyjcComm09BO")

public classTyjcComm09BO extends BaseBO {

         public final static StringCLASS_VERSION = "$Id: TyjcComm09BO.java,v 1.0 2014-10-30,下午03:27:21  $";

 

         public String getWgtByHeatNoS(StringcompId, String brand,

                            String groupName,String partCode) {

                   String sql = " SELECTa.heat_no_,sum(b.afm_wgt_) FROM tbty04 a, tbcm01 b "

                                     + "WHERE a.cm01_id_ = b.cm01_id_  ";

                   List<Object> listParam= new ArrayList<Object>();

                   if(StringHelper.isNotEmpty(compId)) {

                            sql = sql + "AND a.comp_id_ = ? ";

                            listParam.add(compId);

                   }

                   if(StringHelper.isNotEmpty(brand)) {

                            sql = sql + "AND a.brand_ = ? ";

                            listParam.add(brand);

                   }

                   if(StringHelper.isNotEmpty(groupName)) {

                            sql = sql +"  AND a.group_Name_ = ? ";

                            listParam.add(groupName);

                   }

                   if (StringHelper.isNotEmpty(partCode)){

                            sql = sql + "AND a.part_code_ = ?  ";

                            listParam.add(partCode);

                   }

                   sql = sql + " ANDa.zl_flag_ = 'N' AND b.status_ not in ('04','55') "

                                     + "group by a.heat_no_  ";

                   List<Map<String,Object>> listMap = this.getJdbcTemplate()

                                      .queryForList(sql, listParam.toArray());

                   String result =JSON.toJSONString(listMap);

                   return result;

         }

         public String getTy04Cm01S(StringcompId, String brand, String groupName,

                            String partCode,String heatNo) {

                   String sql = "SELECTa.BRAND_,a.GROUP_NAME_, a.PART_CODE_,a.PART_NAME_,"

                                     + "b.Y_MONTH_,b.THICK_,b.WIDTH_,b.LENGTH_,b.LABEL_NO_,b.USED_LABEL_NO_,"

                                     + "a.HEAT_NO_,b.AFM_WGT_,b.IN_DATE_  FROMTBTY04 a,TBCM01 b "

                                     + " WHEREa.CM01_ID_ = b.CM01_ID_  ";

                   List<Object> objList =new ArrayList<Object>();

                   if(StringHelper.isNotEmpty(compId)) {

                            sql = sql + "AND a.COMP_ID_ = ? ";

                            objList.add(compId);

                   }

                   if(StringHelper.isNotEmpty(brand)) {

                            sql = sql + "AND a.BRAND_ = ? ";

                            objList.add(brand);

                   }

                   if (StringHelper.isNotEmpty(groupName)){

                            sql = sql + "AND a.GROUP_NAME_ = ? ";

                            objList.add(groupName);

                   }

                   if(StringHelper.isNotEmpty(partCode)) {

                            sql = sql + "AND a.PART_CODE_ = ? ";

                            objList.add(partCode);

                   }

                   if(StringHelper.isNotEmpty(heatNo)) {

                            sql = sql + "AND a.HEAT_NO_ = ? ";

                            objList.add(heatNo);

                   }

                   List<Map<String,Object>> listMap = this.getJdbcTemplate()

                                     .queryForList(sql,objList.toArray());

            String result = JSON.toJSONString(listMap);

                   return result;

         }

}

下面就要發佈服務端:

1、  web.xmlz中加以下內容:

<display-name>Apache-Axis</display-name>

    <listener>

       <listener-class>org.apache.axis.transport.http.AxisHTTPSessionListener</listener-class>

    </listener>

   

  <servlet>

   <servlet-name>AxisServlet</servlet-name>

    <display-name>Apache-AxisServlet</display-name>

    <servlet-class>

       org.apache.axis.transport.http.AxisServlet

    </servlet-class>

  </servlet>

 

  <servlet>

   <servlet-name>AdminServlet</servlet-name>

    <display-name>Axis Admin Servlet</display-name>

    <servlet-class>

       org.apache.axis.transport.http.AdminServlet

    </servlet-class>

   <load-on-startup>100</load-on-startup>

  </servlet>

 

  <servlet>

   <servlet-name>SOAPMonitorService</servlet-name>

    <display-name>SOAPMonitorService</display-name>

    <servlet-class>

       org.apache.axis.monitor.SOAPMonitorService

    </servlet-class>

    <init-param>

     <param-name>SOAPMonitorPort</param-name>

     <param-value>5001</param-value>

    </init-param>

    <load-on-startup>100</load-on-startup>

  </servlet>

 

  <servlet-mapping>

   <servlet-name>AxisServlet</servlet-name>

   <url-pattern>/axis/servlet/AxisServlet</url-pattern>

  </servlet-mapping>

 

  <servlet-mapping>

   <servlet-name>AxisServlet</servlet-name>

   <url-pattern>*.jws</url-pattern>

  </servlet-mapping>

 

  <servlet-mapping>

   <servlet-name>AxisServlet</servlet-name>

   <url-pattern>/services/*</url-pattern>

  </servlet-mapping>

 

  <servlet-mapping>

   <servlet-name>SOAPMonitorService</servlet-name>

   <url-pattern>/SOAPMonitor</url-pattern>

  </servlet-mapping>

 

 <!-- uncomment this if you want the adminservlet -->

 <!--

  <servlet-mapping>

   <servlet-name>AdminServlet</servlet-name>

   <url-pattern>/servlet/AdminServlet</url-pattern>

  </servlet-mapping>

 -->

 

<!--     <session-config> -->

        Default to 5 minute session timeouts

<!--        <session-timeout>5</session-timeout> -->

<!--     </session-config> -->

 

    <!-- currently the W3C havent settled ona media type for WSDL;

    http://www.w3.org/TR/2003/WD-wsdl12-20030303/#ietf-draft

    for now we go with the basic 'it's XML'response -->

  <mime-mapping>

    <extension>wsdl</extension>

    <mime-type>text/xml</mime-type>

  </mime-mapping>

 

  <mime-mapping>

    <extension>xsd</extension>

    <mime-type>text/xml</mime-type>

  </mime-mapping>

 

  <welcome-file-listid="WelcomeFileList">

   <welcome-file>index.jsp</welcome-file>

   <welcome-file>index.html</welcome-file>

   <welcome-file>index.jws</welcome-file>

  </welcome-file-list>

2.Webservice發佈文件:server-config.wsdd

 <?xml version="1.0"encoding="UTF-8"?>

<deploymentxmlns="http://xml.apache.org/axis/wsdd/"

   xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">

    <handlertype="java:org.apache.axis.handlers.http.URLMapper"name="URLMapper"/>  

    <service name="tyWebservice"provider="java:RPC">(服務端service名字)

        <parametername="className"value="com.wisco.ty.webservice.IwebserviceImp" />(實現類的地址)

        <!-- * 代表所有的方法都暴露 -->

        <parameter name="allowedMethods"value="*" />

    </service>

     <transportname="http">   

      <requestFlow>   

<handlertype="URLMapper"/>   

</requestFlow>   

</transport>   

</deployment>

然後就可以啓動工程,同事服務端也發佈了,然後訪問http://localhost/rcsm.war/services就可以看到也可以訪問(http://localhost/rcsm.war/services/tyWebservice?wsdl)只是訪問的界面不一樣(爲了保險就好用soap ui把這個地址放到裏面去測一下),如果沒問題,服務端就發佈成功。

客戶端代碼如下:

 

packagecom.wisco.ty.comm;

importjava.util.List;

importjavax.xml.namespace.QName;

import org.m6.base.BaseBO;

importorg.springframework.stereotype.Component;

importorg.apache.axis.client.Call;

import org.apache.axis.client.Service;

/**

 * 客戶端具體業務邏輯

 * @file TyjcComm10BO.java

 * @author 姓名</a>

 * @date 2014-11-19下午1:53:10

 * @version 1.0

 */

@Component("tyjcComm10BO")

@SuppressWarnings("unchecked")

public classTyjcComm10BO extends BaseBO   {

         public final static StringCLASS_VERSION =

                            "$Id:TyjcComm10BO.java,v 1.0 2014-10-30,下午03:29:00 $";

         @SuppressWarnings("rawtypes")

         public String getWgtByHeatNoC(StringcompId,String brand,String groupName,String partCode)throws Exception{

                            StringtargetEendPoint  ="http://localhost/rcsm.war/services/tyWebservice";

                            Service service =new Service();

                          Call call = (Call)service.createCall();

                          call.setTargetEndpointAddress(targetEendPoint);

                          call.setOperationName(newQName(targetEendPoint, "getWgtByHeatNoS"));  // 訪問服務端的地址,服務端業務提供的方法

                          String result = (String) call.invoke(newObject[]{compId,brand,groupName,partCode});

                          if(result!=null){

                          return result;

                          }

         return null;

         }

         @SuppressWarnings("rawtypes")

         public String getTy04Cm01C(StringcompId, String brand,

                            String groupName,String partCode, String heatNo) throws Exception{

                                       String targetEendPoint  ="http://localhost/rcsm.war/services/tyWebservice";

                                       Service service = new Service();

                                   Call call = (Call)service.createCall();

                                   call.setTargetEndpointAddress(targetEendPoint);

                                   call.setOperationName(new QName(targetEendPoint,"getTy04Cm01S"));  //       訪問服務端的地址,服務端業務提供的方法                           

String result = (String) call.invoke(newObject[]{compId,brand,groupName,partCode,heatNo});

                                   if(result!=null){

                                   return result;

                                   }

return null;

                   }

}

 

發佈了32 篇原創文章 · 獲贊 10 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章