我正在尝试为此Web服务编写一个Java客户端
http://api.exigo.com/3.0/ExigoApi.asmx?WSDL
但无法设置其身份验证标头 在.Net环境中,有一个属性将ApiAuthentication对象设置为API 像这样的对象
//Set Authentication Header
ExigoApi api = new ExigoApi();
ApiAuthentication auth = new ApiAuthentication();
auth.Company = "company";
auth.LoginName = "name";
auth.Password = "password";
api.ApiAuthenticationValue = auth;
//Create request object
GetCustomersRequest req = new GetCustomersRequest();
//Specify which customer(s) we are getting
req.CustomerID = 1;
//Submit the request
GetCustomersResponse res = api.GetCustomers(req);
Console.WriteLine(res.Customers[0].CustomerID);
但在java中我找不到这个方法
api.ApiAuthenticationValue = auth;
这是我用java编写的代码但抛出异常
import com.exigo.api.*;
public class ExigoDemoService {
public static void main(String[] args) {
//Set Authentication Header
ExigoApi api = new ExigoApi();
ApiAuthentication auth = new ApiAuthentication();
auth.setCompany("company");
auth.setLoginName("name");
auth.setPassword("password");
//Create request object
GetCustomersRequest req = new GetCustomersRequest();
//Specify which customer(s) we are getting
req.setCustomerID(1);
//Submit the request
GetCustomersResponse res = api.getExigoApiSoap().getCustomers(req);
}
private static CreateCustomerResponse createCustomer(com.exigo.api.CreateCustomerRequest createCustomerRequest) {
com.exigo.api.ExigoApi service = new com.exigo.api.ExigoApi();
com.exigo.api.ExigoApiSoap port = service.getExigoApiSoap();
return port.createCustomer(createCustomerRequest);
}
private static GetCustomersResponse getCustomers(com.exigo.api.GetCustomersRequest getCustomersRequest) {
com.exigo.api.ExigoApi service = new com.exigo.api.ExigoApi();
com.exigo.api.ExigoApiSoap port = service.getExigoApiSoap();
return port.getCustomers(getCustomersRequest);
}
}
抛出异常是
Exception in thread "main" com.sun.xml.internal.ws.fault.ServerSOAPFaultException: Client received SOAP Fault from server: Authentication header missing!
Unable to Authenticate!
答案 0 :(得分:1)
所以我解决了这个问题:
ExigoApiLocator service = null;
ExigoApiSoap port = null;
service = new ExigoApiLocator();
port = service.getExigoApiSoap();
ApiAuthentication authentication = new ApiAuthentication();
authentication.setCompany("XYZCompany");
authentication.setLoginName("XYZAPIUser");
authentication.setPassword("XYZPassword");
authentication.setRequestTimeUtc(Calendar.getInstance());
((Stub) port).setHeader("http://api.exigo.com/", "ApiAuthentication", authentication);