使用wsimport通过NTLM认证生成Navision WebService源文件遇阻求助
别急,我帮你一步步排查和解决这个生成源文件失败的问题。针对NTLM认证的WebService,wsimport确实需要一些特殊配置,咱们从最常见的错误点入手:
1. 先修正Auth文件的格式问题
你当前的auth2.txt内容格式不符合wsimport的要求,-Xauthfile要求每行必须和目标WebService的URL完全匹配,格式如下:
<目标WSDL的完整URL> <用户名>:<密码>
如果涉及NTLM域,用户名需要写成域\\用户名(反斜杠要转义),示例如下:
https://XXX.XXX.XXX.XXX:XXXX/XXXell/WS/XXXXLimited/Page/XXXXXOrder?wsdl DOMAIN\\yourusername:yourpassword
注意:这里一定要加上
?wsdl!Navision的WebService通常需要这个参数才能返回WSDL内容,你之前的命令里没加,这很可能是核心问题!
2. 添加NTLM认证的JVM参数
wsimport底层依赖JDK的HTTP客户端,默认可能没有开启NTLM优先支持,需要在命令中添加JVM参数来启用:
wsimport -J-Dhttp.auth.preference=NTLM -J-Djdk.http.auth.tunneling.disabledSchemes="" -XdisableSSLHostnameVerification -d generated -s source -Xauthfile auth2.txt -keep "https://XXX.XXX.XXX.XXX:XXXX/XXXell/WS/XXXXLimited/Page/XXXXXOrder?wsdl"
参数说明:
-J-Dhttp.auth.preference=NTLM:让HTTP客户端优先使用NTLM认证方式-J-Djdk.http.auth.tunneling.disabledSchemes="":解除JDK对NTLM隧道认证的默认禁用(部分JDK版本会限制)
3. 先验证WSDL的可达性
先确认你能正常获取到Navision的WSDL内容,用curl测试(替换成你的实际信息):
curl --ntlm -u DOMAIN\\yourusername:yourpassword "https://XXX.XXX.XXX.XXX:XXXX/XXXell/WS/XXXXLimited/Page/XXXXXOrder?wsdl"
如果curl都无法返回WSDL,那说明要么是URL错误、用户权限不足,要么是Navision的WebService配置有问题(比如没有启用该Page的WebService),得先解决这个基础问题。
4. 处理SSL证书问题(如果是自签名证书)
如果你的Navision用的是自签名SSL证书,除了-XdisableSSLHostnameVerification,可能还需要把证书导入到JVM的信任库,或者临时指定信任库参数:
wsimport -J-Dhttp.auth.preference=NTLM -J-Djdk.http.auth.tunneling.disabledSchemes="" -J-Djavax.net.ssl.trustStore=./your-truststore.jks -J-Djavax.net.ssl.trustStorePassword=truststore-pass -XdisableSSLHostnameVerification -d generated -s source -Xauthfile auth2.txt -keep "https://XXX.XXX.XXX.XXX:XXXX/XXXell/WS/XXXXLimited/Page/XXXXXOrder?wsdl"
常见坑点提醒
- 确保auth文件中的URL和wsimport命令里的URL完全一致,包括协议(https)、端口、路径,不能多/少斜杠
- 如果是域用户,用户名必须带域前缀,且文本文件里的反斜杠要写成双反斜杠(
\\) - 尽量使用JDK 8及以上版本,旧JDK对NTLMv2的支持可能有问题
内容的提问来源于stack exchange,提问作者venkata
相关产品推荐
相关产品推荐

