【发布时间】:2016-05-04 17:43:02
【问题描述】:
我正在为一家公司进行项目改造,他们希望在前端/客户端和后端/服务器之间拆分系统(更像是前端和数据库服务器之间的中间人),我应该使用 JAX-WS RPC 并维护当前的功能。
通过维护功能,它们意味着某些方法应该返回 null,这是 WS-I 所禁止的。
在寻找可能的解决方案时,我偶然发现了这篇文章:http://victor-ichim.blogspot.com.br/2011/03/rpcliteral-and-null-object-pattern.html,它通过使用 EJB 拦截器拦截并用空对象替换空结果,基本上解决了类似的问题。
围绕这个概念,我想像这样截取结果,用类似字符串模板的东西替换 null,在客户端再次截取它,然后用 null 替换该模板。
我的问题是:
- 默认情况下它们不使用 EJB,因此本身没有拦截器。是否有一些适用于 Tomcat 和 JBoss 的实现?
- 即使我能够拦截返回服务器端,我怎么能在客户端呢?
- 如果我可以使用 SOAPHandlers,如何避免因尝试返回 null 而引发 SOAP 错误?
【问题讨论】:
-
您是否尝试过使用处理程序jax-ws.java.net/articles/handlers_introduction.html ?
-
@VirtualTroll 如前所述,我怎样才能避免引发故障?我已经尝试过了,但是如果方法返回 null(甚至不是 handleFault),则不会调用处理程序,它只是将通知直接发送到客户端...
-
您能提供在 JBoss 或 Tomcat 上声明 Web 服务的方式吗?最后但并非最不重要的一点是,您可能想探索 aspectJ(您可以在其中定位方法的终止)
-
还有一件事:你的 web 服务是用 @SOAPBinding(style = Style.DOCUMENT) 还是 @SOAPBinding(style = Style.RPC) 注释的?
-
@VirtualTroll RPC,根据他们的要求。此外,我确实尝试切换到 DOCUMENT,但这也需要非重载方法,这反过来会破坏依赖于现有方法的当前代码。我想我会准备一个我目前拥有的基本样本并尽快更新我的帖子。 WS 通过 sun-jaxws.xml 声明,指向实现类,实现类通过“实现”指向 SEI。
标签: java tomcat jakarta-ee soap jax-ws