【问题标题】:Java null pointer exception @autowired in web service [duplicate]Web服务中的Java空指针异常@autowired [重复]
【发布时间】:2019-02-06 09:58:41
【问题描述】:

错误:domain.SpeakerRecog.test 处的 java.lang.NullPointerException

speakermapper 为空,speakermapper.insertUserAndEnrollmentId(userid, enrollmentid) 出现错误,它会引发 Java 空指针异常。数据源是在控制台中创建的。我尝试添加诸如@Configurationimplements 之类的注释,但它仍然无法正常工作。我正在尝试将数据插入本地主机中的数据库表中。它与线程“为什么我的 Spring @Autowired 字段为空?”不同。因为我没有创建新的构造函数,但我遵循了那里给出的建议,但它仍然无法工作

WebService java 文件:

package domain;

import javax.jws.WebMethod;
import javax.jws.WebService;
import mapper.Speakermapper;
import org.springframework.web.context.support.SpringBeanAutowiringSupport;
import org.springframework.beans.factory.annotation.Autowired;


@WebService(serviceName = "SpeakerRecognitionWS")

public class SpeakerRecog extends SpringBeanAutowiringSupport{


    @Autowired
    private Speakermapper speakermapper;


    @WebMethod
    public String test(){


        String userid = "111";
        String enrollmentid = "111";
        try{ 
        speakermapper.insertUserAndEnrollmentId(userid, enrollmentid);
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }    
    }
}

这是 Speakermapper.java 文件:

package mapper;
import org.apache.ibatis.annotations.Param;

public interface Speakermapper {
    public void insertUserAndEnrollmentId(@Param("userid") String userid, 
                            @Param("enrollmentid") String enrollmentid);

}

**这里是 Speakermapper.xml:

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace = "mapper.Speakermapper">
<insert id = "insertUserAndEnrollmentId" >
Insert into SpeakerIds 
(userid, enrollmentid)
Values (#{userid}, #{enrollmentid})
</insert>
</mapper>

**这里是 applicationContext.xml:这个 xml 是否有错误。我想不通。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation= "http://www.springframework.org/schema/beans 
                http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context 
                http://www.springframework.org/schema/context/spring-context-3.0.xsd
        http://www.springframework.org/schema/tx 
                http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
        http://www.springframework.org/schema/aop 
                http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
        <context:component-scan base-package="domain"/> 
        <context:component-scan base-package="mapper"/> 
        <bean id="SpeakerRecog"  class="domain.SpeakerRecog" />
        <bean id="smapper"  class="mapper.speakermapper" />

        <bean id="dataSourceSpeaker" class="org.springframework.jndi.JndiObjectFactoryBean">
            <property name="jndiName" value="Speaker"/>
        </bean>

        <bean id="sqlSessionFactorySpeaker" class="org.mybatis.spring.SqlSessionFactoryBean">
            <property name="dataSource" ref="dataSourceSpeaker"/>
            <property name="typeAliasesPackage" value="domain"/>
            <property name="configLocation" value="/WEB-INF/mybatis-config.xml"/>
        </bean>

        <bean id="mapperSpeaker" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
            <property name="basePackage" value="mapper" />
            <property name="sqlSessionFactoryBeanName" value="sqlSessionFactorySpeaker" />
        </bean>
</beans>

【问题讨论】:

  • 可能你的 sping 环境没有启动,导致自动装配没有完成。
  • 如何启动spring环境?对不起,我是初学者

标签: java spring oracle nullpointerexception jdeveloper


【解决方案1】:

您可以将其显式标记为服务,或者不使用接口而是使用类。

又看了一遍--->可能是这个问题

  <bean id="smapper"  class="mapper.speakermapper" />

Speakermapper 大 S

  <bean id="smapper"  class="mapper.Speakermapper" />
package mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Service;

@Service
public class Speakermapper {
    public void insertUserAndEnrollmentId(@Param("userid") String userid, 
                            @Param("enrollmentid") String enrollmentid);

}

更新 3

<bean id="speakermapper"  class="mapper.Speakermapper" />
<bean id="SpeakerRecog"  class="domain.SpeakerRecog" >
     <property name="speakermapper" ref="speakermapper" />
</bean>

请同时查看此链接:

Spring Autowired in Web Service not working

【讨论】:

  • 这个例子甚至不会编译。
  • 因为他没有导入Service所以无法编译,现在应该修复了
  • @Haris Bouchlis 它无法编译,因为常规类无法提供没有实现的方法。而且它根本不可能是一个类,因为如果你仔细查看 OP,这不是一个常规接口,而是一个 MyBatis 接口,所以不能简单地用一个类代替它。
  • 我已经尝试过@Service 但仍然是空指针异常。
  • 谁能帮忙
猜你喜欢
  • 2017-07-02
  • 1970-01-01
  • 2021-08-26
  • 2016-04-28
  • 1970-01-01
  • 1970-01-01
  • 2014-03-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多