文章目录
- 问题描述
- 原因分析
- 在geoserver检查sld文本
- 推测一、是否是geoserver-manager的API优化sld文本,导致文本内容丢失
- 结论:geoserver-manager并没有优化文本
- 推测二、API接口本身就有问题
- 结论:可以确定是geoserver的内部出现问题
- 解决方法
- 在代码中如何解决?
解决方法直接从目录跳到最后
问题描述
使用geoserver-manager的工具在发布(创建和修改)样式时,发布的文本和传输的sld文本不一致。导致效果会变成下面这样:
原因分析
在geoserver检查sld文本
上面是我传输的文本
下面是实际的效果
经过比对,不仅xml的标签被改动,fill的属性内容也丢失了,发生了严重的bug
推测一、是否是geoserver-manager的API优化sld文本,导致文本内容丢失
第一时间就想到,可能是某种优化器将标签进行了替换和删减。直接拔源码查看
- Debug 到下面的位置进行检查
- 检查请求体中的数据是否被“篡改”
- 到这里可以发现我们传入的sld文本被转成二进制了
- idea支持以文本显示的形式展示,进入查看如下,可以确定的是,文本在发送前就是没有问题的
结论:geoserver-manager并没有优化文本
推测二、API接口本身就有问题
测试方法,使用apifox或者postman去发布样式,配置如下
请求头直接从工具内复制出来就行
测试结果:效果和使用geoserver-manager结果一样,文本都是丢失的
结论:可以确定是geoserver的内部出现问题
解决方法
推荐阅读原文,搜了好久终于找到的关键所在 http://t.csdn.cn/DwY2z
总结原因,就是这个更新样式的接口,在后续的geoserver的版本更新中,新增了一个叫raw
的参数,如果传入为false就不会覆盖原文。而恰恰官方给设置的值就是false。
验证:在apifox里添加这个参数raw=true
,再请求这个接口
查看效果
问题解决。
在代码中如何解决?
安装原文的方法是要求自定义一个请求。自己在尝试重写的过程中发现了一个很眼熟的参数如下:
不难发现,其实最新版的工具已经加入了该参数,尝试修改一下自己的发布样式方法:
加了以下两个参数
就可以解决问题了
如果没有参数,就把geoserver-manager升级到1.70即可