创建JAX-WS客户端以使用.NET Web服务(需要身份验证)

时间:2013-01-17 23:01:43

标签: java web-services jax-ws endpoint

正如我在标题中所说,我正在尝试将JAVA应用程序连接到远程Web服务。我是JAVA和Web Services的新手。我正在使用Eclipse IDE。

我做的第一件事就是在命令窗口中运行 wsimport 。提供了WSDL url,但收到错误: FAILED,找不到WSDL 。我多次检查以确保网址是正确的。

要四处走动,我在本地保存了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,并且由于需要身份验证,我必须设置用户名和密码,因为您可以在代码中看到它。

我得到的错误是超时错误。我想也许我没有正确设置这个ENDPOINT,因为没有提供正确的Web服务URL,所以无法提出请求。

我尝试在其中一个生成的java文件中编辑wsdlLocation,用真正的WSDL url替换本地路径,但是我收到了无法找到WSDL的错误。 JAX-WS只是讨厌这个WSDL或其他问题。请注意,我在.NET(C#)应用程序中使用此服务没有任何问题(Web服务本身在.NET中完成,WSE 2.0)

有什么想法吗?

谢谢

1 个答案:

答案 0 :(得分:1)

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

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

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

修改

您可以尝试在项目中本地存储WSDL。为了生成客户端,您可以将WSDL文件放在一个文件夹中,然后使用终端符号系统导航到该文件夹​​,将PATH设置为JDK的bin文件夹,并使用{{1使用本地wsdl文件。

请参阅Consuming a Web Service with Java 6 and JAX-WS中的示例 - Wiki - Confluence。

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