0

正如我在标题中所说,我正在尝试将 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 中完成)

有任何想法吗?

谢谢

4

1 回答 1

1

您可以尝试将注释和变量更改wsdlLocation为。@WebServiceClientbaseUrl

https://domain.com/WebService/WebServiceXX.asmx?WSDL

对于身份验证(基本),您可以在使用 JAX-WS (Client) 的 HTTP 基本身份验证中找到一个很好的指南。

编辑

您可以尝试在项目中本地存储 WSDL。要生成客户端,您可以将 WSDL 文件放在一个文件夹中,然后使用终端 o 符号系统导航到该文件夹​​,将PATHfor 指向binJDK 的文件夹,并wsimport与本地 wsdl 文件一起使用。

请参阅使用 Java 6 和 JAX-WS - Wiki - Confluence使用 Web 服务中的示例。

然后您可以使用指定端点地址和 HTTP 基本授权部分中的方式。

于 2013-01-18T00:44:33.243 回答