首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JAX和CDI不一起工作的是自由档案8.5.5.6

JAX和CDI不一起工作的是自由档案8.5.5.6
EN

Stack Overflow用户
提问于 2015-12-03 18:59:09
回答 3查看 1.4K关注 0票数 1

当我尝试组合JAX服务端点类和一个简单的CDI注入时,我遇到了奇怪的行为。当我尝试将对象注入到WebService实现类中时,注入对象的PostConstruct方法永远不会被调用。实际上,类构造函数也不被调用。

下面是我的JAX实现类和注入点:

代码语言:javascript
复制
@WebService(serviceName="eBusinessWebService")
public class eBusinessWebServiceImpl
{

    @WebMethod
    public SubmissionValidationResults xmlValidation(String xml, String submissionType, String schemaVersion)
            throws SOAPException
    {          
        // Validate schema
        SubmissionValidationResults results = fileSubmissionServiceHandler.validateXML(xml, submissionType,
                schemaVersion);
        
        return results;
    }

    @Inject
    private FileSubmissionServiceHandler fileSubmissionServiceHandler;

    @Inject
    private BRSubmissionService brSubmissionService;
}

这是我的注入类,FileSubmissionServiceHandler:

代码语言:javascript
复制
public class FileSubmissionServiceHandler
{
    public FileSubmissionServiceHandler()
    {
        System.out.println("Constructor being called on FileSubmissionServiceHandler");
    }

    @PostConstruct
    public void init()
    {
        final String webserviceURL = "https://hostname/FileSubmissionService/FileSubmissionService.svc";
        final String username = "username";
        final String password = "password";
        
        this.webservice = new BasicHttpsBinding_IFileSubmissionServiceProxy(username, password);
        Descriptor desc = webservice._getDescriptor();
        desc.setEndpoint(webserviceURL);
    }
    
    public SubmissionValidationResults validateXML(String xml, String submissionType,
            String schemaVersion) throws WebServiceException
    {
        SubmissionValidationResults results = null;
        FormType type = FormType.getByName(submissionType);
        String submissionTypeCode = type.getCode();

        try
        {
            results = this.webservice.validateXmlFile(xml, submissionTypeCode, schemaVersion);
            
        }
        catch (Exception e)
        {
            logger.error("Internal FileSubmissionService threw an exception", e);
            throw e;
        }

        return convertSubmissionValidationResults(results);
    }

    private BasicHttpsBinding_IFileSubmissionServiceProxy webservice;
}

我被要求发布我的服务器XML (由于一次运行的自由配置文件的两个副本而重写端口设置):

代码语言:javascript
复制
<server description="new server">

<!-- Enable features -->
<featureManager>
    <feature>jaxws-2.2</feature>
    <feature>servlet-3.1</feature>
    <feature>cdi-1.2</feature>
</featureManager>

<!--For a user registry configuration, configure your user registry. For 
    example, configure a basic user registry using the basicRegistry element. 
    Specify your own user name below in the name attribute of the user element. 
    For the password, generate an encoded password using bin/securityUtility 
    encode and add it in the password attribute of the user element. Then uncomment 
    the user element. -->
<basicRegistry id="basic" realm="BasicRealm">
    <user name="wasadmin" password="{xor}KD4sPjsyNjE=" />
</basicRegistry>

<keyStore password="{xor}KD4sPjsyNjE=" />

<!-- To access this server from a remote client add a host attribute to 
    the following element, e.g. host="*" -->
<httpEndpoint host="*" httpPort="9090" httpsPort="9445"
    id="defaultHttpEndpoint" />

<wasJmsEndpoint wasJmsPort="7277" wasJmsSSLPort="7287" />

<iiopEndpoint host="localhost" id="defaultIiopEndpoint"
    iiopPort="2814">
    <iiopsOptions iiopsPort="2815" />
</iiopEndpoint>

<applicationMonitor updateTrigger="mbean" />

<enterpriseApplication id="eBusinessWebService_EAR"
    location="eBusinessWebService_EAR.ear" name="eBusinessWebService_EAR" />

和原木:

代码语言:javascript
复制
Launching defaultServer (WebSphere Application Server 8.5.5.6/wlp-1.0.9.cl50620150610-1749) on Java HotSpot(TM) 64-Bit Server VM, version 1.7.0_79-b15 (en_US)
[AUDIT   ] CWWKE0001I: The server defaultServer has been launched.
[AUDIT   ] CWWKE0100I: This product is licensed for development, and limited production use. The full license terms can be viewed here: https://public.dhe.ibm.com/ibmdl/export/pub/software/websphere/wasdev/license/base_ilan/ilan/8.5.5.6/lafiles/en.html
[AUDIT   ] CWWKZ0058I: Monitoring dropins for applications. 
[WARNING ] CWNEN0047W: Resource annotations on the fields of the xxx.important.not.external.service.eBusinessWebServiceImpl class will be ignored. The annotations could not be obtained because of the exception : java.lang.NoClassDefFoundError: org/springframework/context/ApplicationContextAware
[AUDIT   ] CWWKT0016I: Web application available (default_host): http://localhost:9090/eBusinessWebService/
[AUDIT   ] CWWKZ0001I: Application eBusinessWebService_EAR started in 3.011 seconds.
[AUDIT   ] CWWKF0012I: The server installed the following features: [jaxws-2.2, cdi-1.2, servlet-3.1, jndi-1.0, javaMail-1.5, jaxb-2.2].
[AUDIT   ] CWWKF0011I: The server defaultServer is ready to run a smarter planet.
20-01-2016 - 10:02:47 - INFO  (eBusinessWebServiceImpl.java:31) - --- Validating Incomming Form XML ---
20-01-2016 - 10:02:47 - INFO  (eBusinessWebServiceImpl.java:33) - Received Payload: XML [Hello]
20-01-2016 - 10:02:47 - INFO  (eBusinessWebServiceImpl.java:34) - SubmissionType [from the]
20-01-2016 - 10:02:47 - INFO  (eBusinessWebServiceImpl.java:35) - SchemaVersion [other side]
[WARNING ] Application {http://service.external.not.important.xxx/}eBusinessWebService#{http://service.external.not.important.xxx/}xmlValidation has thrown exception, unwinding now
java.lang.NullPointerException

我修改了每个类的一些不太相关的细节,但是基本操作是相同的。当我试图访问fileSubmissionServiceHandler对象的“FileSubmissionServiceHandler”方法时,会抛出一个空指针异常,并且我从未在FileSubmissionServiceHandler类中看到来自postConstruct或构造函数方法的输出。使用调试器,这些方法永远不会到达。

到目前为止,我检查过的东西:

  1. 我的WEB文件夹中有一个空的beans.xml文件
  2. 我在server.xml中包含javaee-7.0特性,其中包括jax-ws和cdi。
  3. 我还尝试将应用程序作用域和请求范围添加到FileSubmissionServiceHandler中,但没有任何效果。

有没有人知道为什么这不起作用?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-01-26 00:30:57

好了,我终于找出了问题的原因。

名为BRSubmissionService的对象正在由CDI加载。CDI加载正在被spring异常中断。而且,由于CDI无法完成,因此不会发生其余的CDI注入,也不会加载我的FileSubmissionService对象,从而导致我的空指针异常。

解决方案是修复位于另一个jar中的BRSubmissionService对象中的spring错误,不幸的是,这个错误是我从另一个开发人员那里继承的。生活就是这样。

票数 0
EN

Stack Overflow用户

发布于 2015-12-04 14:08:15

看来注射是出于某种原因而没有执行。因此,构造函数和PostConstruct没有被调用,然后就进入了NPE。可以附上你的申请以便我可以进一步查看吗?

票数 0
EN

Stack Overflow用户

发布于 2015-12-15 07:29:05

由于您没有粘贴日志,也没有粘贴配置文件、server.xml等。我试图在8.5.5.6上产生问题,但是我发现我可以执行注入和调用post构造函数方法。

我的测试用例和你的相似。唯一的区别是,我没有使用javaee7.0特性,因为它需要在server.xml中进行更多的配置,但只需要在下面包含一些特性:

jaxws-2.2、servlet-3.1、cdi-1.2

请试一试。

如果它仍然不工作,请确保没有注入,它可以正确工作。您最好粘贴日志和完整的server.xml,因为这些对于确定问题很重要。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34074041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档