http怎么请求到axis webservice 中的方法

 我来答
huanglenzhi
推荐于2016-10-20 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
采纳数:117538 获赞数:517189
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。

向TA提问 私信TA
展开全部

第一步:服务器端的开发

(1)开发java文件

代码如下:

接口文件:IBbossGroupInfoService.java

接口
package com.asiainfo.b2p.soap.interfaces;

import java.rmi.RemoteException;

public interface IBbossGroupInfoService {

    // 根据集团编号查询集团基本信息
    /**
     * 集团编号 GROUP_NUM 集团名称 GROUP_NAME 公司地址 CO_ADDR 集团状态 GROUP_STATE 集团开户时间
     * START_TIME 传真 FAX 企业网址 WEB_URL 证件类型 CARD_TYPE 证件号码 CARD_CODE
     * 公司邮编CO_POSTCODE 联系电话 TEL_NUM 法人代表名称 PERSON_NAME 发展类型 DEVELOP_TYPE
     * 地区编码REGION_ID regionId
     * 
     * @throws Exception
*/
    public abstract String groupInfo(long groupNo) throws Exception,
            RemoteException;

    // 根据集团编号查询集团订购历史
    public abstract String groupSubHistoryInfo(long groupNo) throws Exception;

}

 

 实现类:IBbossGroupInfoServiceImpl.java

实现类
package com.asiainfo.b2p.soap.impl;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.asiainfo.b2p.soap.interfaces.IBbossGroupInfoService;

/**
 * @Product esop_dev
 * @FileName IBbossGroupInfoServiceImpl.java
 * @History TODO 根据集团编号,查询集团基本信息、集团用户信息、集团订购历史
 * @Version 1.0.0
 * @Date Nov 22, 2011
 * @Author pantaipeng
 * @Content 最初版本
*/
public class IBbossGroupInfoServiceImpl implements IBbossGroupInfoService {
    private static transient Log log = LogFactory
            .getLog(IBbossGroupInfoServiceImpl.class);


    // 根据集团编号查询集团基本信息
    public String groupInfo(long groupNo) throws Exception, RemoteException {
        log.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>集团编号=" + groupNo);
        //方法体我省略了,为了测试我仅加入一句打印语句
        System.out.println("我是一个公共的方法,作用是根据集团编号查询集团基本信息");
        String xml="<message>public_groupInfo</message>";//为了测试,返回的信息我也是随便写的一个字符串
        return xml;
    }

    // 根据集团编号查询集团订购历史
    public String groupSubHistoryInfo(long groupNo) throws Exception {

        log.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>集团编号=" + groupNo);
        //方法体我省略了,为了测试我仅加入一句打印语句
        System.out.println("我是一个公共的方法,作用是根据集团编号查询集团订购历史");
        String xml="<message>public_groupSubHistoryInfo</message>";//为了测试,返回的信息我也是随便写的一个字符串
        return xml;
    }
}

 

      说明:为了更加的接近实际的开发,这个是本机上运行的程序,实现的功能是通过一个编号查询相关信息拼成一个字符串,方法体的部分我删除了,你需要用这个代码的话,直接拷贝修改包名称就可以直接用了。

(2)wsdd文件

wsdd文件只需加入一列几行(前提是你之前已经有wsdd文件了,没有的话可以在下载的apache的demo中拷贝一个):

wsdd
<service name="GroupInfoService" type=""  provider="java:RPC">
  <parameter name="className" value="com.asiainfo.b2p.soap.impl.IBbossGroupInfoServiceImpl" ></parameter>
  <parameter name="allowedMethods" value="*"/>
</service>

 

      这个文件放在项目的WEB-INF下面。<service>标签的name属性是发布的webservice的名称,可以自己命名,第一个<parameter>标签的value属性指定实现类的完整路径,包括类名。其他的地方默认就好。

(3)配置web.xml文件

web.xml
  <servlet>
    <servlet-name>AxisServlet</servlet-name>
    <display-name>Apache-Axis Servlet</display-name>
    <servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>AxisServlet</servlet-name>
    <url-pattern>/services/*</url-pattern>
  </servlet-mapping>

 

指定处理类以及映射就好,如果像这样配置的话,后面再写webservice的话,这个文件就不用再配置了。

第二步:客户端的开发

(1).动态调用接口


(2).使用从WSDL生成的存根generated Stubs from Service WSDL description

第一步:配置genclient.bat文件


右键单击“编辑”打开bat文件如下(为了便于说明,每行的意思我就直接写在后面了):


set Axis_Lib=E:\esop\lib       -----指定工程的lib目录

set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%  -----默认

set Output_Path=E:\esop\src   -----指定工程的src目录

set Package=com.asiainfo.maks.webservices.pbosswebclient -----指定生成的四个文件的存放位置

%Java_Cmd% org.apache.axis.wsdl.WSDL2Java -o%Output_Path% -p%Package%  ----- 默认http://10.10.146.82:8080/esop_dev/services/GroupInfoService?wsdl   -----指定wsdl文件的路径


第二步:用genclient.bat生成四个客户端类


双击编译好的bat文件,执行后生成的四个java类如下:

 第三步:写测试类调用webservice

wsdl
package test.webserviceclient;

import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import javax.xml.rpc.ParameterMode;
import javax.xml.rpc.ServiceException;
import org.apache.axis.client.Call;
import org.apache.axis.encoding.XMLType;

public class Test {
    /**
     * 通过genClient.bat文件生成的webservice客户端调用webservice服务的步骤如下:
     * 先介绍创建的四个文件分别为:
     * IBbossGroupInfoServiceImpl 定义了web服务接口,
     * IBbossGroupInfoServiceImplService 定义了用户获取web服务接口的方法
     * IBbossGroupInfoServiceImplServiceLocator 接口IBbossGroupInfoServiceImplService的具体实现
     * GroupInfoServiceSoapBindingStub web服务客户端桩,通过该类与服务器交互,该类实现了IBbossGroupInfoServiceImpl接口
     * 1.创建service对象 
     * 2.创建url对象 
     * 3.创建client对象 
     * 4.调用webservice的方法
*/
    public static void test1() {
        // 1.创建一个service对象
        IBbossGroupInfoServiceImplService service = new IBbossGroupInfoServiceImplServiceLocator();

        try {
            // 2.创建一个URL对象,传入wsdl的地址够过URL的构造方法创建
            String wsdlUrl = "http://10.10.146.82:8080/esop_dev/services/GroupInfoService?wsdl";
            URL url = new URL(wsdlUrl);

            // 3创建一个client对象
            IBbossGroupInfoServiceImpl client = service
                    .getGroupInfoService(url);

            // 4调用webservice的方法
            long groupNo = 2100000014L;
            String res = client.groupInfo(groupNo);

            System.out.println(res);

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (ServiceException e) {
            e.printStackTrace();
        } catch (RemoteException e) {
            e.printStackTrace();
        }

    }

    public static void main(String[] args) {
        test1();
    }

}

转载仅供参考,版权属于原作者。祝你愉快,满意请采纳哦

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式