Invalid value type for attribute ‘factoryBeanObjectType‘: java.lang.String


在使用SpringBoot与MyBatis整合时,遇到了如下异常信息:

Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: Invalid bean definition with name 'deptMapper' defined in file [F:\JavaWed\Java_Maven_Prejoct\tlias-managerment\target\classes\com\cainiao\mapper\DeptMapper.class]: Invalid value type for attribute 'factoryBeanObjectType': java.lang.String

导致这个原因是:

  1. 安全策略:现代的应用服务器和运行环境(如Spring Boot)可能配置了更严格的安全策略,阻止通过非安全连接(HTTP)加载外部资源。这是为了防止中间人攻击和其他安全问题。因此,当尝试通过HTTP协议加载DTD文件时,可能会被拦截或拒绝。

  2. SSL/TLS支持:一些应用服务器默认启用了SSL/TLS检查,并且只允许通过HTTPS加载外部资源。如果DTD文件是通过HTTP提供的,那么它将不会被加载,从而导致解析错误。

  3. 内容类型转换错误:当你看到“类型转换错误”时,这可能是由于DTD文件没有被正确下载或解析,导致XML映射文件中的元素无法被正确识别。这可能是因为服务器返回了一个错误的状态码或者一个不正确的MIME类型,而不是DTD本身的内容。

  4. 网络代理/防火墙:某些企业级网络环境中可能存在网络代理或防火墙设置,它们会阻止或修改HTTP请求。这种情况下,即使是有效的URL也可能无法访问到DTD文件。

  5. 缓存问题:有时候浏览器或应用服务器的缓存机制可能导致过期或损坏的DTD文件被使用,从而引起解析错误。

解决方案:

这是我们在Mybatis官网中复制的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">

此异常表明在解析DeptMapper类文件定义的bean时出现了类型不匹配的问题,具体是factoryBeanObjectType属性值无效。

经过排查发现,该问题是由于MyBatis映射器XML配置文件中的DOCTYPE声明引用了HTTP协议的DTD(文档类型定义)资源链接,导致Spring框架无法正确解析该XML文件。

Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: Invalid bean definition with name 'deptMapper' defined in file [F:\JavaWed\Java_Maven_Prejoct\tlias-managerment\target\classes\com\cainiao\mapper\DeptMapper.class]: Invalid value type for attribute 'factoryBeanObjectType': java.lang.String

我们这是只需要把配置把文件中http改成https就解决了

下面是修改后的配置信息:

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

为了解决这个问题,建议修改XML配置文件中对DTD的引用方式,将原来的HTTP链接替换为HTTPS链接。这不仅遵循了现代网络的安全实践,同时也能够解决因HTTP连接可能引起的兼容性或安全性问题。

备注: 尽管有时即便是在首次使用HTTPS加载后再次尝试通过HTTP加载不会立即报错,但为了确保长期稳定性和安全性,强烈推荐始终采用HTTPS协议来访问外部资源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值