Introduction to JAXB (1)

JAXB与XML心跳监测

从Hearbeat说起

公司的运营部门要求所有上线的component有个链接,进行heartbeat检测。

要求如下:

  1. 提供一个http url
  2. 这个http url 返回xml来显示server的状态,格式如下

heartbeat需要check哪些内容(db/io/thread/cpu/memory/file handler...),这里不作讨论。我看过的code中,有以下实现:

  • 打开一个socket端口(非web app),如果系统自检 ok, 返回一个OK的xml字符串。如果自检失败,返回fail的xml字符串。

  • 定义一个servlet(web app),其他同上。
  • 为heartbeat定义一个wsdl(web app, deploy in axis2 aar ), 提供一个heartbeat service,比如:

http://host/app/UserService (domain service) 
http://host/app/HeartbeatService (heartbeat service)

  • 使用axis2的RawXMLINOutMessageReceiver或者AbstractInOutMessageReceiver(web app, deploy in axis2 aar),定义一个POJOs的service, 返回OMElement(可以从xml转换得到)。本质和3相同,不过是少了wsdl

 

    按照生成xml的方法,上面四种方式归结为3种

    1. raw string
    2. 定义xsd
    3. 使用DOM Tree (OMElement)。使用DOM Tree给人的感觉和raw string没啥区别。

      这里就出现了JAXB的第一个应用场景: 需要生成xml,xml相对简单:定义xsd有大材小用之嫌,代码中字符串拼接又太ugly。

      什么是JAXB

      Java Architecture for XML Binding(JAXB) 是一种OX(object <-> xml mapping)工具。主要提供了两个功能:将 java对象编码序列化(marshal)成xml,或者反之,从xml反序列化到java对象。一图以蔽之:

      • xml schema 与 classes(interfaces) 之间的相互转换(为下面的转换做铺垫)
      • xml document 和 instance object 之间的相互转换

      xml是比java,c++, python...等编程语言更通用的描述语言,从语言相互翻译的角度而言,上面两种映射天然如此。

       

      序列化任意java对象

      回到本文开头heartbeat xml生成的问题,

      • 首先定义HeartBeat类,包含status。selfCheck方法检测server的各种状态,这里仅仅是sample stub code,直接返回一个HeartBeat

       

      • 使用JAXB将HeartBeat实例对象marshal成xml

       

      • 生成的xml如下

       

      说明:

      Status被定义成static inner class而不是inner class,否则会报错is a non-static inner class, and JAXB can’t handle those.

      JAXBElement中Qname的local part为admin,因为xml的root elment从admin开始

       


      在上面的例子中,Heartbeat类定义上未加任何的annotation,就直接被JAXB marshal。理论上,我们可以仿照上一篇A generic JAXB marshal/unmarshal XmlType中的泛型方法定义,将marshal方法定义成一个可marhal任意java对象的通用方法。不过在实际中,我们很少直接handle未加任何jaxb annotation的对象,主要有循环引用,内部类等问题。

       

      上面的例子可以看出jaxb相当简单易用(点此从一个实例看jaxb的强大),秉承JDK API的一贯风格。

      XJC:schema -> java

      如果遵循contract first的原则,在解决与xml相关的问题时,schema first.

      • 首先定义heartbeat的schema如下(由xml->xsd在线工具得到):

      • 使用xjc(jdk工具,与java/javac在同一目录,在CMD命令窗口可直接使用),生成java类:xjc heartbeat.xsd

      Admin

       

       

      ObjectFactory


       

      • 使用jaxb,将admin marshal。比前面少了两行new JAXBElement对象的代码

       

       

      class定义中使用的Annotation和xml schema定义一一对应,说明如下:

       

      @XmlRootElement(name = "admin")


      //xml 文档根节点

      <xsd:element name="admin">

      @XmlAccessorType(XmlAccessType.FIELD)

      @XmlType(name = "", propOrder = {

      "status"

      })

      @XmlElement(required = true)

      protected List<Admin.Status> status;


      //nested 的complexType,所以XmlType的name为空;有Order indicator 

      sequence,所以有propOrder来指定序列化顺序

      //maxOccurs为unbounded,所以status定义为List,默认minOccurs为1,所以添加了required = true

       

      //XmlAccessorType 表明了哪些field需要被序列化。


       

       

      <xsd:complexType>
           <xsd:sequence>

                <xsd:element maxOccurs="unbounded" name="status">

      @XmlAccessorType(XmlAccessType.FIELD)

      @XmlType(name = "", propOrder = {

      "name",

      "value"

      })

       

      //同上

                   <xsd:complexType>

                     <xsd:sequence>

                        <xsd:element name="name" type="xsd:int" />

                        <xsd:element name="value" type="xsd:int" />

                     </xsd:sequence>

                   </xsd:complexType>

                </xsd:element>

          </xsd:sequence>

      </xsd:complexType>

       

      </xsd:element>

      schemagen:java -> schema

      如果你习惯先写java class,或者已经有很多写好的java code(有没有jaxb annotation都成)。schemagen(同xjc,jdk工具)是帮助你快速定义schema的不二选择。

       

      对上面生成的Admin.java使用schemagen(schemagen Admin.java),生成的schema和前面的定义一模一样

       

      "C:\Program Files (x86)\Java\jdk-1.8\bin\java.exe" -XX:TieredStopAtLevel=1 -noverify -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true "-Dmanagement.endpoints.jmx.exposure.include=*" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2025.1.3\lib\idea_rt.jar=63022" -Dfile.encoding=UTF-8 -classpath "C:\Program Files (x86)\Java\jdk-1.8\jre\lib\charsets.jar;C:\Program Files (x86)\Java\jdk-1.8\jre\lib\deploy.jar;C:\Program Files (x86)\Java\jdk-1.8\jre\lib\ext\access-bridge-32.jar;C:\Program Files (x86)\Java\jdk-1.8\jre\lib\ext\cldrdata.jar;C:\Program Files (x86)\Java\jdk-1.8\jre\lib\ext\dnsns.jar;C:\Program Files (x86)\Java\jdk-1.8\jre\lib\ext\jaccess.jar;C:\Program Files (x86)\Java\jdk-1.8\jre\lib\ext\localedata.jar;C:\Program Files (x86)\Java\jdk-1.8\jre\lib\ext\nashorn.jar;C:\Program Files (x86)\Java\jdk-1.8\jre\lib\ext\sunec.jar;C:\Program Files (x86)\Java\jdk-1.8\jre\lib\ext\sunjce_provider.jar;C:\Program Files (x86)\Java\jdk-1.8\jre\lib\ext\sunmscapi.jar;C:\Program Files (x86)\Java\jdk-1.8\jre\lib\ext\sunpkcs11.jar;C:\Program Files (x86)\Java\jdk-1.8\jre\lib\ext\zipfs.jar;C:\Program Files (x86)\Java\jdk-1.8\jre\lib\javaws.jar;C:\Program Files (x86)\Java\jdk-1.8\jre\lib\jce.jar;C:\Program Files (x86)\Java\jdk-1.8\jre\lib\jfr.jar;C:\Program Files (x86)\Java\jdk-1.8\jre\lib\jsse.jar;C:\Program Files (x86)\Java\jdk-1.8\jre\lib\management-agent.jar;C:\Program Files (x86)\Java\jdk-1.8\jre\lib\plugin.jar;C:\Program Files (x86)\Java\jdk-1.8\jre\lib\resources.jar;C:\Program Files (x86)\Java\jdk-1.8\jre\lib\rt.jar;D:\gov\dowlnload-Excel\target\classes;F:\apache-maven-361\local\repository\org\springframework\boot\spring-boot-starter-web\2.7.10\spring-boot-starter-web-2.7.10.jar;F:\apache-maven-361\local\repository\org\springframework\boot\spring-boot-starter\2.7.10\spring-boot-starter-2.7.10.jar;F:\apache-maven-361\local\repository\org\springframework\boot\spring-boot\2.7.10\spring-boot-2.7.10.jar;F:\apache-maven-361\local\repository\org\springframework\boot\spring-boot-starter-logging\2.7.10\spring-boot-starter-logging-2.7.10.jar;F:\apache-maven-361\local\repository\ch\qos\logback\logback-classic\1.2.11\logback-classic-1.2.11.jar;F:\apache-maven-361\local\repository\ch\qos\logback\logback-core\1.2.11\logback-core-1.2.11.jar;F:\apache-maven-361\local\repository\org\apache\logging\log4j\log4j-to-slf4j\2.17.2\log4j-to-slf4j-2.17.2.jar;F:\apache-maven-361\local\repository\org\apache\logging\log4j\log4j-api\2.17.2\log4j-api-2.17.2.jar;F:\apache-maven-361\local\repository\org\slf4j\jul-to-slf4j\1.7.36\jul-to-slf4j-1.7.36.jar;F:\apache-maven-361\local\repository\jakarta\annotation\jakarta.annotation-api\1.3.5\jakarta.annotation-api-1.3.5.jar;F:\apache-maven-361\local\repository\org\yaml\snakeyaml\1.30\snakeyaml-1.30.jar;F:\apache-maven-361\local\repository\org\springframework\boot\spring-boot-starter-json\2.7.10\spring-boot-starter-json-2.7.10.jar;F:\apache-maven-361\local\repository\com\fasterxml\jackson\core\jackson-databind\2.13.5\jackson-databind-2.13.5.jar;F:\apache-maven-361\local\repository\com\fasterxml\jackson\core\jackson-annotations\2.13.5\jackson-annotations-2.13.5.jar;F:\apache-maven-361\local\repository\com\fasterxml\jackson\core\jackson-core\2.13.5\jackson-core-2.13.5.jar;F:\apache-maven-361\local\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.13.5\jackson-datatype-jdk8-2.13.5.jar;F:\apache-maven-361\local\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.13.5\jackson-datatype-jsr310-2.13.5.jar;F:\apache-maven-361\local\repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.13.5\jackson-module-parameter-names-2.13.5.jar;F:\apache-maven-361\local\repository\org\springframework\boot\spring-boot-starter-tomcat\2.7.10\spring-boot-starter-tomcat-2.7.10.jar;F:\apache-maven-361\local\repository\org\apache\tomcat\embed\tomcat-embed-core\9.0.73\tomcat-embed-core-9.0.73.jar;F:\apache-maven-361\local\repository\org\apache\tomcat\embed\tomcat-embed-el\9.0.73\tomcat-embed-el-9.0.73.jar;F:\apache-maven-361\local\repository\org\apache\tomcat\embed\tomcat-embed-websocket\9.0.73\tomcat-embed-websocket-9.0.73.jar;F:\apache-maven-361\local\repository\org\springframework\spring-web\5.3.26\spring-web-5.3.26.jar;F:\apache-maven-361\local\repository\org\springframework\spring-beans\5.3.26\spring-beans-5.3.26.jar;F:\apache-maven-361\local\repository\org\springframework\spring-webmvc\5.3.26\spring-webmvc-5.3.26.jar;F:\apache-maven-361\local\repository\org\springframework\spring-aop\5.3.26\spring-aop-5.3.26.jar;F:\apache-maven-361\local\repository\org\springframework\spring-context\5.3.26\spring-context-5.3.26.jar;F:\apache-maven-361\local\repository\org\springframework\spring-expression\5.3.26\spring-expression-5.3.26.jar;F:\apache-maven-361\local\repository\jakarta\xml\bind\jakarta.xml.bind-api\2.3.3\jakarta.xml.bind-api-2.3.3.jar;F:\apache-maven-361\local\repository\jakarta\activation\jakarta.activation-api\1.2.2\jakarta.activation-api-1.2.2.jar;F:\apache-maven-361\local\repository\org\springframework\spring-core\5.3.26\spring-core-5.3.26.jar;F:\apache-maven-361\local\repository\org\springframework\spring-jcl\5.3.26\spring-jcl-5.3.26.jar;F:\apache-maven-361\local\repository\org\springframework\boot\spring-boot-starter-data-redis\2.7.10\spring-boot-starter-data-redis-2.7.10.jar;F:\apache-maven-361\local\repository\org\springframework\data\spring-data-redis\2.7.10\spring-data-redis-2.7.10.jar;F:\apache-maven-361\local\repository\org\springframework\data\spring-data-keyvalue\2.7.10\spring-data-keyvalue-2.7.10.jar;F:\apache-maven-361\local\repository\org\springframework\data\spring-data-commons\2.7.10\spring-data-commons-2.7.10.jar;F:\apache-maven-361\local\repository\org\springframework\spring-tx\5.3.26\spring-tx-5.3.26.jar;F:\apache-maven-361\local\repository\org\springframework\spring-oxm\5.3.26\spring-oxm-5.3.26.jar;F:\apache-maven-361\local\repository\org\springframework\spring-context-support\5.3.26\spring-context-support-5.3.26.jar;F:\apache-maven-361\local\repository\io\lettuce\lettuce-core\6.1.10.RELEASE\lettuce-core-6.1.10.RELEASE.jar;F:\apache-maven-361\local\repository\io\netty\netty-common\4.1.90.Final\netty-common-4.1.90.Final.jar;F:\apache-maven-361\local\repository\io\netty\netty-handler\4.1.90.Final\netty-handler-4.1.90.Final.jar;F:\apache-maven-361\local\repository\io\netty\netty-resolver\4.1.90.Final\netty-resolver-4.1.90.Final.jar;F:\apache-maven-361\local\repository\io\netty\netty-buffer\4.1.90.Final\netty-buffer-4.1.90.Final.jar;F:\apache-maven-361\local\repository\io\netty\netty-transport-native-unix-common\4.1.90.Final\netty-transport-native-unix-common-4.1.90.Final.jar;F:\apache-maven-361\local\repository\io\netty\netty-codec\4.1.90.Final\netty-codec-4.1.90.Final.jar;F:\apache-maven-361\local\repository\io\netty\netty-transport\4.1.90.Final\netty-transport-4.1.90.Final.jar;F:\apache-maven-361\local\repository\io\projectreactor\reactor-core\3.4.28\reactor-core-3.4.28.jar;F:\apache-maven-361\local\repository\org\reactivestreams\reactive-streams\1.0.4\reactive-streams-1.0.4.jar;F:\apache-maven-361\local\repository\com\zaxxer\HikariCP\4.0.3\HikariCP-4.0.3.jar;F:\apache-maven-361\local\repository\org\slf4j\slf4j-api\1.7.36\slf4j-api-1.7.36.jar;F:\apache-maven-361\local\repository\com\mybatis-flex\mybatis-flex-spring-boot-starter\1.11.3\mybatis-flex-spring-boot-starter-1.11.3.jar;F:\apache-maven-361\local\repository\com\mybatis-flex\mybatis-flex-spring\1.11.3\mybatis-flex-spring-1.11.3.jar;F:\apache-maven-361\local\repository\org\mybatis\mybatis-spring\2.1.2\mybatis-spring-2.1.2.jar;F:\apache-maven-361\local\repository\org\springframework\spring-jdbc\5.3.26\spring-jdbc-5.3.26.jar;F:\apache-maven-361\local\repository\org\springframework\boot\spring-boot-autoconfigure\2.7.10\spring-boot-autoconfigure-2.7.10.jar;F:\apache-maven-361\local\repository\com\mybatis-flex\mybatis-flex-core\1.11.3\mybatis-flex-core-1.11.3.jar;F:\apache-maven-361\local\repository\org\mybatis\mybatis\3.5.19\mybatis-3.5.19.jar;F:\apache-maven-361\local\repository\com\mybatis-flex\mybatis-flex-processor\1.11.3\mybatis-flex-processor-1.11.3.jar;F:\apache-maven-361\local\repository\com\mybatis-flex\mybatis-flex-annotation\1.11.3\mybatis-flex-annotation-1.11.3.jar;F:\apache-maven-361\local\repository\org\projectlombok\lombok\1.18.24\lombok-1.18.24.jar;F:\apache-maven-361\local\repository\com\alibaba\easyexcel\3.3.4\easyexcel-3.3.4.jar;F:\apache-maven-361\local\repository\com\alibaba\easyexcel-core\3.3.4\easyexcel-core-3.3.4.jar;F:\apache-maven-361\local\repository\com\alibaba\easyexcel-support\3.3.4\easyexcel-support-3.3.4.jar;F:\apache-maven-361\local\repository\org\apache\commons\commons-csv\1.8\commons-csv-1.8.jar;F:\apache-maven-361\local\repository\org\ehcache\ehcache\3.10.8\ehcache-3.10.8.jar;F:\apache-maven-361\local\repository\javax\cache\cache-api\1.1.1\cache-api-1.1.1.jar;F:\apache-maven-361\local\repository\org\glassfish\jaxb\jaxb-runtime\2.3.8\jaxb-runtime-2.3.8.jar;F:\apache-maven-361\local\repository\org\glassfish\jaxb\txw2\2.3.8\txw2-2.3.8.jar;F:\apache-maven-361\local\repository\com\sun\istack\istack-commons-runtime\3.0.12\istack-commons-runtime-3.0.12.jar;F:\apache-maven-361\local\repository\com\sun\activation\jakarta.activation\1.2.2\jakarta.activation-1.2.2.jar;F:\apache-maven-361\local\repository\commons-io\commons-io\2.11.0\commons-io-2.11.0.jar;F:\apache-maven-361\local\repository\org\apache\poi\poi\4.1.2\poi-4.1.2.jar;F:\apache-maven-361\local\repository\commons-codec\commons-codec\1.15\commons-codec-1.15.jar;F:\apache-maven-361\local\repository\org\apache\commons\commons-collections4\4.4\commons-collections4-4.4.jar;F:\apache-maven-361\local\repository\org\apache\commons\commons-math3\3.6.1\commons-math3-3.6.1.jar;F:\apache-maven-361\local\repository\com\zaxxer\SparseBitSet\1.2\SparseBitSet-1.2.jar;F:\apache-maven-361\local\repository\org\apache\poi\poi-ooxml\4.1.2\poi-ooxml-4.1.2.jar;F:\apache-maven-361\local\repository\org\apache\poi\poi-ooxml-schemas\4.1.2\poi-ooxml-schemas-4.1.2.jar;F:\apache-maven-361\local\repository\org\apache\xmlbeans\xmlbeans\3.1.0\xmlbeans-3.1.0.jar;F:\apache-maven-361\local\repository\org\apache\commons\commons-compress\1.19\commons-compress-1.19.jar;F:\apache-maven-361\local\repository\com\github\virtuald\curvesapi\1.06\curvesapi-1.06.jar;F:\apache-maven-361\local\repository\com\kingbase8\kingbase8\8.2.0\kingbase8-8.2.0.jar" com.hjw.dowlnloadexcel.DowlnloadExcelApplication . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.7.10) 2025-11-05 11:34:26.421 INFO 16180 --- [ main] c.h.d.DowlnloadExcelApplication : Starting DowlnloadExcelApplication using Java 1.8.0_451 on DESKTOP-8JH5DJS with PID 16180 (D:\gov\dowlnload-Excel\target\classes started by ivan in D:\gov\dowlnload-Excel) 2025-11-05 11:34:26.426 INFO 16180 --- [ main] c.h.d.DowlnloadExcelApplication : No active profile set, falling back to 1 default profile: "default" 2025-11-05 11:34:28.154 INFO 16180 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode 2025-11-05 11:34:28.158 INFO 16180 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode. 2025-11-05 11:34:28.288 INFO 16180 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 109 ms. Found 0 Redis repository interfaces. 2025-11-05 11:34:29.162 INFO 16180 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'mybatis-flex-com.mybatisflex.spring.boot.MybatisFlexProperties' of type [com.mybatisflex.spring.boot.MybatisFlexProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2025-11-05 11:34:29.166 INFO 16180 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'com.mybatisflex.spring.boot.MultiDataSourceAutoConfiguration' of type [com.mybatisflex.spring.boot.MultiDataSourceAutoConfiguration] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2025-11-05 11:34:29.655 INFO 16180 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http) 2025-11-05 11:34:29.666 INFO 16180 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat] 2025-11-05 11:34:29.667 INFO 16180 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.73] 2025-11-05 11:34:30.026 INFO 16180 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2025-11-05 11:34:30.027 INFO 16180 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 3520 ms __ __ _ _ _ _____ _ | \/ |_ _| |__ __ _| |_(_)___ | ___| | _____ __ | |\/| | | | | '_ \ / _` | __| / __| | |_ | |/ _ \ \/ / | | | | |_| | |_) | (_| | |_| \__ \ | _| | | __/> < |_| |_|\__, |_.__/ \__,_|\__|_|___/ |_| |_|\___/_/\_\ |___/ v1.11.3 https://mybatis-flex.com 2025-11-05 11:34:31.672 INFO 16180 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... 2025-11-05 11:34:32.560 INFO 16180 --- [ main] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Driver does not support get/set network timeout for connections. (Method com.kingbase8.jdbc.KbConnection.getNetworkTimeout() is not yet implemented.) 2025-11-05 11:34:32.612 INFO 16180 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. 2025-11-05 11:34:32.835 WARN 16180 --- [ main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'repInfoResultBaseController': Unsatisfied dependency expressed through field 'entInfoBaseService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entInfoBaseService': Invocation of init method failed; nested exception is org.springframework.jdbc.BadSqlGrammarException: ### Error querying database. Cause: com.kingbase8.util.KSQLException: ERROR: syntax error at or near "`" Position: 1070 ### The error may exist in com/hjw/dowlnloadexcel/mapper/EntInfoBaseMapper.java (best guess) ### The error may involve defaultParameterMap ### The error occurred while setting parameters ### SQL: SELECT `id`, `update_time`, `is_del`, `note`, `user_id`, `cop_name`, `business_licence`, `owner_code`, `cop_owner`, `owner_phone`, `cop_address`, `cop_fax`, `zip_code`, `cop_email`, `unit`, `cop_capital`, `register_date`, `division_code`, `domain_id`, `subdivision_id`, `type_id`, `industry_id`, `org_id`, `is_transfor`, `cop_state`, `manage_cop`, `manage_type`, `is_maincop`, `maincop_name`, `energy_org`, `is_authenti`, `authenti_date`, `authenti_org`, `leader`, `leader_phone`, `cop_web`, `covered`, `cop_number`, `brief_introduction`, `cop_url`, `coordinate`, `creditcode`, `energypernum`, `is_enterprise`, `type`, `energy_name`, `energy_phone`, `energy_num`, `create_time`, `cop_nature`, `person_name`, `sex`, `dutiese`, `education`, `identity_card`, `major`, `industry_parent_id`, `user_type_id`, `create_by`, `update_by`, `valid`, `building_name`, `finish_time`, `building_function`, `floor_number`, `energy_saving`, `property_right_name`, `property_right_code`, `property_name`, `property_code`, `user_electric`, `user_water`, `user_gas`, `is_large_power` FROM `ent_info_base` ### Cause: com.kingbase8.util.KSQLException: ERROR: syntax error at or near "`" Position: 1070 ; bad SQL grammar []; nested exception is com.kingbase8.util.KSQLException: ERROR: syntax error at or near "`" Position: 1070 2025-11-05 11:34:32.864 INFO 16180 --- [ main] o.apache.catalina.core.StandardService : Stopping service [Tomcat] 2025-11-05 11:34:32.877 INFO 16180 --- [ main] ConditionEvaluationReportLoggingListener : Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. 2025-11-05 11:34:32.952 ERROR 16180 --- [ main] o.s.boot.SpringApplication : Application run failed org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'repInfoResultBaseController': Unsatisfied dependency expressed through field 'entInfoBaseService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entInfoBaseService': Invocation of init method failed; nested exception is org.springframework.jdbc.BadSqlGrammarException: ### Error querying database. Cause: com.kingbase8.util.KSQLException: ERROR: syntax error at or near "`" Position: 1070 ### The error may exist in com/hjw/dowlnloadexcel/mapper/EntInfoBaseMapper.java (best guess) ### The error may involve defaultParameterMap ### The error occurred while setting parameters ### SQL: SELECT `id`, `update_time`, `is_del`, `note`, `user_id`, `cop_name`, `business_licence`, `owner_code`, `cop_owner`, `owner_phone`, `cop_address`, `cop_fax`, `zip_code`, `cop_email`, `unit`, `cop_capital`, `register_date`, `division_code`, `domain_id`, `subdivision_id`, `type_id`, `industry_id`, `org_id`, `is_transfor`, `cop_state`, `manage_cop`, `manage_type`, `is_maincop`, `maincop_name`, `energy_org`, `is_authenti`, `authenti_date`, `authenti_org`, `leader`, `leader_phone`, `cop_web`, `covered`, `cop_number`, `brief_introduction`, `cop_url`, `coordinate`, `creditcode`, `energypernum`, `is_enterprise`, `type`, `energy_name`, `energy_phone`, `energy_num`, `create_time`, `cop_nature`, `person_name`, `sex`, `dutiese`, `education`, `identity_card`, `major`, `industry_parent_id`, `user_type_id`, `create_by`, `update_by`, `valid`, `building_name`, `finish_time`, `building_function`, `floor_number`, `energy_saving`, `property_right_name`, `property_right_code`, `property_name`, `property_code`, `user_electric`, `user_water`, `user_gas`, `is_large_power` FROM `ent_info_base` ### Cause: com.kingbase8.util.KSQLException: ERROR: syntax error at or near "`" Position: 1070 ; bad SQL grammar []; nested exception is com.kingbase8.util.KSQLException: ERROR: syntax error at or near "`" Position: 1070 at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:660) ~[spring-beans-5.3.26.jar:5.3.26] at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640) ~[spring-beans-5.3.26.jar:5.3.26] at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) ~[spring-beans-5.3.26.jar:5.3.26] at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399) ~[spring-beans-5.3.26.jar:5.3.26] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431) ~[spring-beans-5.3.26.jar:5.3.26] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619) ~[spring-beans-5.3.26.jar:5.3.26] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.26.jar:5.3.26] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.26.jar:5.3.26] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.26.jar:5.3.26] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.26.jar:5.3.26] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.26.jar:5.3.26] at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:955) ~[spring-beans-5.3.26.jar:5.3.26] at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:920) ~[spring-context-5.3.26.jar:5.3.26] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) ~[spring-context-5.3.26.jar:5.3.26] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:147) ~[spring-boot-2.7.10.jar:2.7.10] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:731) [spring-boot-2.7.10.jar:2.7.10] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408) [spring-boot-2.7.10.jar:2.7.10] at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) [spring-boot-2.7.10.jar:2.7.10] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1303) [spring-boot-2.7.10.jar:2.7.10] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1292) [spring-boot-2.7.10.jar:2.7.10] at com.hjw.dowlnloadexcel.DowlnloadExcelApplication.main(DowlnloadExcelApplication.java:10) [classes/:na] Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entInfoBaseService': Invocation of init method failed; nested exception is org.springframework.jdbc.BadSqlGrammarException: ### Error querying database. Cause: com.kingbase8.util.KSQLException: ERROR: syntax error at or near "`" Position: 1070 ### The error may exist in com/hjw/dowlnloadexcel/mapper/EntInfoBaseMapper.java (best guess) ### The error may involve defaultParameterMap ### The error occurred while setting parameters ### SQL: SELECT `id`, `update_time`, `is_del`, `note`, `user_id`, `cop_name`, `business_licence`, `owner_code`, `cop_owner`, `owner_phone`, `cop_address`, `cop_fax`, `zip_code`, `cop_email`, `unit`, `cop_capital`, `register_date`, `division_code`, `domain_id`, `subdivision_id`, `type_id`, `industry_id`, `org_id`, `is_transfor`, `cop_state`, `manage_cop`, `manage_type`, `is_maincop`, `maincop_name`, `energy_org`, `is_authenti`, `authenti_date`, `authenti_org`, `leader`, `leader_phone`, `cop_web`, `covered`, `cop_number`, `brief_introduction`, `cop_url`, `coordinate`, `creditcode`, `energypernum`, `is_enterprise`, `type`, `energy_name`, `energy_phone`, `energy_num`, `create_time`, `cop_nature`, `person_name`, `sex`, `dutiese`, `education`, `identity_card`, `major`, `industry_parent_id`, `user_type_id`, `create_by`, `update_by`, `valid`, `building_name`, `finish_time`, `building_function`, `floor_number`, `energy_saving`, `property_right_name`, `property_right_code`, `property_name`, `property_code`, `user_electric`, `user_water`, `user_gas`, `is_large_power` FROM `ent_info_base` ### Cause: com.kingbase8.util.KSQLException: ERROR: syntax error at or near "`" Position: 1070 ; bad SQL grammar []; nested exception is com.kingbase8.util.KSQLException: ERROR: syntax error at or near "`" Position: 1070 at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:160) ~[spring-beans-5.3.26.jar:5.3.26] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:440) ~[spring-beans-5.3.26.jar:5.3.26] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1796) ~[spring-beans-5.3.26.jar:5.3.26] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620) ~[spring-beans-5.3.26.jar:5.3.26] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.26.jar:5.3.26] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.26.jar:5.3.26] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.26.jar:5.3.26] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.26.jar:5.3.26] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.26.jar:5.3.26] at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) ~[spring-beans-5.3.26.jar:5.3.26] at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391) ~[spring-beans-5.3.26.jar:5.3.26] at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311) ~[spring-beans-5.3.26.jar:5.3.26] at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:657) ~[spring-beans-5.3.26.jar:5.3.26] ... 20 common frames omitted Caused by: org.springframework.jdbc.BadSqlGrammarException: ### Error querying database. Cause: com.kingbase8.util.KSQLException: ERROR: syntax error at or near "`" Position: 1070 ### The error may exist in com/hjw/dowlnloadexcel/mapper/EntInfoBaseMapper.java (best guess) ### The error may involve defaultParameterMap ### The error occurred while setting parameters ### SQL: SELECT `id`, `update_time`, `is_del`, `note`, `user_id`, `cop_name`, `business_licence`, `owner_code`, `cop_owner`, `owner_phone`, `cop_address`, `cop_fax`, `zip_code`, `cop_email`, `unit`, `cop_capital`, `register_date`, `division_code`, `domain_id`, `subdivision_id`, `type_id`, `industry_id`, `org_id`, `is_transfor`, `cop_state`, `manage_cop`, `manage_type`, `is_maincop`, `maincop_name`, `energy_org`, `is_authenti`, `authenti_date`, `authenti_org`, `leader`, `leader_phone`, `cop_web`, `covered`, `cop_number`, `brief_introduction`, `cop_url`, `coordinate`, `creditcode`, `energypernum`, `is_enterprise`, `type`, `energy_name`, `energy_phone`, `energy_num`, `create_time`, `cop_nature`, `person_name`, `sex`, `dutiese`, `education`, `identity_card`, `major`, `industry_parent_id`, `user_type_id`, `create_by`, `update_by`, `valid`, `building_name`, `finish_time`, `building_function`, `floor_number`, `energy_saving`, `property_right_name`, `property_right_code`, `property_name`, `property_code`, `user_electric`, `user_water`, `user_gas`, `is_large_power` FROM `ent_info_base` ### Cause: com.kingbase8.util.KSQLException: ERROR: syntax error at or near "`" Position: 1070 ; bad SQL grammar []; nested exception is com.kingbase8.util.KSQLException: ERROR: syntax error at or near "`" Position: 1070 at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:101) ~[spring-jdbc-5.3.26.jar:5.3.26] at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70) ~[spring-jdbc-5.3.26.jar:5.3.26] at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:79) ~[spring-jdbc-5.3.26.jar:5.3.26] at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:79) ~[spring-jdbc-5.3.26.jar:5.3.26] at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:92) ~[mybatis-spring-2.1.2.jar:2.1.2] at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:439) ~[mybatis-spring-2.1.2.jar:2.1.2] at com.sun.proxy.$Proxy67.selectList(Unknown Source) ~[na:na] at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:224) ~[mybatis-spring-2.1.2.jar:2.1.2] at org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:147) ~[mybatis-3.5.19.jar:3.5.19] at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:80) ~[mybatis-3.5.19.jar:3.5.19] at com.mybatisflex.core.mybatis.binding.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:146) ~[mybatis-flex-core-1.11.3.jar:na] at com.mybatisflex.core.mybatis.binding.FlexMapperProxy.invoke(FlexMapperProxy.java:90) ~[mybatis-flex-core-1.11.3.jar:na] at com.sun.proxy.$Proxy75.selectListByQuery(Unknown Source) ~[na:na] at com.mybatisflex.core.BaseMapper.selectAll(BaseMapper.java:846) ~[mybatis-flex-core-1.11.3.jar:na] at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627) ~[na:1.8.0_451] at com.mybatisflex.core.mybatis.binding.MybatisMapperProxy$DefaultMethodInvoker.invoke(MybatisMapperProxy.java:159) ~[mybatis-flex-core-1.11.3.jar:na] at com.mybatisflex.core.mybatis.binding.FlexMapperProxy.invoke(FlexMapperProxy.java:90) ~[mybatis-flex-core-1.11.3.jar:na] at com.sun.proxy.$Proxy75.selectAll(Unknown Source) ~[na:na] at com.hjw.dowlnloadexcel.service.EntInfoBaseService.init(EntInfoBaseService.java:34) ~[classes/:na] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_451] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_451] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_451] at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_451] at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:389) ~[spring-beans-5.3.26.jar:5.3.26] at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:333) ~[spring-beans-5.3.26.jar:5.3.26] at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:157) ~[spring-beans-5.3.26.jar:5.3.26] ... 32 common frames omitted Caused by: com.kingbase8.util.KSQLException: ERROR: syntax error at or near "`" Position: 1070 at com.kingbase8.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2613) ~[kingbase8-8.2.0.jar:V008R003C001B0104] at com.kingbase8.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2281) ~[kingbase8-8.2.0.jar:V008R003C001B0104] at com.kingbase8.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:437) ~[kingbase8-8.2.0.jar:V008R003C001B0104] at com.kingbase8.jdbc.KbStatement.executeInternal(KbStatement.java:461) ~[kingbase8-8.2.0.jar:V008R003C001B0104] at com.kingbase8.jdbc.KbStatement.execute(KbStatement.java:387) ~[kingbase8-8.2.0.jar:V008R003C001B0104] at com.kingbase8.jdbc.KbPreparedStatement.executeWithFlags(KbPreparedStatement.java:198) ~[kingbase8-8.2.0.jar:V008R003C001B0104] at com.kingbase8.jdbc.KbPreparedStatement.execute(KbPreparedStatement.java:187) ~[kingbase8-8.2.0.jar:V008R003C001B0104] at com.zaxxer.hikari.pool.ProxyPreparedStatement.execute(ProxyPreparedStatement.java:44) ~[HikariCP-4.0.3.jar:na] at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.execute(HikariProxyPreparedStatement.java) ~[HikariCP-4.0.3.jar:na] at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:65) ~[mybatis-3.5.19.jar:3.5.19] at com.mybatisflex.core.mybatis.FlexStatementHandler.query(FlexStatementHandler.java:103) ~[mybatis-flex-core-1.11.3.jar:na] at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:65) ~[mybatis-3.5.19.jar:3.5.19] at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:336) ~[mybatis-3.5.19.jar:3.5.19] at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158) ~[mybatis-3.5.19.jar:3.5.19] at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:110) ~[mybatis-3.5.19.jar:3.5.19] at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:90) ~[mybatis-3.5.19.jar:3.5.19] at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154) ~[mybatis-3.5.19.jar:3.5.19] at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) ~[mybatis-3.5.19.jar:3.5.19] at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142) ~[mybatis-3.5.19.jar:3.5.19] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_451] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_451] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_451] at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_451] at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:425) ~[mybatis-spring-2.1.2.jar:2.1.2] ... 52 common frames omitted 进程已结束,退出代码为 1
      最新发布
      11-06
      评论
      添加红包

      请填写红包祝福语或标题

      红包个数最小为10个

      红包金额最低5元

      当前余额3.43前往充值 >
      需支付:10.00
      成就一亿技术人!
      领取后你会自动成为博主和红包主的粉丝 规则
      hope_wisdom
      发出的红包

      打赏作者

      FireCoder

      你的鼓励将是我创作的最大动力

      ¥1 ¥2 ¥4 ¥6 ¥10 ¥20
      扫码支付:¥1
      获取中
      扫码支付

      您的余额不足,请更换扫码支付或充值

      打赏作者

      实付
      使用余额支付
      点击重新获取
      扫码支付
      钱包余额 0

      抵扣说明:

      1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
      2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

      余额充值