8.2.8. Web服务

8.2.8.1. 关于Web服务整体的限制。

  • Web服务引擎必须使用“Axis 2 ver1.4.1”。

  • 有关 Axis2 详情,请参照 Axis2 的Web网站 (http://axis.apache.org/axis2/java/core/index.html)。

  • Web 服务的传输层必须使用 HTTP。

  • Web 服务的加密必须在 SSL 上才可实现。

  • 必须公开 document-literal 样式的 Web 服务。

  • 通过负载均衡器来实现 Web 服务的负荷分散。
  • 若为分布式构成,需在各 Web Application Server 上部署相同的 Web 服务。
    若 Web Application Server 间部署的 Web 服务不同,
    则无法正常进行 Web 服务的负荷分散。

8.2.8.2. 关于 Axis2 - 1.4.x 的现行标准。

  • 在 Web 服务的消息元素中,无法指定具有继承关系的等级。

  • 在 Web 服务的消息元素中,无法指定内部等级。Stub无法进行正确处理。

  • 若公开为 Web 服务的方法的返回值是 void,且无异常,
    则无论发生什么错误,Web 服务端/客户端双方都不会通知错误。
  • Axis2 的管理控制台(http://hostname/imart/axis2-admin/index.jsp),不支持 URL rewriteing 的会话 ID。

  • 关于从使用了消息接收器“RPCxxxxMessageReceiver”的 XML 到 Java 对象的映射,
    对于定义为“数组”的 Java 对象,若 SOAP 消息的对应元素不存在,
    变换为“空数组”后,可能会变换成“null”。
  • 数据绑定方式使用了“ADB”的 Axis2 Stub,从 XML
    映射到 Java 对象时,定义为“数组”的 Java 对象会做下述变换。
    根据该当前式样,若在 Web 服务/供应商一方发送了“null”,Web 服务/客户
    端会将其解释为“数组长度为1的数组(最开始的元素为“null”)”,若在 Web服务/供应商一方
    发送了“空数组”,Web 服务/客户端将其解释为“null”。
  • Axis2-1.4.1 AXIS2-3870 已被修改。但是,已确认在使用了 Axis2 Stub 时会发生内存泄露。
    Axis2 1.4.1 client stub not freed (https://issues.apache.org/jira/browse/AXIS2-4007)
    intra-mart Accel Platform 中使用的是修改的 AXIS2-4007的Axis2-1.4.1。
    发生了修改的类是“org.apache.axis2.client.Stub”。
  • 若公开为Web服务的方法中将JavaBean指定为参数,
    则无法正确接受发送此JavaBean内的“字节数组(=byte[])”形式的属性数据。
    此为 Axis2 当前式样的限制事项。发送接受二进制文件时,请不要以 JavaBean 属性的形式,
    而是要以“字节数组(=byte[])”的形式来指定被公开为 Web 服务的参数。
  • 公开Web服务的方法的返回类型不能是void。

8.2.8.3. 关于Web服务的认证及认可。

  • Web 服务执行后,会被明确地废弃(注销)。
    因此,intra-mart 登录会话的作用域以 Web 服务的调用为单位。
  • 作为 intra-mart Accel Platform 的帐号信息,认证时使用的密码会被一直保留、使用。
    进行 LDAP 联动时,无法使用 LDAP 方面管理的密码。
  • WS-Security 不支持 intra-mart Accel Platform 用户的认证/许可。

  • 卸载 Web 服务时,无法删除该 Web 服务中已设定的访问权限。

8.2.8.4. 关于Web服务/供应商。

  • Web 服务化的对象为已有的 Java 等级,或 JavaScript 函数。
    (使用从底向上的方法实现Web服务化)
  • 关于脚本开发模式的 Web 服务化,将请求参数作为参数的函数
    不在 Web 服务化的对象之列。所谓请求参数作为参数的函数指的是init()函数、close()函数,以及
    与链接及表单的 action 属性相对应的函数。
  • 关于脚本开发模式的 Web 服务化,对参数值进行更新处理的函数,
    不在 Web 服务化的对象之列。所谓对参数值进行更新处理的函数指的是不只是在函数内部读取参数的值,
    而且还要对参数的值进行更新并将其作为函数执行结束后仍要使用的执行结果。
  • 脚本开发模式中,无法将使用了下述 API 的函数 Web 服务化。
    • forward()
    • redirect()
    • secureRedirect()
    • transmission()
    • Debug.browse()
    • HTTPResponse.sendMessageBody()
    • HTTPResponse.sendMessageBodyString()
    • Module.download.send()
    • Module.alert.back()
    • Module.alert.link()
    • Module.alert.reload()
    • Module.alert.write()
    • PageManager.redirect()
    • HTTPResponse.sendMessageBodyFile()
    • HTTPResponse.sendMessageBodyAsBinary()
    • HTTPResponse.sendMessageBodyAsText()
    • Transfer.toErrorPage()
    • Transfer.toInformationPage()
    • Transfer.toWarningPage()
  • 关于 JavaEE 框架的事件框架的 Web 服务化,
    若 aar 文件内包含了被公开为 Web 服务的 Java 等级,会导致 Web 服务无法运行。

8.2.8.5. 关于 Web 服务/客户端的限制事项。

  • SOAPClient 对象使用了 Axis2 的 CodeGenerationEngine 类。
    因此,无法调用 CodeGenerationEngine 不支持的 Web 服务。
  • SOAPClient 对象在数据绑定方式中使用的是“ADB”的 Axis2。

  • SOAPClient 对象的 getSampleCode() 函数无法生成在 XML 架构的 restriction 中定义了类型等
    的示例数据。关于无法生成的示例数据的类型,请确认所执行的Web服务的式样。
  • 若 Web 服务/操作的输入消息元素的子要素被指定为“maxOccurs=”unbounded””,
    SOAPClient 对象的 getSampleCode() 函数无法正确显示。
  • SOAPClient 对象支持 document-literal 样式的 Web 服务。

  • SOAPClient 不支持非同步型回调形式的 Web 服务。

  • 若要在 WebSphere 中使用 SOAPClient 对象,需将“类加载器的顺序”
    设定为“最先加载了应用程序/类/加载器的类”。
  • 使用 SOAPClient 对象时,若自动生成的 Java Stub 类编译失败,
    则需设定环境变量“AXIS2_HOME”。
  • SOAPClient 对象无法使用与 JavaScript 的保留字名称相同的 Web 服务/操作。

  • 在 SOAP 消息元素名称中,无法仅仅将最前面一个字符指定为大写英文字母。
    例如,若 SOAP 消息的元素名称为“A0001”,Axis2 的访问方法
    会生成“getA0001”“setA0001”的 JavaBeans。
    从此 JavaBeans 属性取名时,由于返回值是“a0001”,因此对象的属性名
    就会变成“a0001”。发生这种现象的原因是,根据 JavaBean 的属性名式样,只有最前面的一个大写英文字符变成了小写字母。
  • SOAPClient API 的Stub代码与2013 Summer(8.0.3)之前的版本不兼容。
    根据下述条件,SOAPClient API 无法正常运行。
    • 从2013 Spring(8.0.3)之前的环境迁移时
    • 使用SOAPClient API时,将Stub的生成方法指定为Never模式
    • 配置了使用2013 Spring(8.0.3)之前的SOAPClient生成的Stub代码时
    若符合上述条件,在2013 Spring(8.0.3)之前的版本生成的Stub代码与
    在2013 Summer(8.0.4)版本中生成的Stub代码不兼容。
    因此,需要再次使用新的2013 Summer(8.0.4)版的SOAPClient API生成Stub代码并重新配置。