为什么java.io.ObjectStreamException在WTK存根生成器中用于枚举?

时间:2009-06-01 04:06:24

标签: blackberry java-me java-wireless-toolkit cldc jsr172

我正在使用在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());
}

运行Stub Generator时,有一个用于CLDC 1.0或CLDC 1.1的交换机。使用这两个选项生成会导致同样的问题。

我在Sun找到了一个forum post,没有回复。这篇文章的人指出,“现在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><xs:restriction>包含<xs:enumeration>。所以我只是说这个字段是一个int而不是定义常量?

这只是WTK的一个错误吗?如果是的话,我向Sun提交了一份错误报告,看看他们是否会做出回应。为什么工具包不会将此标记为错误?

所以现在我需要更改界面,使其符合JSR-172标准。是否有工具来阅读WSDL并指出合规性问题?

1 个答案:

答案 0 :(得分:2)

CLDC和Wireless Toolkit都使用Java Micro Edition。 JavaME基于java语言的第2版,这意味着没有泛型,也没有枚举。

调查Blackberry手机的Web服务的第一步是阅读JSR-172规范。