【发布时间】:2011-01-06 21:48:44
【问题描述】:
简介。有一个生产系统,其中一些独立的客户“发明”了一些具有某些属性和行为的对象——可以为这些对象分配一些值,将它们启动到操作中,并在执行时/执行时读取它们的状态。 一切都通过 Web 界面进行:客户端登录、分配值、注入对象、启动容器并看到他的对象发生变化。
一切都基于客户端的 JAXB 兼容模式。 Schema 被编译成 Java 类并打包为客户端的 jar。 (非常感谢帮助我即时完成这项工作的 stackoverflow 成员)。
这就是问题所在:他们希望 Web 服务 (SOAP) 能够通过 Web 界面完成他们目前所做的一切。当然,使用根据 JAXB 模式的 wsdl 类型,它们每天都会动态更改和部署:( 实际上,他们通过网络进行的所有操作都是:
- 启动/停止应用容器(普通任务,没问题)
- 将客户端定义的对象注入到容器中
- 从容器中检索特定类型的对象
一旦“2”没问题,“3”就不是问题了。但是“2”让我发疯了,在我开始做某事之前,我需要你的建议。就 WebService 而言,我的问题是:假设参数类型由客户端的 JAXB 模式定义,我如何使用以下方法发布 WS 端点:
@WebMethod
public void inject(UserDefinedObject obj) {
getAppContainer().inject(obj); // that's all I have to implement
}
以下是我正在考虑的方法:
使用对象作为参数:
public void inject(Object obj);和代码ServletFilter根据客户端的架构修改 xml 请求/响应。但我不确定 WS servlet 在这种情况下不会检查方法签名并抛出异常。另一个问题是我是否可以从该方法中访问请求的 xml 以执行 JAXB 解组。由于我已经在编译客户端 jar,我还可以编译 Web 服务端点并将它们作为 OSGI 包动态部署。我对 OSGI 完全陌生,这里有太多问题:有可能吗,我的耳朵呢,我需要把所有东西都做成 OSGI,如何与 EJB 通信等等。
更多谷歌搜索,但恐怕 Brin 和 Page 会开始向我收费。
还有其他想法吗?
【问题讨论】:
标签: java web-services jaxb jax-ws osgi