我不是一个巨大的 JAXB/JAX-WS 人,但是:他可能是对的。
我们在内部为此使用的一种模式——因为当您通过 Web 服务边界发送对象时,您基本上是将它们扁平化为仅用 WS-I 配置文件的词汇表可以表达的东西——是手动序列化任何对象您正在尝试通过调用者和服务理解的枚举发送并为反序列化过程提供一些上下文。
在以下简单示例中,DemuxEnum
将是一个枚举,其中包含您要发送的所有类型的值:
MyObject obj = new MyObject();
ByteArrayOutputStream byteOutStream = new ByteArrayOutputStream();
ObjectOutputStream objectOut = new ObjectOutputStream(byteOutStream);
objectOut.writeObject(obj);
objectOut.close();
byte[] serializedObject= byteOutStream.toByteArray();
someWSObject.SendObject(DemuxEnum.MyObjectType, serializedObject);
您已经设置了一个 Web 服务端点,该端点采用(DemuxEnum, byte[])
. 对于奖励积分,您可以使用替代的序列化器/反序列化器技术,如Apache Thrift或Google ProtocolBuffers。
编辑:这样做的明显缺点是,如果它是面向客户的 Web 服务,那将无法运行。如果是这种情况,您可能最好枚举具有具体参数的 Web 方法。