如何将RequestScoped bean注入Axis2 POJO Web服务?

时间:2015-05-29 11:25:39

标签: cdi axis2 inject

我们目前正在构建一个Web应用程序,其中后端通过REST Web服务(使用Jersey)公开服务器功能。但是,由于向后兼容性,有一个Web服务需要是SOAP服务。我们为此实现了一个POJO(使用Eclipse生成的Axis2 Web服务以获得正确的设置),我们在Tomcat上将其部署为Axis2 Web服务。 SOAP Web服务定义为请求范围(在 services.xml 中完成)。调用此Web服务,使用Kerberos和NTLM进行身份验证(哪一个取决于部署Web应用程序的环境)可以正常工作。

现在,我们希望重用REST服务的一些功能。 REST服务仅用作外观,业务逻辑在 @RequestScoped bean中实现,使用CDI和 @Inject 将其注入REST服务。如果我们可以将@RequestScoped bean注入到我们的POJO中,那将是完美的,但这似乎不起作用。要注入的bean也依赖于其他@RequestScoped bean,这些bean也使用CDI注入。基本上,它将导致整个对象依赖树实例化。

现在,我的问题是,这种情况一般是否可行,即使用CDI将@RequestScoped bean注入Axis2 POJO?如果没有,你有什么建议可以用不同的方式解决这个问题,即在Axis2 POJO中重用@RequestScoped bean吗?

以下是我们设置的一些代码示例:

POJO:

import javax.inject.Inject;
import org.apache.axis2.context.MessageContext;
import org.apache.axis2.transport.http.HTTPConstants;

public class MyService {

    @Inject
    private MyRequestScopedService mrss;

    public MyResponse getSomeData(MyRequest myRequest) {
        // some logic...
    }
}

要注入的Bean:

import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;

@RequestScoped
public class MyRequestScopedService {

    @Inject
    private MyOtherRequestScopedService morss;

    [...]  // a few other beans are also injected

    public SomeData getSomeData(SomeRequest someRequest) {
        // some logic...
    }

    [...]
}

的services.xml

<service name="MyService" scope="request">
    <messageReceivers>
        <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
        <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"  class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
    </messageReceivers>
    <parameter name="ServiceClass" locked="false">com.domain.MyService</parameter>
</service>

如果您需要更多详情,请告诉我。

0 个答案:

没有答案