AWS PaaS API参考指南

封装和发布自己的SOAP API

基于AWS PaaS的API架构,应用开发者可以使用Java语言封装和发布自己的SOAP API。

步骤

  1. 在您的App Java工程中编写Java类
  2. 使用Java注解,声明服务类型和参数结构
  3. 确定API请求的返回类型
  4. 发布和浏览服务
  5. 测试发布的API

步骤1:在您的App Java工程中编写Java类

获得本地开发环境,请移步这里

步骤2:使用Java注解,声明服务类型和参数结构

SOAP服务类是一个普通pojo类,该类可以使用JAX-WS规范的JDK注解。还可以使用HTTP API的注解,这样该Java类将同时允许以HTTP和SOAP方式访问。

注解 说明
@WebService JAX-WS注解,详细可参考这里

示例

@WebService(serviceName = "DemoApi")
public class SayHello {
    ...
}
注解 说明
@WebParam JAX-WS注解,详细可参考这里

示例

    // 返回简单String
    public StringResponse say(@WebParam(name = "str1") String str1) {
        StringResponse r = new StringResponse();
        r.setData(str1);
        System.out.println(str1);
        return r;
    }

步骤3:确定API请求的返回类型

同HTTP API,请点击这里

步骤4:发布和浏览服务

将编写的程序编译成jar,存放到您自己的应用lib目录下(假设应用名称是com.abc.apps.do,那么路径应该在%AWS-HOME%/apps/install/com.abc.apps.do/lib),如果开发者引用了三方jar资源,也一同存放到该目录下。

正常情况,这些jar资源将被动态加载到AWS PaaS容器,自动完成发布。当处于开发调试环境时,若首次未自动发布,可重启本地的AWS PaaS服务。

通过AWS CC的服务注册组件注册,为您的App注册SOAP服务,并提供一个全局的服务ID(如demoApi)。

  • 为了避免您开发的服务Id与其他服务冲突,建议使用更具体的差异命名
  • 服务注册中可以设置服务策略,该安全策略来自AWS CC的服务策略组件提供的服务,如果未设置则访问服务不需要安全认证

注册成功后可以通过服务ID后的URL查看服务的WSDL信息,也可以在服务接口文档Web Services列表中浏览到该服务。

本地开发者试着在浏览器输入

http://localhost:8088/portal/r/s?id=demoApi&wsdl=true

步骤5:测试发布的API

使用SoapUI测试发布的SOAP服务

测试say方法,请求结构

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:api="http://api.local.api.poc.apps.actionsoft.com/">
   <soapenv:Header/>
   <soapenv:Body>
      <api:say>
         <!--Optional:-->
         <str1>2017</str1>
      </api:say>
   </soapenv:Body>
</soapenv:Envelope>

测试say方法,返回结果

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <ns2:sayResponse xmlns:ns2="http://api.local.api.poc.apps.actionsoft.com/">
         <return>
            <data>2017</data>
         </return>
      </ns2:sayResponse>
   </soap:Body>
</soap:Envelope>

测试calc方法,请求结构

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:api="http://api.local.api.poc.apps.actionsoft.com/">
   <soapenv:Header/>
   <soapenv:Body>
      <api:calc>
         <!--Optional:-->
         <num1>100</num1>
         <!--Optional:-->
         <num2>20</num2>
      </api:calc>
   </soapenv:Body>
</soapenv:Envelope>

测试say方法,返回结果

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <ns2:calcResponse xmlns:ns2="http://api.local.api.poc.apps.actionsoft.com/">
         <return>
            <num1>100</num1>
            <num2>20</num2>
            <num3>120</num3>
         </return>
      </ns2:calcResponse>
   </soap:Body>
</soap:Envelope>

源码1:SayHello.java

package com.actionsoft.apps.poc.api.local.api;

import javax.jws.WebParam;
import javax.jws.WebService;

import com.actionsoft.bpms.server.bind.annotation.Controller;
import com.actionsoft.bpms.server.bind.annotation.HandlerType;
import com.actionsoft.bpms.server.bind.annotation.Mapping;
import com.actionsoft.bpms.server.bind.annotation.Param;
import com.actionsoft.sdk.service.response.StringResponse;

@Controller(type = HandlerType.OPENAPI, apiName = "Demo API", desc = "API扩展开发演示")
@WebService(serviceName = "DemoApi")
public class SayHello {

    // 返回简单String
    @Mapping(value = "demo.say")
    public StringResponse say(@Param(value = "str1", desc = "字符串1", required = true) @WebParam(name = "str1") String str1) {
        StringResponse r = new StringResponse();
        r.setData(str1);
        System.out.println(str1);
        return r;
    }

    // 返回自定义的对象
    @Mapping(value = "demo.calc")
    public CalcDataResponse calc(@Param(value = "num1", desc = "数字1", required = true) @WebParam(name = "num1") Integer num1, @Param(value = "num2", desc = "数字2", required = true) @WebParam(name = "num2") Integer num2) {
        CalcDataResponse r = new CalcDataResponse(num1, num2);
        return r;
    }

}

源码2:CalcDataResponse.java

package com.actionsoft.apps.poc.api.local.api;

import javax.xml.bind.annotation.XmlRootElement;

import com.actionsoft.bpms.api.common.ApiResponse;

@XmlRootElement
public class CalcDataResponse extends ApiResponse {
    private int num1;
    private int num2;
    private int num3;

    public CalcDataResponse() {

    }

    public CalcDataResponse(int num1, int num2) {
        super();
        this.num1 = num1;
        this.num2 = num2;
        // 计算相加
        num3 = num1 + num2;
    }

    public int getNum1() {
        return num1;
    }

    public void setNum1(int num1) {
        this.num1 = num1;
    }

    public int getNum2() {
        return num2;
    }

    public void setNum2(int num2) {
        this.num2 = num2;
    }

    public int getNum3() {
        return num3;
    }

    public void setNum3(int num3) {
        this.num3 = num3;
    }

}


Seven
 010-62962343-690
 liujx@actionsoft.com.cn
感谢您对该文档的关注!如果您对当前页面内容有疑问或好的建议,请与我联系。如果您需要解答相关技术问题请登录AWS客户成功社区