使用带有API身份验证的Java中的SOAP来使用Web服务

时间:2016-07-29 08:21:42

标签: java web-services soap wsdl

我正在尝试为此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!

1 个答案:

答案 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);