你指定的認證是不夠的。你應該做這樣的事情:
private YourService proxy;
public YourServiceWrapper() {
try {
final String username = "username";
final String password = "password";
Authenticator.setDefault(new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(
username,
password.toCharArray());
}
});
URL url = new URL("http://yourserviceurl/YourService?WSDL");
QName qname = new QName("http://targetnamespace/of/your/wsdl", "YourServiceNameInWsdl");
Service service = Service.create(url, qname);
proxy = service.getPort(YourService.class);
Map<String, Object> requestContext = ((BindingProvider) proxy).getRequestContext();
requestContext.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, url.toString());
requestContext.put(BindingProvider.USERNAME_PROPERTY, username);
requestContext.put(BindingProvider.PASSWORD_PROPERTY, password);
Map<String, List<String>> headers = new HashMap<String, List<String>>();
requestContext.put(MessageContext.HTTP_REQUEST_HEADERS, headers);
} catch (Exception e) {
LOGGER.error("Error occurred in web service client initialization", e);
}
}
屬性:
- YourService - 您生成的Web服務客戶端界面。
- YourServiceWrapper() - 初始化您的服務的包裝類構造函數。
- url - 帶有
?WSDL
擴展名的Web服務的URL。
- qname - 第一個構造函數參數:來自
WSDL
文件的目標命名空間。第二:您的服務名稱爲WSDL
。
然後你就可以調用Web服務的方法是這樣的:
proxy.whatEverMethod();
不知道爲什麼有人downvoted這個問題。我也有同樣的問題 – Andremoniy