【问题标题】:When I put @Autowire annotaion for JAX WS class it gives null pointer exception error in spring boot当我为 JAX WS 类添加 @Autowire 注释时,它会在 Spring Boot 中给出空指针异常错误
【发布时间】:2023-04-06 11:55:02
【问题描述】:

我为我的 Web 应用程序编写了一个 JAX-WS 服务,当我调用 Web 服务时,它给出了空指针异常(Autowire 不工作)...我将 tomcat 8.5.11 作为服务器...

我删除 @WebService 注释时,自动连线工作正常....但是当我添加它时它不起作用...错误是什么...是错误变成了我的依赖...

这是我的依赖项。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-taglibs</artifactId>
</dependency>

<!--handle servlet-->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
</dependency>
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
</dependency>

<!--<Email Dependency>-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
    <version>1.4.3.RELEASE</version>
    <exclusions>
        <exclusion>
            <groupId>com.sun.mail</groupId>
            <artifactId>javax.mail</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<!--Add mysql dependency-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>6.0.3</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context-support</artifactId>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.1</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.1</version>
</dependency>
<!--jasper-->
<dependency>
    <groupId>net.sf.jasperreports</groupId>
    <artifactId>jasperreports</artifactId>
    <version>3.7.6</version>
    <scope>compile</scope>
</dependency>
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.10</version>
    <scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/com.sun.xml.ws/jaxws-rt -->
<dependency>
    <groupId>com.sun.xml.ws</groupId>
    <artifactId>jaxws-rt</artifactId>
    <version>2.2.8</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.jvnet.staxex/stax-ex -->
<dependency>
    <groupId>org.jvnet.staxex</groupId>
    <artifactId>stax-ex</artifactId>
    <version>1.7.8</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.sun.xml.stream.buffer/streambuffer -->
<dependency>
    <groupId>com.sun.xml.stream.buffer</groupId>
    <artifactId>streambuffer</artifactId>
    <version>1.5.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.sun.xml.bind/jaxb-libs -->
<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-libs</artifactId>
    <version>1.0.6</version>
</dependency>

我的模型用@Entity 注释进行了注释..我没有把它放在这里...

我的仓库是

package lk.slsi.repository;

import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

import java.util.List;
import lk.slsi.domain.CustomsPermit;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;

@Repository
@Qualifier("PermitRepository")
public interface PermitRepository extends CrudRepository < CustomsPermit, Long > {
    @Query("select a from CustomsPermit a where a.dtIssue = :dtIssue")
    List < CustomsPermit > getPermitByDate(@Param("dtIssue") String dtIssue);
}

我的 WS 课是

package lk.slsi.repository;

import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.jws.WebService;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import lk.slsi.domain.CustomsPermit;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
import org.springframework.web.context.support.SpringBeanAutowiringSupport;

/**
 *
 * @author lankadeva.ghg
 */
@WebService
@Component
public class permitRepoImpl extends SpringBeanAutowiringSupport {
    @Autowired
    @Qualifier("PermitRepository")
    private PermitRepository permitRepository;

    public static void marshaling() throws JAXBException {
        try {
            JAXBContext jaxbContext = JAXBContext.newInstance(CustomsPermit.class);
            Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
            jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        } catch (JAXBException ex) {
            Logger.getLogger(permitRepoImpl.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public List < CustomsPermit > getPermitByDate(String dtIssue) {
        try {
            System.out.println("autowire is " + permitRepository);
            marshaling();
        } catch (JAXBException ex) {
            Logger.getLogger(permitRepoImpl.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("exception : autowire is " + permitRepository);
            return (List < CustomsPermit > ) ex;
        }
        return permitRepository.getPermitByDate(dtIssue);
    }
}

Autowire 在这里不起作用...当我进入调试模式时,它会给出 null 作为值

这是我的 web.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
         http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
    <display-name>SLSIonNationalSingleWindow</display-name>
    <servlet-mapping>
        <servlet-name>permitRepoImplService</servlet-name>
        <url-pattern>/permitRepoImplService</url-pattern>
    </servlet-mapping>
    <welcome-file-list>
        <welcome-file>/view/index.jsp</welcome-file>
    </welcome-file-list>
    <listener>
        <listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class>
    </listener>
    <servlet>
        <servlet-name>spring-web</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:slsi-servlet-config.xml</param-value>
        </init-param>
    </servlet>
    <servlet>
        <servlet-name>permitRepoImplService</servlet-name>
        <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>spring-web</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

这是我的 applicationconfig.xml

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:p="http://www.springframework.org/schema/p"
       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.xsd
            http://www.springframework.org/schema/mvc
            http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!-- Scan Config -->
    <context:component-scan base-package="lk.slsi" />
    <!--<mvc:annotation-driven/>-->
    <mvc:default-servlet-handler/>

    <bean id="viewResolver"
          class="org.springframework.web.servlet.view.UrlBasedViewResolver">
        <property name="viewClass"
                  value="org.springframework.web.servlet.view.JstlView" />
        <property name="prefix" value="/view/" />
        <property name="suffix" value=".jsp" />
    </bean>

    <!--<bean id = "permitRepository" class="lk.slsi.repository.PermitRepository"
          autowire="byName" autowire-candidate="true">
    </bean>-->
</beans>

我的依赖注入有什么错误......

【问题讨论】:

    标签: spring web-services spring-boot jax-ws autowired


    【解决方案1】:

    你可以尝试添加这个依赖:jaxws-spring 库,它集成了两个框架:

    <dependency>
     <groupId>org.jvnet.jax-ws-commons.spring</groupId>
     <artifactId>jaxws-spring</artifactId>
     <version>1.9</version>
    </dependency>
    

    更多信息请参考此链接: https://examples.javacodegeeks.com/enterprise-java/jws/jax-ws-spring-integration-example/

    【讨论】:

    • 是的,我之前添加了这个..但它没有做任何事情......我是这个依赖项需要特殊配置
    • 我们可以在没有 Autowired 注释的情况下使用 autowire.. 我的意思是通过实现类...但我不知道如何通过实现类返回存储库...
    • 你可以使用Autowired注解,这个依赖可能告诉spring在web服务控制器中自动装配组件
    • 我加了这个插件..但是错误是一样的...这个插件需要用括号@WebService注解告诉端点接口
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-11
    • 2011-09-11
    • 2012-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多