【问题标题】:Use WebServiceContext outside WebService在 WebService 之外使用 WebServiceContext
【发布时间】:2015-05-08 11:51:29
【问题描述】:

在我的 Web 服务中,我有:

@WebService(serviceName = "myservice")
public class ServiceName{

    @Resource
    private WebServiceContext context;

在无状态类中我想使用相同的操作:

@Stateless
public class MakeHappen{

 @Resource
        private WebServiceContext context;

但是我收到了一个 EJB 异常。如何在 Web 服务之外注入此资源?

【问题讨论】:

  • 您具体想从WebServiceContext 获取哪些信息
  • 你已经回答了我的问题;)

标签: java web-services servlets ejb


【解决方案1】:

AFAIK 不,仅在 Web 服务的上下文中。

见Interface WebServiceContext

WebServiceContext 使 Webservice 端点成为可能 访问消息上下文和安全性的实现类 与正在服务的请求相关的信息。通常一个 WebServiceContext 被注入到一个端点实现类中 使用@Resource 注解。

在您的情况下,您应该将无状态 EJB 装饰为 Web 服务。无状态 EJB 的开放方法可以表示为 Web 服务。

@Stateless
@WebService
public class MakeHappen {

@Resource
private WebServiceContext context;

...

【讨论】:

  • 有没有类似webservicecontext的对象可以用在ejb容器上?
  • 关于我的最后一个问题 -stackoverflow.com/questions/30105806/…,是否可以使用一些上下文来确定我的请求路径及其参数?
  • 是的,我了解容器之间的差异。这不是我的问题。如何使用过滤器获取 SOAP 内容 - 我的主要问题仍然相同。如何动态添加标题?
【解决方案2】:

Web 服务端点属于 Web 层,由 Web 容器管理(有关详细信息,请参阅 Java EE 7 tutorial 6.1 Web Applications)。

另一方面,Enterprise bean 是一个业务逻辑组件。它由 EJB 容器 (Java EE 7 tutorial 32.1 What Is an Enterprise Bean?) 管理。

这意味着企业 bean 无法注入 WebServiceContext,因为它由不同的容器管理。这也没有任何意义,因为 EJB 容器没有 WebServiceContext。

【讨论】:

    【解决方案3】:

    我有the same problem,这就是我解决它的方法:

    WebServiceContext wscontext = null;
    try {
        Context ctx = new InitialContext();
        wscontext = (WebServiceContext) ctx.lookup("java:comp/WebServiceContext");
    } catch (NamingException e) {
    
    }
    

    【讨论】:

      猜你喜欢
      • 2018-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-14
      • 2016-06-30
      • 2015-12-11
      • 1970-01-01
      • 2013-11-15
      相关资源
      最近更新 更多