[AIX Solaris HP-UX Linux Windows][z/OS]

在 SCA 应用程序中使用 HTTP 绑定(已弃用)

可以在服务组件体系结构 (SCA) 应用程序中使用连线格式为 JSON-RPC 的 HTTP 绑定,以将服务公开给远程 Web 浏览器客户机。 JSON-RPC 是一种远程过程调用 (RPC) 协议,编码为JavaScript对象表示法 (JSON) 格式。

有关此任务

使用 HTTP 绑定来公开 SCA 服务,以供远程 Web 客户机使用。 本主题描述如何将 Java™ 实现公开为服务,以供浏览器客户端使用本机 Dojo 接口和 RPC 库使用。

要在 JavaScript 代码中使用本机 SCA 引用,请参阅有关将 JavaScript 中的窗口小部件实现与 HTTP 绑定配合使用的主题。

过程

  1. 在 SCA 组合定义中配置 Java 服务。

    在组合定义中通过 HTTP 绑定来公开 Java 服务;例如:

    <composite>
      <service name="EchoService" promote="EchoComponent">
        <interface.java interface="echo.Echo"/>
        <tuscany:binding.http uri="/EchoService"/>
          <tuscany:wireFormat.jsonrpc/>
        </tuscany:binding.http>
      </service>
    
      <component name="EchoComponent">
        <implementation.java class="echo.EchoComponentImpl"/>
      </component>
    </composite>

    本示例将 echo.Echo 接口中所定义的方法公开给 Web 浏览器客户机。 echo.EchoComponentImpl 类会实现 Echo 接口并为组件提供该实现。 在 "/EchoService" 相对统一资源标识 (URI) 上公开服务。

    示例 HTTP 绑定 URI /EchoService 是相对 URI。 要运行产品集群中使用 HTTP 绑定的应用程序,请指定相对 URI。 如果绑定指定绝对 URI,那么您无法运行产品集群中的应用程序,例如 http://localhost:9080/newsService

  2. 选择序列化引擎

    wireFormat.jsonrpc 会告诉绑定使用缺省 IBM JSON RPCAdapter 来序列化/取消序列化 JSON 数据。 (可选)您可以使用 Jackson 来执行序列化/取消序列化操作。 要使用 Jackson,请将 JVM 定制属性 com.ibm.ws.soa.sca.json.serializer.jackson 设置为 true

    Jackson 和 RCPAdapter 序列化器具有不同的性能特征,具体取决于 JSON 有效内容中的因子数。 请尝试这两者以确定哪一个最适合有效内容。

  3. 从 Web 浏览器访问服务。

    例如,要访问 EchoService 服务,请在 HTML 文件或 JavaServer Pages (JSP) 文件中,使用 Dojo 工具箱应用程序编程接口来访问 /EchoService 处提供的服务:

    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Echo...</title>
    <script type="text/javascript" src="./dojo/dojo.js"></script>
    <script>
      dojo.require("dojo.io.script")
      dojo.require("dojo.rpc.RpcService")
      dojo.require("dojo.rpc.JsonService")
      dojo.require("dojo.rpc.JsonpService")
      
      function filladdr(){
        var nameElement=document.getElementById("name");
        var name=nameElement.value;
        var echo = new dojo.rpc.JsonService("/EchoService?smd");
        echo.echo(name).addCallback(fillmsg);
      }
      
      function fillmsg(result){
        var line=document.getElementById("line1");
        line.value=result;
      }
    </script>
    </head>
    <body>
    Enter a string: <input id="name" type="text">
    <input type="submit" value="Echo String" onClick="filladdr()"><br>
    <p>Echo </p><input id="line1" type="text" size="50"><br><br>
    </body>
    </html>

    传递到 dojo.rpc.JsonService 构造函数 "/EchoService?smd" 的 URI 包含查询字符串 "smd",此字符串位于组合的 <binding.http> 定义中所指定 URI 的末尾。 使用 Dojo 客户机时,需要位于此 URI 末尾的查询字符串 "smd"

结果

本示例输出的 HTML 输出显示两个文本框和一个 "submit" 按钮。 当用户在第一个框中输入文本并单击 submit 按钮时,会执行以下步骤:

  1. filladdr() 方法中的 JavaScript 代码会获取在第一个文本框中输入的值。
  2. filladdr() 方法会实例化指向 URI "/EchoService?smd" 的 dojo.rpc.JsonService 对象。
  3. JavaScript 代码会对该 JsonService 对象运行 "echo(String)" 方法,促使将 JSON-RPC 请求发送到 "/EchoService?smd"
  4. SCA 运行时通过运行 EchoComponentImpl.echo(String) 方法来处理 URI 请求。 会将结果作为 HTTP 响应返回到客户机。
  5. Web 客户机会使用从服务返回的值,运行指定的回调方法 "fillmsg(result)"
  6. fillmsg(result) 方法中的 JavaScript 代码会将第二个文本框更新成包含从服务调用返回的文本。
从 HTML 文件访问的 HTTP 绑定示例

下一步做什么?

请考虑 JSON 转换的支持数据类型。 JSON-RPC 请求的参数会以 JSON 格式发送到服务器,且必须由 SCA 运行时进行变换,供在 Java 实现中使用。 对客户机的响应也是 JSON 格式,因此 SCA 运行时会将从 EchoComponentImpl.echo() 方法返回的值转换回 JSON。 例如,echo("Testing...") 可将以下数据提交到服务器:

{"params":["Testing..."],"method":"echo","id":1}

Java 方法 EchoComponentImpl.echo(String message) 是以字符串参数 "Testing..." 进行调用,且返回字符串对象 "echo: Testing..."。 返回到 Web 客户机的 JSON 响应可能如下所示:

{"id":1,"result":"echo: Testing..."}
表 1. JSON 转换支持的数据类型 转换使 Web 客户机和 Java 实现可使用数据。
数据类型
基本类型 <==> JSON <==> 基本类型
基本类型的数组 <==> JSON <==> 基本类型的数组
Java bean <==> JSON <==> Java bean
列表 <==> JSON <==> 列表
地图 <==> JSON <==> 地图
设置 <==> JSON <==> 设置