在我的项目中,我将不得不开发一些基于Web Service技术的数据输入/输出接口。所以到现在为止我一直在研究它。
我对使用 Java 的 Web 服务感到好奇的是我可以使用或不使用什么库。
当我搜索 java 库时,我发现 Axis2 和 CXF 是非常常见和著名的 java w/s 库。问题是我必须使用包含轴的 RAD 7.0。
Axis 和 Axis2 之间似乎有巨大的变化,不幸的是我不能使用 Axis2。
现在,我的合作伙伴提供了WSDL,我必须实现客户端W/S。 如果我通过 Axis、Axis2 或 CXF 从 WSDL 创建客户端代理代码,它们都是相同的代码吗?
或者如果我必须使用 WSDL 来提供我的 W/S 接口与 Axis,这对 Axis2 或 CXF 用户来说会是问题吗?
在我的情况下,我很新,很害怕使用 Axis。 有人可以给我一些建议吗?
我发现的其他一些差异:
对于 Axis 2 开发,需要 Java 版本 5 及更高版本。对于轴 1 java 不需要 v5 或更高版本。它适用于 Java v4.
Axis 是旧 JAX-RPC 1.1 的 RI,Axis 2 是新 JAX-WS 2.x 的实现
Axis 不支持注释,Axis 2 支持注释,因此支持使用注释开发 Web 服务的新方法,例如 @Webservice / @Webmethod 注释。
根据经验,我确实发现一些 WSDL 可以被 Axis1 解析,但不能被 Axis2 解析,并且 Axis2 发送的一些消息在与 Axis1 一起工作的服务上不起作用。
来自生成的 WSDL 的数组中的细微差别,而不是手写的和重音字符被服务器端以不同方式解释(即使用 CDATA 但并非没有)
就个人而言,我使用从 JDK 生成的任何 wsimport 而不是其他工具,但是一些框架(例如 Curam)需要 axis/axis2
有些 WSDL 可以被 Axis1 解析,但不能被 Axis2 解析。 并且 Axis1 在 Java 1.4 版本之前得到支持,之后你会得到与 enum 关键字相关的异常。
使用 -source 5 或更高版本来使用 'enum' 作为关键字。
因为 Axis 正在生成带有 enum 关键字的 java 类。
您可以覆盖这些类和包名称(如在 Axis2 中所做的那样,将枚举包设为常量)并使您自己的 Axis 托管版本与 Java 1.5 或更高版本兼容。 我已经创建了我自己的 axis 托管版本来支持 java 1.5 或更高版本上的遗留 wsdl,它甚至可以使用 java 10.
最好使用 axis 或 axis2,因为它是标准的并且在某些框架或技术上是必需的。