我尝试创建一个包含java.lang.Object参数的web方法,但收到的错误类似于: http://community.jboss.org/message/532500
一个人回答这句话说: “您只能传递JAXB支持的类型Web方法参数。 java.lang.Object不能作为Web方法参数传递。“
事实上,当我将参数类型更改为除Object以外的其他类型时,它就会起作用。
如果我不能将Object作为web方法参数传递,那么这是什么原因以及当我想通过单个Web方法传递各种对象类型时如何处理这些情况?
如果我能怎么做呢?
答案 0 :(得分:2)
我不是一个庞大的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);
您已经设置了一个需要(DemuxEnum, byte[])
的Web服务端点。对于奖励积分,您可以使用其他串行器/解串器技术,如Apache Thrift或Google ProtocolBuffers。
编辑:显而易见的缺点是,如果它是一个面向客户的网络服务,那就不会这样了。如果是这种情况,你可能最好枚举具有具体参数的web方法。
答案 1 :(得分:2)
更好的方法是使用JAXB作为他收到的替代帖子中回答的OP概述 - 请参阅此处:http://myarch.com/create-jax-ws-service-in-5-minutes。