生成 SOAP Java 客户端时 wsimport 身份验证问题
Issue with wsimport authentication when generating SOAP Java client
我使用以下命令为 java 生成 Web 服务客户端文件。
wsimport -keep http://test.com/test?wsdl -xauthfile auth.txt
以下是 auth.txt
但是,password
有像 abcw@sdsds
这样的特殊字符。
所以我遇到了错误的格式错误。所以我把密码编码成 abcw%40sdsds
。但是,现在由于解析密码错误导致身份验证错误。
有什么方法可以处理这种情况吗?
上网查了一下发现这个bug其实在最新的版本中已经修复了。但我仍然遇到同样的问题。您可以参考以下 link 以获取有关该错误的信息。
https://github.com/javaee/metro-jax-ws/issues/1101
所以我最终在 Java 中使用 HTTP 客户端通过 NTLM 身份验证发出了自定义 HTTP 请求。
String bodyAsString = ""; //Provide Input SOAP Message
CredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(AuthScope.ANY,
new NTCredentials("UserName", "Password", "Host", "Domain"));
HttpClient client = HttpClientBuilder.create().setDefaultCredentialsProvider(credsProvider).build();
HttpPost post = new HttpPost("URL"); //Provide Request URL
try
{
StringEntity input = new StringEntity(bodyAsString);
input.setContentType("text/xml; charset=utf-8");
post.setEntity(input);
post.setHeader("Content-type", "text/xml; charset=utf-8");
post.setHeader("SOAPAction", ""); //Provide Soap action
org.apache.http.HttpResponse response = client.execute(post);
HttpEntity responseEntity = response.getEntity();
if (responseEntity != null)
{
return EntityUtils.toString(responseEntity);
}
}
我从下面的githublink得到了上面的解决方案
https://github.com/sujithtw/soapwithntlm
我使用以下命令为 java 生成 Web 服务客户端文件。
wsimport -keep http://test.com/test?wsdl -xauthfile auth.txt
以下是 auth.txt
但是,password
有像 abcw@sdsds
这样的特殊字符。
所以我遇到了错误的格式错误。所以我把密码编码成 abcw%40sdsds
。但是,现在由于解析密码错误导致身份验证错误。
有什么方法可以处理这种情况吗?
上网查了一下发现这个bug其实在最新的版本中已经修复了。但我仍然遇到同样的问题。您可以参考以下 link 以获取有关该错误的信息。
https://github.com/javaee/metro-jax-ws/issues/1101
所以我最终在 Java 中使用 HTTP 客户端通过 NTLM 身份验证发出了自定义 HTTP 请求。
String bodyAsString = ""; //Provide Input SOAP Message
CredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(AuthScope.ANY,
new NTCredentials("UserName", "Password", "Host", "Domain"));
HttpClient client = HttpClientBuilder.create().setDefaultCredentialsProvider(credsProvider).build();
HttpPost post = new HttpPost("URL"); //Provide Request URL
try
{
StringEntity input = new StringEntity(bodyAsString);
input.setContentType("text/xml; charset=utf-8");
post.setEntity(input);
post.setHeader("Content-type", "text/xml; charset=utf-8");
post.setHeader("SOAPAction", ""); //Provide Soap action
org.apache.http.HttpResponse response = client.execute(post);
HttpEntity responseEntity = response.getEntity();
if (responseEntity != null)
{
return EntityUtils.toString(responseEntity);
}
}
我从下面的githublink得到了上面的解决方案 https://github.com/sujithtw/soapwithntlm