【问题标题】:Spring boot,SOAP,Spring jpaSpring Boot,SOAP,Spring jpa
【发布时间】:2017-09-17 06:27:38
【问题描述】:

我对 Spring 启动(SOAP - Apache cxf,Spring jpa)有一些问题。 当我运行我的项目时,我收到以下错误,但如果我在 1.4.0 上更改 Spring Boot 版本,它可以(但 EntityManager 为空): 我哪里错了?我想使用 Spring Boot 将 spring-jpa 与我的 SOAP Web 服务连接起来。

java.lang.IllegalStateException: Could not evaluate condition on org.springframework.boot.devtools.autoconfigure.DevToolsDataSourceAutoConfiguration due to org/springframework/boot/context/embedded/ServletRegistrationBean not found. Make sure your own configuration does not rely on that class. This can also happen if you are @ComponentScanning a springframework package (e.g. if you put a @ComponentScan in the default package by mistake)
at org.springframework.boot.autoconfigure.condition.SpringBootCondition.matches(SpringBootCondition.java:55) ~[spring-boot-autoconfigure-1.5.2.RELEASE.jar:1.5.2.RELEASE]
at 

我的application.properties

# server HTTP port
server.port=9090
# set the CXFServlet URL pattern
cxf.path=/codenotfound/ws
# hello world service address
helloworld.service.address=http://localhost:9090/codenotfound/ws/helloworld
spring.datasource.url=jdbc:mysql://localhost:3306/concretepage
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.tomcat.max-wait=20000
spring.datasource.tomcat.max-active=50
spring.datasource.tomcat.max-idle=20
spring.datasource.tomcat.min-idle=15
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQLDialect
spring.jpa.properties.hibernate.id.new_generator_mappings = false
spring.jpa.properties.hibernate.format_sql = true
logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE

我用的是DAO方法

@Transactional
@Repository
public class ArticleDAO implements IArticleDAO {
    @PersistenceContext 
    private EntityManager entityManager;    
    @Override
    public Article getArticleById(int articleId) {
        return entityManager.find(Article.class, articleId);
    }
    @SuppressWarnings("unchecked")
    @Override
    public List<Article> getAllArticles() {
        String hql = "FROM Article as atcl ORDER BY atcl.articleId";
        return (List<Article>) entityManager.createQuery(hql).getResultList();
    }   
    @Override
    public void addArticle(Article article) {
        entityManager.persist(article);
    }
    @Override
    public void updateArticle(Article article) {
        Article artcl = getArticleById(article.getArticleId());
        artcl.setTitle(article.getTitle());
        artcl.setCategory(article.getCategory());
        entityManager.flush();
    }
    @Override
    public void deleteArticle(int articleId) {
        entityManager.remove(getArticleById(articleId));
    }
    @Override
    public boolean articleExists(String title, String location) {
        String hql = "FROM Article as atcl WHERE atcl.title = ? and atcl.category = ?";
        int count = entityManager.createQuery(hql).setParameter(1, title)
                      .setParameter(2, location).getResultList().size();
        return count > 0 ? true : false;
    }
}

pom.xml

  <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.codenotfound</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>demo</name>
    <description>Demo project for Spring Boot</description>
    <url>http://</url>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <cxf.version>3.1.7</cxf.version>
    </properties>
    <dependencies>
        <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>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>
        <!-- Apache CXF-JAXWS-->
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-spring-boot-starter-jaxws</artifactId>
            <version>${cxf.version}</version>
        </dependency>
        <!-- Spring boot Test-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-codegen-plugin</artifactId>
                <version>${cxf.version}</version>
                <executions>
                    <execution>
                        <id>generate-sources</id>
                        <phase>generate-sources</phase>
                        <configuration>
                            <sourceRoot>${project.build.directory}/generated/cxf</sourceRoot>
                            <wsdlOptions>
                                <wsdlOption>
                                    <wsdl>${project.basedir}/src/main/resources/wsdl/helloworld.wsdl</wsdl>
                                    <wsdlLocation>classpath:wsdl/helloworld.wsdl</wsdlLocation>
                                </wsdlOption>
                            </wsdlOptions>
                        </configuration>
                        <goals>
                            <goal>wsdl2java</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

我正在尝试在这里调用此方法

public class HelloWorldImpl implements HelloWorldPortType {
    @Autowired
    private IArticleDAO articleDAO;
    private static final Logger LOGGER = LoggerFactory
            .getLogger(HelloWorldImpl.class);

    @Override
    public Greeting sayHello(Person request) {
        LOGGER.info(
                "Endpoint received person=[firstName:{},lastName:{}]",
                request.getFirstName(), request.getLastName());
        List<Article> _list = articleDAO.getAllArticles();
        System.out.println("title: " + _list.get(0));
        String greeting = "Hello " + "rasras" + " "
                + request.getLastName() + "!";
        ObjectFactory factory = new ObjectFactory();
        Greeting response = factory.createGreeting();
        response.setGreeting(greeting);

        LOGGER.info("Endpoint sending greeting=[{}]",
                response.getGreeting());
        return response;
    }
}

主类

@SpringBootApplication
public class SpringCxfApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringCxfApplication.class, args);
    }
}

Project structure

【问题讨论】:

  • 你的 Spring boot 主类在哪里?错误说您的主类不在默认包中,因此无法扫描其他组件。
  • @VijendraKulhade 我在默认包中的主类。
  • 我建议不要将默认包放入某个包中,该包是所有其他包的父包。像 com.kulhade for SpringCxfApplication 类和控制器和配置将进入 com.kulhade.controllercom.kulhade.config
  • 是的,我做到了,如果您查看我的项目结构 i.stack.imgur.com/9ukMP.png ,但这并没有帮助。 @VijendraKulhade

标签: java jpa soap spring-boot cxf


【解决方案1】:

如果您使用的是 spring-boot 1.5+,请使用 CXF 3.1.11 或更高版本。 Here是bug,3.1.11已经修复了

【讨论】:

    猜你喜欢
    • 2018-07-10
    • 2017-05-09
    • 2021-04-02
    • 2017-07-04
    • 2020-09-12
    • 1970-01-01
    • 1970-01-01
    • 2021-01-18
    • 2021-02-09
    相关资源
    最近更新 更多