我正在使用在 WCF 中实现的 Web 服务,它在接口中定义了枚举。我正在尝试从 Java BlackBerry 客户端调用它。我正在使用 Eclipse 为 BlackBerry 开发 Java 应用程序。我正在使用Sun Java Wireless Toolkit (WTK) 2.5.2 生成存根代码,因为 Web 服务相当大(Windows Mobile 客户端已经在使用)。
当我尝试使用 WTK 生成存根代码时,我在 Eclipse 中收到有关枚举的错误。在以下函数中,它抱怨 java.io.ObjectStreamException 无法解析为类型。
private Object readResolve()
throws java.io.ObjectStreamException {
return fromValue(getValue());
}
运行存根生成器时,有一个用于 CLDC 1.0 或 CLDC 1.1 的开关。使用这两个选项生成会导致相同的问题。
我在 Sun 找到了一个关于此的论坛帖子,但没有任何回应。这篇文章中的人说,“现在 java.io.ObjectStreamException 不在 CLDC 中,而是在 CDC 中。是否有一个很好的工具可以为 J2ME 特别是 CLDC 1.0/1.1 创建 Web 服务存根?” 我通过查看 [documentation 3 )验证了它在 CLDC 1.1 中不存在。
Eclipse 中有两个快速修复程序可以解决这种情况:1)在包“java.io”中创建类“ObjectStreamException”或 2)修复项目设置(希望我添加参考)。
更新:
这是 JSR-172 规范所说的……
5.2.5 枚举 JAX-RPC 子集不提供对 XML 枚举的支持。
5.2.6 由限制派生的简单类型 JAX-RPC 子集不支持通过限制派生简单类型。
WCF 枚举的WSDL 生成一个<xs:simpleType>
包含. 那么我是否只是说这个字段是一个 int 而不是定义常量?<xs:restriction>
<xs:enumeration>
这只是WTK中的一个错误吗?如果是这样,我向 Sun 提交了一份错误报告,看看他们是否做出回应。为什么工具包不将此标记为错误?
所以现在我需要更改接口,使其符合 JSR-172。是否有工具可以阅读 WSDL 并指出合规性问题?