我使用的是 SAP NetWeaver 7.3 EHP 1(JEE5 认证),我为现有的 WSDL 生成了一个 Web 服务框架。此 Web 服务中的所有方法都是非阻塞的,因此使用@Oneway
. 服务本身工作得很好。
不过,我还需要访问注入WebServiceContext
,这就是麻烦开始的地方。我可以很好地注入上下文,但对它的每次调用都只会在特定于服务器的 NPE 或 ISE 中结束。我有点能理解,因为非阻塞调用是由 SAP 的 JAX-WS 实现异步执行的。但是,我尝试通过查看 JAX-WS 规范来验证这种行为。现在我要么是盲人,要么规范没有明确说明 aWebServiceContext
不能用于非阻塞 Web 方法。事实上,在整个最新版规范的第 5.3 章中,@Oneway
都没有提到一次。主要描述是
javax.xml.ws.WebServiceContext 接口使端点实现对象以及可能共享其执行上下文的任何其他对象都可以访问与正在服务的请求有关的信息。在调用其 Web 服务方法之一之外的组件的 WebServiceContext 上调用任何方法的结果是未定义的。如果一个实现检测到这样的用法,它应该抛出一个 java.lang-.IllegalStateException。
我想重点是“请求被服务”的定义。在 SOAP 操作的异步处理时,HTTP 请求已经完成。但是话又说回来,我没有访问“在调用其 Web 服务方法之外”的上下文。我很困惑...
你们有谁知道我是否应该被允许以WebServiceContext
非阻塞的网络方法访问?谢谢!