Axis Fault报错HttpErrorCode:301 Moved Permanently 老旧WebService故障求助
问题根因
这个报错是你调用的目标WebService接口已经做了永久地址迁移,你程序里配置的旧访问地址已经失效。301是HTTP协议定义的永久重定向状态码,返回信息里的nginx是对方服务的入口网关,它会告知访问者旧地址已经不再提供服务。你用的Apache Axis是非常老的WebService客户端框架,默认不会自动跟随301重定向,所以直接抛出异常终止调用。
解决步骤
- 第一步:定位你程序里配置的旧接口地址
从报错栈可以看到调用入口是ServiceANASoapStub类的dadosHidrometeorologicos方法,这是Axis根据WSDL生成的客户端存根类,地址要么是写在程序的配置文件(比如.properties、web.xml或者自定义的XML配置文件)里,要么是生成Stub类的时候硬编码在类代码里,先把当前用的旧地址找出来。 - 第二步:获取新的接口地址
直接用浏览器或者Postman访问你找到的旧地址,查看响应头里的Location字段,这个字段就是对方服务迁移后的新访问地址。 - 第三步:修改程序里的接口地址配置
如果你是在配置文件里存的地址,直接把旧地址替换成拿到的新地址,重启服务即可生效。
如果地址是硬编码在Stub类里,不需要重新生成Stub,直接在调用代码里手动指定新地址即可,示例代码如下:ServiceANASoapProxy proxy = new ServiceANASoapProxy(); // 手动指定新的endpoint地址,覆盖Stub里的硬编码默认值 ((org.apache.axis.client.Stub) proxy)._setProperty(org.apache.axis.client.Call.ENDPOINT_ADDRESS_PROPERTY, "你拿到的新接口地址"); // 后续正常调用方法即可 proxy.dadosHidrometeorologicos(参数);
常见注意事项
- 如果新地址是HTTPS协议的,你需要确认你运行程序的JDK版本信任新地址的SSL证书,如果出现SSL相关报错,把对方站点的SSL证书导入到JDK的
jre/lib/security/cacerts信任库即可。 - 不要尝试修改Axis配置让它自动跟随重定向,301是永久迁移,直接改地址是最稳定的方案,不会出现后续兼容性问题。
内容的提问来源于stack exchange,提问作者Danielle Carneiro
相关产品推荐
相关产品推荐

