正如我在标题中所说,我正在尝试将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)
有什么想法吗?
谢谢
答案 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基本授权部分中的方式。