正如我在标题中所说,我正在尝试将 JAVA 应用程序连接到远程 Web 服务。我对 JAVA 和 Web 服务还很陌生。我正在使用 Eclipse IDE。
我做的第一件事是在命令窗口中运行wsimport 。提供了 WSDL url,但出现错误:FAILED,找不到 WSDL。我检查了多次以确保 url 是正确的。
为了解决这个问题,我在本地保存了 WSDL,并且 wsimport 没有任何问题。将所有生成的代码移到我的项目中,一切似乎都很好。
这是我的测试代码
// HAVE TO USE PROXY
final String authUser = "xxxxxx";
final String authPassword = "xxxxxx";
String proxyServer = "proxy1.xxxxx.com";
String proxyPort = "99999";
System.setProperty("http.proxyHost", proxyServer);
System.setProperty("http.proxyPort", proxyPort);
System.setProperty("http.proxyUser", authUser);
System.setProperty("http.proxyPassword", authPassword);
Authenticator.setDefault(
new Authenticator() {
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(authUser, authPassword.toCharArray());
}
}
);
WebServiceXX client = new WebServiceXX();
WebServiceXXSoap port = client.getPort(WebServiceXXSoap.class);
BindingProvider bp = (BindingProvider)port;
Map<String, Object> req_ctx = bp.getRequestContext();
req_ctx.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "https://domain.com/WebService/WebServiceXX.asmx");
req_ctx.put(BindingProvider.USERNAME_PROPERTY, "user");
req_ctx.put(BindingProvider.PASSWORD_PROPERTY, "password");
//HERE, TRYING TO CALL SERVICE. GETTING TIMEOUT ERROR IN 2nd LINE
WebServiceXXSoap service = client.getWebServiceXXSoap();
OperationStatusCodesResp StatusCodes = service.GetOperationStatusCodes();
简而言之,我不得不使用代理服务器。我测试了那部分,似乎没问题。由于我使用了本地 WSDL,我假设我必须手动设置 ENDPOINT URL,并且由于需要身份验证,因此我必须设置用户名和密码,正如您在代码中看到的那样。
我得到的错误是Time Out Error。我在想,也许我没有正确设置此 ENDPOINT,并且由于没有提供正确的 Web 服务 URL,因此无法发出该请求。
我尝试在生成的 java 文件之一中编辑 wsdlLocation,以用真实的 WSDL url 替换本地路径,但我收到错误,即找不到 WSDL。JAX-WS 要么讨厌这个 WSDL,要么就是其他问题。作为说明,我在 .NET (C#) 应用程序中使用此服务没有任何问题(Web 服务本身在 .NET、WSE 2.0 中完成)
有任何想法吗?
谢谢