我目前正在开发一个在 Java 中使用 JAX-WS Web 服务的项目。全局主题是这样的:用户在本地创建一个对象,比如说一个Agent。他调用第一个web 服务并将其代理传递给 web 服务。Web 服务处理代理(修改其属性:例如生命点),并将其传递给另一个 Web 服务。此调用是从第一个 Web 服务发出的,因此用户在此过程中无事可做。
在一系列网络服务之后,用户检索已修改的代理。
我的项目的目的是设计 2 个部分:
- 指定前面描述的行为的框架:webservices、代理和迁移过程
- 使用我的框架的演示应用程序。主要区别在于添加了一个 GUI 和一个扩展 Agent 的新类 Avatar。所以迁移过程仍然是“由框架”完成的,使用代理对象。
以下代码显示了一个简单的示例,说明我如何调用我的 web 服务、托管我的 Avatar,然后从服务中检索代理:
// connection to the server
URL endpoint= new URL("http://SERVER/tomcat/KiwiBidonDynamique/ServiceWebBidonDeDadou?wsdl");
QName serviceName=new QName("http://avatar/","ServeurKiwiBidonService");
Service service = Service.create(endpoint, serviceName);
WebService port = service.getPort(WebService.class);
Avatar myAvatar = new Avatar(1, "Jack the Ripper");
port.hostAgent(myAvatar);
// some process on the service...
Avatar myAvatarTransformed = (Avatar) port.getAgent("AgentNumberOne");
当我这样做时,我在最后一行出现异常:
Exception in thread "main" java.lang.ClassCastException: agent.Agent cannot be cast to avatar.Avatar
经过大量的日志阅读,我想原因是网络服务的工作方式。当被调用时,我在参数中给出的 Avatar 被编组在我的 JVM 中,然后在服务上解组,但服务仅在解组时构造一个 Agent。这样做,它会截断特定于 Avatar 的数据。然后,当我尝试从服务中检索我的代理时,它无法转换为 Avatar。
有没有办法在服务上作为代理处理时保留头像信息?我可以以某种方式编写自己的编组/解组吗?
非常感谢。