最近在公司做一个项目用到Spring中包涵Webservice时,服务端部署成功,也就是http://127.0.0.1:8080/itzc/AxisDeviceServerImpl.jws?wsdl可以访问,但客户端调用时老报org.xml.sax.SAXException: Bad envelope tag: htm异常,网上找了半天,发现很多网友碰到这种情况,但都没有解决的,最后自己攻克了,现在贴出来给供大家分享
问题:
原来是自己的spring中的过滤权限的问题,在调用服务的访问路径时,被spring的顾虑器给拦截了,最后返回一个空的XML文件,当然解析不了,就会报
org.xml.sax.SAXException: Bad envelope tag: htm错误;
解决方法:
可以在spring的文件中增加一个 <intercept-url pattern="/AxisDeviceServerImpl.jws" filters="none"/>让spring不拦截以这个路径的访问。
也可在客户端直接增加两行验证代码去过滤掉
call.getMessageContext().setUsername("module"); //用户名验证
call.getMessageContext().setPassword("123456");
客户端调用代码
public class TestAxisDevice {
public void axisDevice() throws Exception{
String serverURL = "http://127.0.0.1:8080/itzc/AxisDeviceServerImpl.jws?wsdl";
String serverMethod = "getChangeNoteByYunWei";
String resString="";
// 设置WEBSERVICE
Service service =new Service();
Call call=(Call)service.createCall();
call.setTargetEndpointAddress(new java.net.URL(serverURL));
call.setOperationName(new QName(serverURL,serverMethod));
// call.getMessageContext().setUsername("module"); //用户名验证
// call.getMessageContext().setPassword("123456");
// 调用远程接口
String[] aa=new String[]{"123456","2010-04-18","1","1","OK","5","2010-05-04"
,"孔祥泽","123456","魏冬华","123456"};
try {
resString=(String)call.invoke(aa);
} catch (AxisFault e) {
System.out.println("faultreason---------------"+e.getFaultReason());
}
System.out.println("-----------"+resString+"--------------");
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?