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服务的负荷分散。例如,若使用了 Apache HTTP Server 2.2.x 作为Web服务器,则可在 Resin 的 mod_caucho 上实现负荷分散。 若为分布式构成,需在各 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代码并重新配置。