zoukankan      html  css  js  c++  java
  • 采用axis2c进行webservice发布的流程6测试发布的服务

    测试方法有两种,一种是生成采用axis2c生成对应的客户端代码,采用客户端代码进行测试,另一种是采用curl进行提交xml请求文件进行测试,不过自己书写请求xml可能会比较麻烦。

    5.1采用axis2c的客户端代码进行测试

    这一部分介绍采用axis2c的工具生成客户端代码,在此基础上构造c的客户端请求例子。

    首先设定好环境变量:

    export AXIS2C_HOME="/opt/axis2c-1.6.0/"
    
    export AXIS2_HOME="/opt/axis2-1.4.1/"

    客户端代码的生成与服务端的操作类似,对axis2的调用命令略有不同:

    采用wsdl生成对应的客户端代码:

    sh ${AXIS2C_HOME}/bin/tools/wsdl2c/WSDL2C.sh -uri dmsserver.wsdl  -g -d adb -u -uw -f -o client | grep -v 'the classpath'

    下边的代码就是WSDL2C.sh的内容,简单说来就是调用了axis2的java包进行生成。因而axis2的home是必须要指明白的。

    #!/bin/sh
    
    #export AXIS2_HOME=/home/axis2java
    for f in $AXIS2_HOME/lib/*.jar
    do
      AXIS2_CLASSPATH=$AXIS2_CLASSPATH:$f
    done
    export AXIS2_CLASSPATH
    
    echo the classpath $AXIS2_CLASSPATH
    java -classpath $AXIS2_CLASSPATH org.apache.axis2.wsdl.WSDL2C $*

    下面就需要对客户端代码做封装实现对服务的具体调用了。

    采用axis2c自动生成的客户端代码列表如下:

    "ProductCompleteType"

    adb_ProductCompleteType.c

     

    adb_ProductCompleteType.h

    "ProductCompleteResponseType"

    adb_ProductCompleteResponseType.c

     

    adb_ProductCompleteResponseType.h

    "ProductComplete"

    adb_ProductComplete.c

     

    adb_ProductComplete.h

    "ProductCompleteResponse"

    adb_ProductCompleteResponse.c

     

    adb_ProductCompleteResponse.h

    axis2_stub_DmsServer.c和axis2_stub_DmsServer.h中定义了具体的服务调用,这个可以通过查看头文件知悉。

    对于服务的调用,调用方法在axis2_stub_DmsServer.c文件中定义,axis2c生成了两种调用类型模式,一种是异步类型的方法调用,以axis2_stub_start_op这种方式开头的函数,一种是同步方式调用的,以axis2_stub_op开头的函数。当然了由于调用方式的不同,其对应的返回值也有所差别。

    客户端测试需要做的就是构造出服务env,创建出stub,然后进行服务调用。简单起见,就暂且采用同步这种比较简单的方式进行调用了。

    1、构造env

    axutil_env_create_all可以创建出axis的上下文运行环境,

    axutil_env_t * env=axutil_env_create_all (NULL, 0);

    2、创建stub

    axis2_stub_create_DmsServer可以创建stub,需要三个参数上一步创建的env、axis2c的环境目录、服务的地址。这里是针对这个服务测试例子生成的,具体的函数名字是不同的。

    3、进行服务调用

    构造对应服务的请求,并调用相应的函数。构造服务请求的过程同服务端的过程类似。

    通过以上步骤,经过简单封装,成了本例子的测试方案,编译完成后,具体的测试调用如下:

    ./DMSClient_full 127.0.0.1:9090 productComplete food tutou

    如果出现ERROR: cannot get AXIS2C_HOME的错误,export AXIS2C_HOME="/opt/axis2c-1.6.0/"再测。

    5.2采用curl进行测试

    这一部分介绍如何采用curl进行webservices的测试,包括测试过程中的注意事项。

    curl -v -H "Content-Type:text/xml; charset=utf-8" \
    -H "SOAPAction:urn:ProductComplete" -d @request.xml \
    "http://127.0.0.1:8777/axis2/services/DmsServer/"

    服务的路径有所不同,切记。

    下面将解释下命令的意思,-v表示verbose,将curl与服务器之间交互处理的细节内容打印出来,-H表示此次http请求header头信息,此处的header含义是指这次传输的内容是xml,编码方式是utf8,同时也是一个soap类型的请求,而不是普通的http页面请求。在-H设定中的SoapAction与wsdl中的相对应。比如我的这个测试例子在wsdl中的定义如下所示,其中红字标红的部分。-d表示提交的内容,@符号表示此处提交的是一个文件,后边跟的就是文件名字,用于soap请求。-d后边也可以直接跟上xml的字符串,效果类似,如果挂起一长串字符不大好处理。

        <wsdl:binding name="DmsServerSoapBinding" type="tns:DmsServerPortType">
            <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
            <wsdl:operation name="ProductComplete">
                <soap:operation soapAction="urn:ProductComplete" style="document"/>
                <wsdl:input>
                    <soap:body use="literal"/>
                </wsdl:input>
                <wsdl:output>
                    <soap:body use="literal"/>
                </wsdl:output>
            </wsdl:operation>
    </wsdl:binding>

    下面附上请求的xml文档,格式比较简单,也很好书写。如果感觉手写麻烦,可以在采用axis2c客户端测试时,采用抓取下其中发送的xml数据包,比如采用tcpdump -i lo –A这个只是用于本地测试的。

    Xml的请求格式数据如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
        <soapenv:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
        </soapenv:Header>
        <soapenv:Body>
            <n:ProductComplete xmlns:n="http://server.ips.com">
            <n:productCategory>han</n:productCategory>
            <n:productName>xiangduo</n:productName>
            </n:ProductComplete>
        </soapenv:Body>
    </soapenv:Envelope>

    此处采用的curl进行测试的是最简单的,请求的xml里边主要需要对body进行构造,构造出这些必要的请求参数。

    所有一切搞定后,就可以查看具体与webservices之间的交互过程了。注意观察服务器的响应状态。我在测试的时候,刚开始总出现500的服务器内部错误,返回又错误的消息是index out of bound,刚开始还以为服务没有写好呢,检查的时候,才发现将header头中的的text写成test了,xml的文件格式写的也有问题。

    因此在测试的时候,务必检查好curl的命令没有输入错误,xml文件格式是否正确。

  • 相关阅读:
    SpringMVC的ServletContext、根上下文和MVC上下文上分别有什么东西?
    HTTP2密码组黑名单
    How to create a self-signed SSL Certificate ...
    oracle数据库的数据字典视图,数据来自哪个(些)表?
    关于GnuPG的subkey(子密钥)的使用
    签名别人的公钥以及验证签名的公钥
    GnuPG高级指导(6)在其他电脑上启用“我的密钥”
    Spring框架Controller层(表现层)针对方法参数是Bean时HttpServletRequest绑定参数值问题解释
    Mysql only_full_group_by以及其他关于sql_mode原因报错详细解决方案
    Maven生成可以直接运行的jar包的多种方式
  • 原文地址:https://www.cnblogs.com/hanxiangduo/p/2647447.html
Copyright © 2011-2022 走看看